【发布时间】:2018-08-22 17:39:57
【问题描述】:
编辑
根据下面的回复,我遇到的错误可能会也可能不会导致我无法读取我的 excel 文件。也就是说,我没有从下面给出的 for 循环中的 worksheet.Cells[row,col].Value 行获取数据。
问题
我正在尝试从 Excel 文件中返回包含信息的 DataTable。具体来说,我相信它是 2013 年 excel 的 xlsx 文件。请看下面的代码:
private DataTable ImportToDataTable(string Path)
{
DataTable dt = new DataTable();
FileInfo fi = new FileInfo(Path);
if(!fi.Exists)
{
throw new Exception("File " + Path + " Does not exist.");
}
using (ExcelPackage xlPackage = new ExcelPackage(fi))
{
//Get the worksheet in the workbook
ExcelWorksheet worksheet = xlPackage.Workbook.Worksheets.First();
//Obtain the worksheet size
ExcelCellAddress startCell = worksheet.Dimension.Start;
ExcelCellAddress endCell = worksheet.Dimension.End;
//Create the data column
for(int col = startCell.Column; col <= endCell.Column; col++)
{
dt.Columns.Add(col.ToString());
}
for(int row = startCell.Row; row <= endCell.Row; row++)
{
DataRow dr = dt.NewRow(); //Create a row
int i = 0;
for(int col = startCell.Column; col <= endCell.Column; col++)
{
dr[i++] = worksheet.Cells[row, col].Value.ToString();
}
dt.Rows.Add(dr);
}
}
return dt;
}
错误
这就是事情变得奇怪的地方。我可以在startCell 和endCell 中看到正确的值。但是,当我查看worksheet 时,我在Cells 下偷看了一眼,我看到了一些我不明白的东西:
worksheet.Cells.Current' threw an exception of type 'System.NullReferenceException
尝试
- 使用常规字段重新格式化我的 Excel。
- 确保我的 Excel 中没有字段为空
- RTFM 的 epplus 文档。没有任何迹象表明这个错误。
- 查看了 stackoverflow 上的 EPPlus 错误。我的问题是独一无二的。
老实说,我无法弄清楚这个错误的真正含义是什么?我的格式有问题吗? epplus有什么问题吗?我在这里读过人们对 2013 xlsx 和 eeplus 没有任何问题,我只是想逐行解析 excel 文件。如果有人可以帮助我了解此错误的含义以及如何纠正它。我将不胜感激。我花了很长时间试图弄清楚这一点。
【问题讨论】:
-
Current 可能暗示你标记一个范围!?,然后你有一个当前单元格。这是否会影响您的程序,看不到对 Current 的任何访问权限,或者当您检查 Cells 对象中的某些内容时会引发异常,这是否会影响您?这实际上在 .net 环境中很常见
-
是的,这确实会影响我的程序。在下面的循环中枚举时,我看不到
Value。我认为这个错误是原因。 -
@doctor 这不是复制品。我不是在问为什么我在这里有一个空值,而是为什么它会导致我在底部的枚举失败。我看不到
Value。我会更准确地编辑问题。谢谢。 :) -
感谢大家到目前为止的回复。为所有参与的人投票。