C#Excel Reader将Timestamps转换为十进制数字

当我使用Excel Reader时,除了时间戳以外,它可以读取所有内容。 例如,15:59:35变成.67290509259259268

我如何阻止这种情况的发生?

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

这是我的数组保存从Excel表读入的值。 不知道这是否是原因。

尝试DateTime.FromOADate – 但是,在问题中提到的数字值实际上并不对应于您提到的时间。

这样做的原因是Excel将所有date时间存储为浮点数。 小数部分是时间分量,而整数部分表示date。

您可以使用Range.Text值来获取文本,应该正确格式化。 我不认为你可以像上面一样使用它(试图自己做同样的事情,所以还没有得到实际的方法)。 也要警惕它可能会慢读文本(阅读数字格式是v.slow)。

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

迭代方法 (这肯定比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的其他示例。)