C++ で XLSX パッケージングを扱う方法
Aspose.Cells は C++ 用の FOSS で、.xlsx Open XML 形式の Excel ファイルを読み書きします。内部では、XlsxWorkbookSerializer クラスがワークブックのすべてのパーツのロードと保存を調整します。このガイドでは、load/save API の使用方法と、パッケージング層が自動的に管理する内容を説明します。
ステップバイステップガイド
ステップ 1: ビルドの設定
cmake_minimum_required(VERSION 3.15)
project(XlsxPackaging CXX)
set(CMAKE_CXX_STANDARD 17)
add_subdirectory(path/to/Aspose.Cells-FOSS-for-Cpp)
add_executable(XlsxPackaging main.cpp)
target_link_libraries(XlsxPackaging PRIVATE Aspose.Cells.Foss.Cpp)ステップ 2: ヘッダーをインクルード
#include "aspose/cells_foss/Workbook.h"
#include "aspose/cells_foss/Worksheet.h"
#include "aspose/cells_foss/Cell.h"
using namespace Aspose::Cells_FOSS;ステップ 3: 既存の XLSX ファイルをロード
Workbook(filePath) コンストラクタは内部で XlsxWorkbookSerializer::Load を呼び出し、すべての Open XML パーツをアンパックします:
int main() {
Workbook workbook("input.xlsx");
Worksheet& sheet = workbook.GetWorksheets()[0];
std::string title = sheet.GetCells()["A1"].GetStringValue();
return 0;
}ステップ 4: ワークブックを変更する
標準の API を使用して、セル、スタイル、または構造の変更を行います:
sheet.GetCells()["A1"].PutValue("Updated Title");
sheet.GetCells()["B2"].PutValue(99.0);
sheet.GetCells()["C3"].SetFormula("=B2*2");ステップ 5: ワークブックを保存する
すべての Open XML パーツを XLSX アーカイブに再パックするには、Workbook::Save(fileName) を呼び出します:
workbook.Save("output.xlsx");
workbook.Dispose();形式は .xlsx の拡張子から推測されます。XlsxWorkbookSerializer::Save メソッドは、xl/workbook.xml、xl/worksheets/sheet*.xml、xl/styles.xml、および xl/sharedStrings.xml パーツの書き込みを自動的に処理します。
ステップ 6: パッケージング層が管理する内容を理解する
パッケージングの内部と直接やり取りする必要はありません。シリアライザが以下を処理します:
| Part | 管理者 |
|---|---|
| ブック構造 | XlsxWorkbookProperties |
| ワークシート データ | WorksheetXmlMapper |
| スタイルとフォント | XlsxWorkbookStyles |
| 共有文字列 | SharedStringTableXmlMapper |
| 文書のプロパティ | XlsxDocumentProperties |
| 定義された名前 | XlsxWorkbookDefinedNames |
一般的な問題と対処法
ファイルは保存されますが、Excelで開きません 出力ファイル パスが使用されていることを確認してください .xlsx 拡張子です。別の拡張子で保存すると、認識できないファイルになる可能性があります。
ラウンドトリップ後にスタイルが失われる Apply Cell::SetStyle(style) 呼び出す前に Workbook::Save. 保存後に変更されたスタイルは書き込まれません。
ファイルが空として読み込まれる ファイルがパスワードで保護されておらず、有効な XLSX であることを確認してください(not .xls or .xlsm). ライブラリはサポートしています .xlsx のみ。
保存後に定義された名前が欠落している 使用 Workbook::EnsureUniqueDefinedName() 保存する前に、スコープの競合を解決してください。
メモリが解放されません Call workbook.Dispose() 保存後に、すべての内部XLSXパッケージングリソースを解放します。
よくある質問
XLSX 以外の形式で保存できますか?
現在の v0.1 リリースでは、XLSX への保存のみがサポートされています。CSV の読み込みはサポートされていますが、CSV への保存は利用できません。
ライブラリは、私が変更していない既存のパーツを保持しますか?
はい。シリアライザは読み込んだすべてのパーツを往復処理します。変更されていないワークシートデータ、スタイル、および定義済み名前は、保存時に保持されます。
ワークブックパーツの生の XML を調べることはできますか?
XmlDocument::SaveToUtf8() メソッドは XML ドキュメントを文字列にシリアライズします。ただし、XLSX アーカイブパーツへの直接アクセスは公開されている API では提供されていません。カスタム XML 処理には XmlDocument を使用してください。
大きなファイル用のストリーミング API はありますか?
いいえ。現在のリリースでは、ワークブック全体をメモリに読み込みます。非常に大きなファイルの場合は、処理を小さなワークブックに分割することを検討してください。
読み込んだ同じファイルに上書き保存した場合、どうなりますか?
これはサポートされています。ライブラリはディスク上のファイルを上書きする前に新しい内部バッファに書き込むため、インプレース保存でソースが破損しません。