Причина в том, что Excel хранит все свои DateTimes как числа с плавающей запятой. Десятичная часть - это компонент времени, а целая часть представляет дату.
Вы можете использовать значение Range.Text
, чтобы получить текст, который должен быть правильно отформатирован. Я не думаю, что вы можете использовать это так же, как описано выше (пытаясь сделать то же самое сам, так что пока не получил реального подхода). Также будьте осторожны, это может быть медленное чтение текста (чтение числовых форматов v.slow).
В качестве альтернативы попробуйте использовать библиотеку, FlexCel - очень хороший вариант, который мы используем, или Apose для более полного решения.
Итеративный подход (это почти наверняка значительно медленнее, чем get_Value, возвращающая объект [,]).
if (excelRange!= null)
{
int nRows = excelRange.Rows.Count;
int nCols = excelRange.Columns.Count;
for (int iRow = 1; iRow <= nRows; iRow++)
{
for (int iCount = 1; iCount <= nCols; iCount++)
{
excelRange= (Microsoft.Office.Interop.Excel.Range)xlSheet.Cells[iRow, iCount];
String text = excelRange.Text;
}
}
}
(Изменить: Удалены другие примеры, которые на самом деле были для Sharepoint.)