2017-08-25 91 views
0

我正在使用C#和OpenXML进行项目。我收到一个错误,说“Excel能够通过重新制作或删除不可读的内容来打开文件”。OpenXML C# - 什么决定了open office文件结构中“sheet.xml”的名称?

我知道错误发生的原因(合并的单元格添加了冲突的范围),但是我对/xl/worksheets/sheets__.xml的命名感到困惑。大多数命名适当的sheet1,sheet2等,有时它们被命名为“sheet1e.xml”或“sheet1d.xml”。

如果我在Excel中进行修复后保存文件,我可以在Open XML SDK生产力工具中打开它。我没有看到以这种方式命名的工作表。

将文件重命名为“.zip”扩展名我能够看到名为“sheet1e.xml”的表单,因为错误提到了。

我以为它们命名这样会保存在文件结构:

 document.WorkbookPart.Workbook.Sheets.AppendChild(new Sheet() 
     { 
      Id = document.WorkbookPart.GetIdOfPart(worksheetPart), 
      SheetId = (UInt32)counter, 
      Name = "Sheet_" + counter 
     }); 

我必须失去了一些东西..有没有一种方法来设置.xml文件的名称以匹配说什么在错误中;我希望能有这样的用户至少知道问题发生在哪张表上,并且可以纠正数据库中重叠的数据。也许我不应该设置这个名字?

更新

我相信我已经找到了原因,但根本不知其所以然理解。听到比我有更多知识的人会很高兴。看起来在表格25之后,他们被命名为sheet1A,1B等。从我的表格名称中删除“_”修复了问题。

回答

0

OpenXML格式是xml文件和一些其他文件的zip结构。所有这些文件之间都有定义关系。

例如Sheet1.xml必须存在于:

[CONTENT_TYPES] .XML

覆盖 的ContentType =“应用/ vnd.openxmlformats-officedocument.spreadsheetml.worksheet + xml“ PartName =”/ xl/worksheets/sheet1.xml

XL/workbook.xml

R:ID = “RID1” sheetId = “1” 名称= “SHEETNAME”

r:id="rId1"的corespondency可以在:
xl/_rels/workbook.xml.rels

关系目标=“工作表/ sheet1。XML “ TYPE =” http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet” 编号= “RID1”

关系的目标告诉我们,XL /工作表/工作表Sheet1 .XML是表定义。

的sheet1.xml名字不应该被改变。你应该也小心,如果你改变了sheetID。

此外,从名称中的数字1,sheet1.xml ,并不意味着它是Excel文件中的第一张。图纸顺序由其他内容给出。

+0

谢谢!这有助于解释很多:) – hackingchemist

相关问题