我正在使用该OfficeOpenXML库在我的.NET MVC应用程序中导出 excel 数据。但是,我注意到发生了一些有趣的事情。我可以下载该文件,但打开它时会提示我以下消息。如果我点击“是”,所有数据都会显示,没有任何问题。
我注意到只有在将一定数量的数据写入 excel 文件后才会出现此提示。而且数量不是很大。如果我写了 1000 行数据,如下所示,提示显示,但 10 行不显示。
下面的代码:
public static ExcelPackage GenerateExcelFile<T>(ExcelPackage pck)
{
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Data");
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn { ColumnName = "A" });
dt.Columns.Add(new DataColumn { ColumnName = "B" });
dt.Columns.Add(new DataColumn { ColumnName = "C" });
dt.Columns.Add(new DataColumn { ColumnName = "D" });
dt.Columns.Add(new DataColumn { ColumnName = "E" });
for (int i = 0; i < 1000; i++)
{
DataRow row = dt.NewRow();
row["A"] = "Value";
row["B"] = "Value";
row["C"] = "Value";
row["D"] = "Value";
row["E"] = "Value";
dt.Rows.Add(row);
}
ws.Cells["A1"].LoadFromDataTable(dt, true);
return pck;
}
这取自以下控制器:
public HttpResponseMessage ExportGridToExcelWithFilters ()
{
using (ExcelPackage pck = new ExcelPackage())
{
var excelData = ExcelExportVM.GenerateExcelFile(pck);
using (MemoryStream ms = new MemoryStream())
{
excelData.SaveAs(ms);
HttpResponseMessage responsePackage = new HttpResponseMessage();
responsePackage.Content = new ByteArrayContent(ms.GetBuffer());
responsePackage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
return responsePackage;
}
}
}
更改上面的代码以产生更少的数据:
for (int i = 0; i < 10; i++) //FROM 1000
{
DataRow row = dt.NewRow();
row["A"] = "Value";
row["B"] = "Value";
row["C"] = "Value";
row["D"] = "Value";
row["E"] = "Value";
dt.Rows.Add(row);
}
它现在可以工作了,我可以在不进入恢复模式的情况下打开文件。
