当我使用Excel阅读器时,除了时间戳之外,它可以很好地读取所有内容。例如,它将 15:59:35 转换为 .67290509259259268
如何阻止这种情况发生?
object[,] valueArray = (object[,])excelRange.get_Value(XlRangeValueDataType.xlRangeValueDefault);
这是我的数组,它保存从 excel 工作表中读入的值。不知道这是否是原因。
尝试DateTime.FromOADate
- 但是,您在问题中提到的数值实际上与您提到的时间并不对应。
这样做的原因是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 的其他示例。