.xlsx文件可以在多远的范围内进行简化

时间:2016-07-08 13:45:24

标签: php xml excel file format

我目前正在开展一个PHP项目,并希望提供(非常基本的)Excel导出数据库表(只有单元格中的字符串和数字,没有格式化等)。我已经阅读了各种Excel文件格式。我想避免包含库来执行此操作。

我考虑过使用旧版Microsoft Office XML format,这似乎是最简单的解决方案。但是,当我为文件提供.xls扩展名而不是.xml时,Excel会发出警告。我不想生成.xml文件,因为我不能保证我的项目用户不会简单地双击文件而感到困惑。我将此作为最终选择。

理想情况下,我想生成一个Office Open XML(。xlsx,又名.Excel Workbook)文件,当前版本的Excel无需抱怨即可打开。所以我查看了格式,发现它是zip压缩的.xml文件夹。

structure of a xlsx file

我想我只需将整个目录放在服务器上,写入/替换xl/worksheets/sheet1.xml,再将其压缩并输出到浏览器。 遗憾的是,工作表不包含实际的字符串和数字,但引用了sharedStrings.xml的所有值。

我找到了这个出色的答案https://stackoverflow.com/a/18820405/3625228但理想情况下,我想摆脱我可以简化.xlsx的任何文件。

我查看了[Content_Types].xml,其中存储了依赖项:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types">
    <Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/>
    <Default Extension="xml" ContentType="application/xml"/>
    <Override PartName="/xl/workbook.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml"/>
    <Override PartName="/xl/worksheets/sheet1.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml"/>
    <Override PartName="/xl/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/>
    <Override PartName="/xl/styles.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml"/>
    <Override PartName="/xl/sharedStrings.xml" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml"/>
    <Override PartName="/docProps/core.xml" ContentType="application/vnd.openxmlformats-package.core-properties+xml"/>
    <Override PartName="/docProps/app.xml" ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml"/>
</Types>

我的问题是:

  • 是否可以从.xlsx存档中删除文件?
  • 在没有抱怨的情况下打开Excel绝对需要哪些文件?
  • 有没有办法或技巧将实际的字符串/值放入sheet1.xml并完全跳过sharedStrings.xml

免责声明:不寻找使用Microsoft Office XML(Excel 2003)格式文件的库和/或帮助

1 个答案:

答案 0 :(得分:2)

是的,您可以直接写入sheet1.xml ...我这样做:https://github.com/nimmneun/OneSheet 也许它给你一两个想法=) 我也不使用主题文件btw。

更新: 如果您还在搜索...我发现您实际上只需要5个文件,只需确保您的rels指向正确的文件/文件名:

workbook.xml
worksheet.xml
[Content_Types].xml
_rels/.rels
_rels/workbook.xml.rels

供参考:https://blogs.msdn.microsoft.com/brian_jones/2007/05/29/simple-spreadsheetml-file-part-3-formatting/

我将第3部分b / c链接到第1部分和第1部分。 2 =)