C # Excel Reader превращает метки времени в десятичное число - PullRequest
3 голосов
/ 13 мая 2011

Когда я использую Excel Reader, он читает все хорошо, кроме отметок времени. Например, 15:59:35 превращается в .67290509259259268

Как мне предотвратить это?

object[,] valueArray = (object[,])excelRange.get_Value(XlRangeValueDataType.xlRangeValueDefault);

Это мой массив, в котором хранятся значения, считанные с листа Excel. Не уверен, что в этом причина.

Ответы [ 2 ]

2 голосов
/ 13 мая 2011

Попробуйте DateTime.FromOADate - однако числовое значение, которое вы упомянули в вопросе, на самом деле не соответствует времени, которое вы упомянули.

2 голосов
/ 13 мая 2011

Причина в том, что 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.)

...