我正在尝试使用 Objective-C 以编程方式修改 XLSX 文件。
到目前为止,我只修改其中一张纸上的数据。我正在采取的步骤如下:
- 将 XLSX 文件复制到 Documents 文件夹
- 在保持目录结构的情况下解压 XLSX 容器
- 解析相应的工作表 XML 文件(在我的例子中是 sheet2.xml)
- 添加一些行
- 重写 XML 结构并保存
- 将更新的 XML 文件放回 XLSX 容器中
但是,新的 XLSX 文件会损坏。我使用GDataXML进行 XML 解析/写入,使用Objective-Zip进行压缩/解压缩。
我知道我创建的 XML 文件是正确的,因为当我手动解压缩并重新压缩损坏的 XLSX 文件时,它打开时没有任何错误。我在 OS X(使用 Unarchiver)和 Windows(使用 7-Zip)上都做过这个。
问题要么在于 Objective-Zip 库,要么在于我使用它的方式。下面是我如何实现压缩方法:
ZipFile *zipFile = [[ZipFile alloc] initWithFileName:XLSXDocumentsFilePath mode:ZipFileModeAppend];
ZipWriteStream *stream= [zipFile writeFileInZipWithName:XLSX_WORKSHEET_XML_SUBPATH compressionLevel:ZipCompressionLevelNone];
[stream writeData:data];
[stream finishedWriting];
[zipFile close];
我还尝试了其他可用的compressionLevel参数,但没有成功:
ZipCompressionLevelDefault
ZipCompressionLevelBest
ZipCompressionLevelFastest
我的问题是:
- 我应该使用哪个压缩库以编程方式创建有效的 XLSX 文件?
- 如果 Objective-Zip 合适,我的代码有什么问题?
从另一个问题的答案中,我发现:“OOXML 格式规定包中允许的唯一压缩方法是 DEFLATE”。
是否可以强制 Objective-Zip 使用 DEFLATE?或者是否有使用 DEFLATE 的开源 iOS 压缩库?