Member 13040174 Ответов: 1

Как проверить столбец в листе excel является форматом даты или нет?


Привет,
У меня есть datatable, чтобы экспортировать его в Excel. В некоторых версиях форматирование не является правильным, поэтому я получаю свой формат даты в виде некоторых чисел. Мне нужно отформатировать некоторые столбцы в datetime непосредственно в кодировании. Есть ли такая возможность?

Что я уже пробовал:

worksheet.get_Range((Microsoft.Office.Interop.Excel.Range)(worksheet.Cells[2, 1]), (Microsoft.Office.Interop.Excel.Range)(worksheet.Cells[rowsCount + 1, columnsCount])).Value = cells; // dataTable.AsEnumerable().Select(row => row.ItemArray).ToArray();
              worksheet.Columns.AutoFit();
              foreach (Microsoft.Office.Interop.Excel.Range row in worksheet.Columns)
              {
                  worksheet.Columns[3].NumberFormat = "dd/MM/yyyy";
              }

1 Ответов

Рейтинг:
2

CHill60

Вы уже установили, что существует свойство NumberFormat, И знаете, как установить его на дату, поэтому вместо того, чтобы просто установить его, сравните его с этим форматом.

Здесь есть отработанный пример C# : Как определить формат ячейки-это число или валюта учета ot или процент в excel с помощью Interop[^]
К сожалению, ссылка в решении сломана, но я думаю, что эта статья предоставит любую дополнительную информацию, которая вам нужна Пользовательские форматы чисел Excel | Exceljet[^]
В качестве альтернативы вы можете отформатировать множество столбцов с различными форматами, которые могут вам встретиться, и использовать следующее, Чтобы определить, как выглядят строки формата (непроверенные):

foreach (Microsoft.Office.Interop.Excel.Range col in worksheet.Columns)
{
    Debug.Print(col.NumberFormat);
}

Кроме того, не рекомендуется использовать имя переменной типа row чтобы держать колонну как в
foreach (Microsoft.Office.Interop.Excel.Range row in worksheet.Columns)
и нет никакого смысла использовать foreach, если вы собираетесь явно ссылаться на один столбец, как в
worksheet.Columns[3].NumberFormat = "dd/MM/yyyy";
Смотрите мой код выше для лучшего способа сделать это