gpt4 book ai didi

c# - 使用 EPPlus 生成的 Excel 文件中的内容不可读

转载 作者:可可西里 更新时间:2023-11-01 03:12:31 24 4
gpt4 key购买 nike

当我使用 EPPlus 库从模板生成 Excel 文件时遇到了一个小问题。该文件有第一个电子表格,其中包含用于填充下表中数据透视表的数据。

当我打开生成的文件时,我收到以下错误消息:“Excel 在‘sampleFromTemplate.xlsx’中发现不可读的内容。是否要恢复此工作簿的内容?我相信此工作簿的来源,请单击"is"。”

我显然点击了"is",然后得到了对文件所做修复的总结,以及指向包含此内容的 xml 格式日志文件的链接:

<?xml version="1.0" encoding="UTF-8" standalone="true"?>
<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<logFileName>error095080_01.xml</logFileName>
<summary>Errors were detected in file 'C:\TEMP\sampleFromTemplate.xlsx'</summary>
<repairedRecords summary="Following is a list of repairs:">
<repairedRecord>Repaired Records: Table from /xl/tables/table1.xml part (Table)</repairedRecord>
</repairedRecords>
</recoveryLog>

这显然是由我在代码中定义的命名范围(“Table1”)引起的,该范围指示要用于数据透视表的数据。模板中已经有一个名为“Table1”的“表名”,但我似乎无法通过 ExcelPackage.Worksheet.Names 集合访问它。作为 EPPlus 的新手并且没有对 Excel 进行过很多试验,我不明白我哪里做错了。这是我生成文件的代码:

private string GenerateFromTemplate(string fileName, string templateName, DataTable tab)
{
FileInfo newFile = new FileInfo(string.Format("C:\\MyPath\\{0}.xlsx", fileName));
FileInfo templateFile = new FileInfo(string.Format("C:\\MyPath\\{0}.xlsx", templateName));

try
{
using (ExcelPackage pkg = new ExcelPackage(newFile, templateFile))
{
ExcelWorksheet sheet = pkg.Workbook.Worksheets["MyDataSheet"];
ExcelRange range = sheet.Cells[string.Format("A1:U{0}", dt.Rows.Count)];
pkg.Workbook.Names.Add("Table1", range as ExcelRangeBase);

int sheetRowIndex = 2;

foreach (DataRow row in this.dt.Rows)
{
sheet.Cells[sheetRowIndex, 1].Value = row["Row1"];
sheet.Cells[sheetRowIndex, 2].Value = row["Row2"];
[...]
sheet.Cells[sheetRowIndex, 21].Value = row["Row21"];

sheetRowIndex++;
}

pkg.Save();
return newFile.FullName;
}
}
catch (IOException ex) { return ex.Message; }
}

请注意,无论如何数据透视表都是正确填充的,那么为什么会发生这种情况?

谢谢:-)

最佳答案

我自己遇到了这个问题并修复了它,如果其他人遇到它,请将我的解决方案放在这里:

这是使用 asp.net,由于显而易见的原因,否则它不适用。

我的问题不是表格范围,Epplus 生成的文件很好,而是服务器响应将页面响应附加到 excel 文件,显然使文件无效。发送文件后立即结束服务器响应解决了我的问题,内容如下:

Response.BinaryWrite(pck.GetAsByteArray());  // send the file
Response.End();

关于c# - 使用 EPPlus 生成的 Excel 文件中的内容不可读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20906666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com