C#Excel Reader将时间戳转换为十进制数

时间:2011-05-13 15:47:38

标签: c# excel office-interop

当我使用Excel阅读器时,除了时间戳之外,它读取的所有内容都很好。例如,它将15:59:35转变为.67290509259259268

如何阻止这种情况发生?

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

这是我的数组,其中包含从Excel工作表中读取的值。不确定是不是这个原因。

2 个答案:

答案 0 :(得分:2)

原因是Excel将所有日期时间存储为浮点数。小数部分是时间分量,而整数部分代表日期。

您可以使用Range.Text值来获取正确格式化的文本。我认为你不能以与上面相同的方式使用它(尝试自己做同样的事情,所以还没有实际的方法)。另外要小心,它可能会慢慢阅读文本(阅读数字格式是v.slow)。

或者尝试使用库,FlexCel是我们使用的非常好的,或Apose是一个更完整的解决方案。

Itterative Approach (这几乎肯定比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的示例。)

答案 1 :(得分:2)

尝试DateTime.FromOADate - 但是,您在问题中提到的数值实际上与您提到的时间不符。