OpenXML C# - 什么决定了打开的办公文件结构中 "sheet.xml" 的名称?
OpenXML C# - What determines the name of "sheet.xml" in open office file strucure?
我正在使用 C# 和 Open 开发一个项目XML。我收到一条错误消息 "Excel was able to open the file by repoaring or removing the unreadable content"。
我知道为什么会发生错误(添加的合并单元格具有冲突的范围),但是我对 /xl/worksheets/sheets__.xml 的命名感到困惑。大多数被适当地命名为 sheet1、sheet2 等。有时它们被命名为 "sheet1e.xml" 或 "sheet1d.xml"。
如果我在 excel 进行修复后保存文件,我可以在 Open XML SDK Productivity Tool 中打开它。不过,我没有看到 sheet 以这种方式命名。
将文件重命名为“.zip”扩展名我可以看到 sheets 被恰当地命名为 "sheet1e.xml",正如错误所述。
我认为像这样命名它们会在文件结构中保留它:
document.WorkbookPart.Workbook.Sheets.AppendChild(new Sheet()
{
Id = document.WorkbookPart.GetIdOfPart(worksheetPart),
SheetId = (UInt32)counter,
Name = "Sheet_" + counter
});
我一定是遗漏了一些东西.. 有没有办法设置 .xml 文件的名称以匹配错误中所说的内容;我希望会有这样的用户至少知道 sheet 问题发生在什么地方,并且可以更正数据库中的重叠数据。也许我根本不应该设置名称?
更新
我相信我找到了原因,但不明白为什么。很高兴听到比我知识渊博的人的来信。似乎在 sheet 25 之后,它们被命名为 sheet1A、1B 等。从我的 sheet 名称中删除“_”解决了这个问题。
OpenXML 格式是 xml 个文件和一些附加文件的 zip 结构。所有这些文件之间都定义了关系。
例如 Sheet1.xml 必须出现在:
[Content_Types].xml
Override
ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"
PartName="/xl/worksheets/sheet1.xml"
和
xl/workbook.xml
sheet r:id="rId1" sheetId="1" name="SheetName"
r:id="rId1"
的对应关系可在以下位置找到:
xl/_rels/workbook.xml.rels
Relationship Target="worksheets/sheet1.xml"
Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet"
Id="rId1"
关系目标向我们显示 xl/worksheets/sheet1。xml 是 sheet 定义。
不应更改 sheet1.xml 名称。如果更改 sheetID,您也应该小心。
此外,名称sheet1.xml中的数字1并不意味着它是excel文件中的第一个sheet。 sheet 命令是由其他东西给出的。
我正在使用 C# 和 Open 开发一个项目XML。我收到一条错误消息 "Excel was able to open the file by repoaring or removing the unreadable content"。
我知道为什么会发生错误(添加的合并单元格具有冲突的范围),但是我对 /xl/worksheets/sheets__.xml 的命名感到困惑。大多数被适当地命名为 sheet1、sheet2 等。有时它们被命名为 "sheet1e.xml" 或 "sheet1d.xml"。
如果我在 excel 进行修复后保存文件,我可以在 Open XML SDK Productivity Tool 中打开它。不过,我没有看到 sheet 以这种方式命名。
将文件重命名为“.zip”扩展名我可以看到 sheets 被恰当地命名为 "sheet1e.xml",正如错误所述。
我认为像这样命名它们会在文件结构中保留它:
document.WorkbookPart.Workbook.Sheets.AppendChild(new Sheet()
{
Id = document.WorkbookPart.GetIdOfPart(worksheetPart),
SheetId = (UInt32)counter,
Name = "Sheet_" + counter
});
我一定是遗漏了一些东西.. 有没有办法设置 .xml 文件的名称以匹配错误中所说的内容;我希望会有这样的用户至少知道 sheet 问题发生在什么地方,并且可以更正数据库中的重叠数据。也许我根本不应该设置名称?
更新
我相信我找到了原因,但不明白为什么。很高兴听到比我知识渊博的人的来信。似乎在 sheet 25 之后,它们被命名为 sheet1A、1B 等。从我的 sheet 名称中删除“_”解决了这个问题。
OpenXML 格式是 xml 个文件和一些附加文件的 zip 结构。所有这些文件之间都定义了关系。
例如 Sheet1.xml 必须出现在:
[Content_Types].xml
Override ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml" PartName="/xl/worksheets/sheet1.xml"
和
xl/workbook.xml
sheet r:id="rId1" sheetId="1" name="SheetName"
r:id="rId1"
的对应关系可在以下位置找到:
xl/_rels/workbook.xml.rels
Relationship Target="worksheets/sheet1.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Id="rId1"
关系目标向我们显示 xl/worksheets/sheet1。xml 是 sheet 定义。
不应更改 sheet1.xml 名称。如果更改 sheetID,您也应该小心。
此外,名称sheet1.xml中的数字1并不意味着它是excel文件中的第一个sheet。 sheet 命令是由其他东西给出的。