使用 .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) 异常)
test.xlsx
文件长什么样? - Robxlsx
格式,而不是一个重命名为 'xls' 或 'csv' 的文件。如果你无法弄清楚,请将文件上传到某个地方。 - Ernie S