我正在尝试在 iOS 上以编程方式创建一个 xlsx 文件。由于 xlsx 文件的内部数据基本上存储在单独的 xml 文件中,我尝试重新创建 xlsx 结构及其所有文件和子目录,将它们压缩成一个 zip 文件并将其扩展名设置为 xlsx。我使用 GDataXML 解析器/编写器来创建所有必需的 xml 文件。但是,我得到的文件不能作为 xlsx 文件打开。即使我从有效的 xlsx 文件中提取所有数据,通过从原始 xml 文件复制数据并手动压缩它们来手动创建所有 xml 文件,我也无法重新创建有效的 xlsx 文件。
问题是:
- xlsx 真的只是一个包含 xml 文件的存档吗?
- 如果我不能将 xml 文件压缩成 zip 文件并将其扩展名设置为 xlsx,我该如何以编程方式创建有效的 xlsx 文件?
最佳答案
回答您的问题:
- XLSX 只是 zip 容器中 XML 文件的集合。没有其他魔法。
- 如果您解压缩/解压缩一个有效的 XLSX 文件,然后重新压缩/压缩它,而您无法读取生成的输出,那么问题通常出在重新压缩的文件上,或者不太可能出在压缩软件上。主要要检查的是目录结构是否保留在 zip 文件中。
xlsx 文件的内容示例:
unzip -l example.xlsx
Archive: example.xlsx
Length Date Time Name
-------- ---- ---- ----
769 10-15-14 09:23 xl/worksheets/sheet1.xml
550 10-15-14 09:22 xl/workbook.xml
201 10-15-14 09:22 xl/sharedStrings.xml
...
我会定期解压缩 XLSX 文件,进行微小的更改以进行测试,然后重新压缩它们,不会出现任何问题。
更新:重要的是避免压缩父目录。下面是在 Linux 或 OS X 上使用 zip
系统实用程序的示例:
# Unzip an xlsx file into a directory.
unzip example.xlsx -d newdir
# Make some valid changes to the files.
cd newdir/
vi xl/worksheets/sheet1.xml
# Rezip the files *FROM* the unzipped directory.
# Note: you could also re-zip to the original file if required.
find . -type f | xargs zip ../newfile.xlsx
# Check the file looks okay.
cd ..
unzip -l newfile.xlsx
xdg-open newfile.xlsx
关于xml - 如何从其内部子组件正确组装一个有效的 xlsx 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11082278/