我试图在iOS上以编程方式创建一个xlsx文件。由于xlsx文件的内部数据基本存储在单独的xml文件中,我尝试重新创建具有所有文件和子目录的xlsx结构,将其压缩成zip文件并将其扩展名设置为xlsx。我使用GdataxML解析器/ writer来创建所有必需的xml文件。但是,我收到的文件无法打开为xlsx文件。即使我从有效的xlsx文件中撕下所有数据,也可以通过从原始xml文件复制数据并手动压缩来手动创建所有xml文件,但是我无法重新创建一个有效的xlsx文件。
问题是:
> xlsx真的只是一个包含xml文件的存档?
>如果我不能将xml文件压缩成zip文件并将其扩展名设置为xlsx,那么如何以编程方式创建有效的xlsx文件?
回答你的问题:
> XLSX只是zip容器中的XML文件的集合。没有其他的魔法。
>如果您解压缩/解压缩有效的XLSX文件,然后重新压缩/压缩,并且您无法读取生成的输出,那么使用压缩软件的问题。尝试一个不同的库/实用程序或检查它使用的默认压缩类型和级别,并尝试匹配到任何Excel使用。或者检查zip文件以确保目录结构得到维护。
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