52

iOSでプログラムでxlsxファイルを作成しようとしています。xlsxファイルの内部データは基本的に別々のxmlファイルに保存されるため、すべてのファイルとサブディレクトリを含むxlsx構造を再作成し、それらをzipファイルに圧縮して、拡張子をxlsxに設定しようとしました。必要なすべてのxmlファイルを作成するためにGDataXMLパーサー/ライターを使用します。ただし、取得したファイルをxlsxファイルとして開くことはできません。有効なxlsxファイルからすべてのデータをリッピングし、元のxmlファイルからデータをコピーして手動ですべてのxmlファイルを作成し、それらを手動で圧縮しても、有効なxlsxファイルを再作成できません。

質問は次のとおりです。

  • xlsxは本当にxmlファイルを含む単なるアーカイブですか?
  • xmlファイルをzipファイルに圧縮してその拡張子をxlsxに設定できない場合、プログラムで有効なxlsxファイルを作成するにはどうすればよいですか?
4

4 に答える 4

79

あなたの質問に答えて:

  1. XLSX は、zip コンテナー内の XML ファイルの単なるコレクションです。他の魔法はありません。
  2. 有効な XLSX ファイルを解凍/解凍し、再圧縮/zip した結果の出力を読み取れない場合は、圧縮ソフトウェアまたは再圧縮したファイルに問題があります。別のライブラリ/ユーティリティを試すか、使用するデフォルトの圧縮タイプとレベルを確認して、Excel が使用するものと一致させてみてください。または、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 ファイルを解凍し、テスト用に小さな変更を加えて、問題なく再圧縮しています。

更新: 重要なことは、親ディレクトリを圧縮しないことです。zipLinux または OS X でシステム ユーティリティを使用する例を次に示します。

# 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
于 2012-06-20T09:47:15.817 に答える
35

xlsx ファイルをフォルダーに解凍してから再度圧縮すると、xlsx が破損したり、認識されなくなります。私の場合、原因は、zip ツールがフォルダー名を zip 内の各ファイルの相対パスの最初のレベルとして使用していることです。

フォルダー内に xlsx コンテンツを含む空の zip ファイルを作成し、すべてのファイルとフォルダーを追加することで問題を解決しました。

実際、フォルダー自体を圧縮しようとすると、ファイルは有効な xlsx ではありません。むしろ、フォルダー内に移動し、すべてのコンテンツを選択してから、右クリックして圧縮する必要があります。

于 2012-10-24T10:25:10.207 に答える