【发布时间】:2016-08-30 15:57:10
【问题描述】:
当我尝试打开由以下代码创建的文档时,我收到了模棱两可的“excel 发现不可读的内容”错误:
public void GenerateWorkbookFromDB()
{
//Make a copy of the template file
File.Copy(HttpContext.Current.Server.MapPath("ReportTemplate/test.xlsx"), HttpContext.Current.Server.MapPath("Reports/test.xlsx"), true);
//Open up the copied template workbook
using (SpreadsheetDocument myWorkbook = SpreadsheetDocument.Open(HttpContext.Current.Server.MapPath("Reports/test.xlsx"), true))
{
WorkbookPart workbookPart = myWorkbook.WorkbookPart;
WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
string origninalSheetId = workbookPart.GetIdOfPart(worksheetPart);
WorksheetPart replacementPart = workbookPart.AddNewPart<WorksheetPart>();
string replacementPartId = workbookPart.GetIdOfPart(replacementPart);
OpenXmlReader reader = OpenXmlReader.Create(worksheetPart);
OpenXmlWriter writer = OpenXmlWriter.Create(replacementPart);
Row r = new Row();
Cell c = new Cell();
CellValue v = new CellValue();
v.Text = "test";
c.Append(v);
while (reader.Read())
{
if (reader.ElementType == typeof(SheetData))
{
if (reader.IsEndElement)
continue;
writer.WriteStartElement(new SheetData());
for (int row = 0; row < 20; row++)
{
writer.WriteStartElement(r);
for (int col = 0; col < 4; col++)
{
writer.WriteElement(c);
}
writer.WriteEndElement();
}
writer.WriteEndElement();
}
else
{
if (reader.IsStartElement)
writer.WriteStartElement(reader);
else if (reader.IsEndElement)
writer.WriteEndElement();
}
}
reader.Close();
writer.Close();
try
{
Sheet sheet = workbookPart.Workbook.Descendants<Sheet>().Where(s => s.Id.Value.Equals(origninalSheetId)).First();
sheet.Id.Value = replacementPartId;
workbookPart.DeletePart(worksheetPart);
}
catch (Exception ex) { }
}
}
非常感谢任何帮助或建议! :D
【问题讨论】:
-
你究竟是从哪里得到这个错误的?当您查看 Office Open Xml 工具中的 xlsx 时,该特定位置的 xml 是什么?
-
当我在调用 GenerateWorkbookFromDB() 后尝试打开文档时,Excel 给了我错误。它让我可以选择通过单击“是”来打开它。我不希望我的应用程序的用户每次都必须点击它:D
标签: c# asp.net excel openxml openxml-sdk