【发布时间】:2021-09-07 22:39:37
【问题描述】:
使用 .net 4.5
我正在尝试使用 EPPlus (v4.0.4) 读取 .xls/.xlsx 文件,但出现错误。 SO 对同一错误有疑问,但没有一个涉及或解决我的问题。
protected void Page_Load(object sender, EventArgs e)
{
GetDataTableFromExcel(@"D:\test.xlsx");
}
private DataTable GetDataTableFromExcel(string path, bool hasHeader = true)
{
using (var pck = new OfficeOpenXml.ExcelPackage())
{
using (var stream = File.OpenRead(path))
{
pck.Load(stream);
}
var ws = pck.Workbook.Worksheets[1];
DataTable tbl = new DataTable();
foreach (var firstRowCell in ws.Cells[1, 1, 1, ws.Dimension.End.Column])
{
tbl.Columns.Add(hasHeader ? firstRowCell.Text : string.Format("Column {0}", firstRowCell.Start.Column));
}
var startRow = hasHeader ? 2 : 1;
for (int rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++)
{
var wsRow = ws.Cells[rowNum, 1, rowNum, ws.Dimension.End.Column];
DataRow row = tbl.Rows.Add();
foreach (var cell in wsRow)
{
row[cell.Start.Column - 1] = cell.Text;
}
}
return tbl;
}
}
错误发生在pck.Load(stream);
写入操作期间发生磁盘错误。 (例外来自 HRESULT: 0x8003001D (STG_E_WRITEFAULT)
【问题讨论】:
-
我认为使用 EPPLus 读取 xlsx 文件有更简单的方法。 Have a look
-
@Rob。在
var existingFile = new FileInfo(path);,我收到错误“无法打开包。包是 OLE 复合文档。如果这是加密包,请提供密码” -
你试图读取 xlsx 文件,对吗?
-
是的,你是对的。还尝试使用 .xls。同样的错误
-
您的代码看起来不错。确保它是真正的
xlsx,而不是重命名的“xls”或“csv”。如果您无法弄清楚,请将您的文件发布到某个地方。