![](/img/trans.png)
[英]MVC 5 How to upload Excel file and read rows till the last populated data row using EPPlus (OfficeOpenXml) ExcelPackage
[英]OfficeOpenXML EPPlus in C# - Excel file becomes corrupt after a certain size of data is written to it
我正在使用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);
}
它現在可以工作了,我可以在不進入恢復模式的情況下打開文件。
我遇到了同樣的問題,這是由內存流和錯誤代碼引起的:)
當您在文件保存后處理流時,我可以假設您正在嘗試將其發送到某個地方,例如 HttpResponse,並且如果您在那里進行MemoryStream
到byte[]
轉換,則不應使用GetBuffer()
方法來完成,請調用ToArray()
代替。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.