【问题标题】:OpenXML SDK saves .xlsx with files missingOpenXML SDK 保存缺少文件的 .xlsx
【发布时间】:2012-10-02 17:48:24
【问题描述】:

我正在使用 OpenXML SDK 创建一个电子表格。电子表格有几个工作表、样式等。

  • 当我在 Excel 中打开文件时,它呈现正常,没有错误,并且正确显示所有单元格格式和数据。
  • 当我在移动设备上打开文件时,根据应用程序的不同,我收到错误消息,表明文件已损坏或完全丢失。

我在 Excel 中打开了 .xlsx 文件并将其保存到另一个文件中;然后我对相应 zip 文件中的目录结构进行了比较。我注意到:

  • 新副本(通过 Excel 的副本)现在可以在所有经过测试的移动应用上正确呈现。
  • 只有新副本包括:
    • /docProps
    • /xl/主题
    • docProps/app.xml
    • docProps.core.xml
    • docProps/theme1.xml
  • 只有旧版本包括:
    • /xl/worksheets/_rels/
    • sheet#.xml.rels
  • 修改后的文件:
    • sheet#.xml
    • sharedStrings.xml
    • styles.xml
    • workbook.xml
    • [Content_Types].xml

在保存之前我需要对这个文件做些什么来解决这些冲突?

【问题讨论】:

  • 也许您没有保存您创建的 xlsx 文件的某些部分。 Excel 可以处理它并显示文件,但其他一些编辑器没有它们就无法读取文件。不过这只是猜测。
  • 我正在创建两个字体、一个边框、一个 CellStyleFormat、几个填充和几个 CellFormat 以将它们与单元格相关联,所有这些都包括所需的默认值。除了明显的工作表和零件等,还需要什么?这些 _rels 项目去哪里了?
  • 通过调用spreadsheet.WorkbookPart.WorkbookStylesPart.Stylesheet.Save();,确保单独保存样式表(如果添加了任何样式表)。
  • 是的,我在样式文件中看到了我的样式信息 - 它在 Excel 本身中打开并正确显示。
  • 很高兴您找到了解决方案。但是,我认为使用模板文件作为基础也可以解决此问题(并且不需要使用互操作)。

标签: c# openxml openxml-sdk


【解决方案1】:

问题似乎是关系 URI。有关类似问题,请参阅此问题:

OpenXML spreadsheet created in .NET won't open in iPad

最大的问题是工作表 XML 文件必须是“sheet1.xml”而不是“/xl/sheet1.xml”,就像其他相关的 XML 文件一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 2012-12-28
    • 2020-06-17
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多