Objective-C を使用してプログラムで XLSX ファイルを変更しようとしています。
これまでのところ、1 つのシートのデータのみを変更しています。私が取っている手順は次のとおりです。
- XLSX ファイルを Documents フォルダーにコピーします。
- ディレクトリ構造を保ったままXLSXコンテナを解凍
- 対応するシート XML ファイル (私の場合は sheet2.xml) を解析します。
- いくつかの行を追加
- XML 構造を書き換えて保存する
- 更新された XML ファイルを XLSX コンテナーに戻します。
ただし、新しい XLSX ファイルは破損します。XML の解析/書き込みにはGDataXMLを使用し、圧縮/解凍にはObjective-Zipを使用しています。
破損した XLSX ファイルを手動で解凍して再圧縮すると、エラーなしで開くので、作成した XML ファイルが適切であることはわかっています。OS X (Unarchiver を使用) と Windows (7-Zip を使用) の両方でこれを実行しました。
問題は、Objective-Zip ライブラリか、それを使用する方法にあります。以下は、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 ファイルを作成するには、どの zip ライブラリを使用すればよいですか?
- Objective-Zip が適している場合、コードの何が問題になっていますか?
別の質問への回答から、「OOXML 形式では、パッケージで許可されている唯一の圧縮方法が DEFLATE であることが強制されている」ことがわかりました。
Objective-Zip に DEFLATE を強制的に使用させることは可能ですか? または、DEFLATE を使用するオープンソースの iOS 圧縮ライブラリはありますか?