複数の Excel ファイルに保存されたデータをまとめる必要がある場合、Excel のマージは重要なツールです。例えば、各四半期の売上レポートを1つのファイルに統合することで、全年のデータをより包括的なビューで確認することができます。また、Excel をマージすることで、複数のファイルを切り替えるのではなく、同じ組織化されたワークブックにデータを保存できます。これにより、作業プロセスが効率化され、生産性が向上します。この記事では、Spire.XLS for C++ を使用して C++ で Excel ファイルを マージする方法について説明します。 複数のワークブックを1つにマージする 複数のワークシートを1つにマージする Spire.XLS for C++ をインストールします Spire.XLS for C++ をアプリケーションに組み込むには、2つの方法があります。一つは NuGet 経由でインストールする方法、もう一つは当社のウェブサイトからパッケージをダウンロードし、ライブラリをプログラムにコピーする方法です。NuGet 経由のインストールの方が便利で、より推奨されます。詳しくは、以下のリンクからご覧いただけます。 Spire.XLS for C++ を C++ アプリケーションに統合する方法 複数のワークブックを1つにマージする 複数のワークブックを1つにまとめるには、新しいワークブックを作成し、元のワークブックからシートをコピーして新しいワークブックに貼り付けます。具体的な手順は以下の通りです。 元のワークブックのパスをコンテナに入れます。 Workbook オブジェクトを初期化します。 新しいワークブックを作成し、デフォルトのシートを削除します。 一時的な Workbook オブジェクトを初期化します。 コンテナ内のワークブックをループします。 Workbook->LoadFromFile() メソッドを使用して、ワークブックを一時的な Workbook オブジェクトにロードします。 ワークブック内のシートをループします。 Workbook->GetWorksheets()->AddCopy() メソッドを使用して、各シートを新しいワークブックにコピーします。 Workbook->SaveToFile() メソッドを使用して、結果ワークブックをファイルに保存します。 C++ #include "Spire.Xls.o.h"; using namespace Spire::Xls; using namespace std; int main() { //ワークブックのパスをコンテナに入れる std::vector<std::wstring> files = { L"File1.xlsx", L"File2.xlsx", L"File3.xlsx" };; //Workbookオブジェクトを初期化して新しいワークブックを作成する Workbook* newWorkbook = new Workbook(); newWorkbook->SetVersion(ExcelVersion::Version2013); //デフォルトのシートを削除する newWorkbook->GetWorksheets()->Clear(); //一時的な Workbook オブジェクトを初期化する Workbook* tempWorkbook = new Workbook(); //コンテナ内のワークブックをループする for (auto file : files) { //現在のワークブックをロードする tempWorkbook->LoadFromFile(file.c_str()); //ワークブック内のすべてのシートをループする for (int i = 0; i < tempWorkbook->GetWorksheets()->GetCount(); i++) { Worksheet* sheet = tempWorkbook->GetWorksheets()->Get(i); //各シートを新しいワークブックにコピーする (dynamic_cast<XlsWorksheetsCollection*>(newWorkbook->GetWorksheets()))->AddCopy(sheet, WorksheetCopyType::CopyAll); } } //結果ブックをファイルに保存する newWorkbook->SaveToFile(L"MergeExcelFiles.xlsx", ExcelVersion::Version2013); newWorkbook->Dispose(); tempWorkbook->Dispose(); delete newWorkbook; delete tempWorkbook; } 複数のワークシートを1つにマージする 元のシートから使用データ範囲をコピーして、目的のシートに貼り付けることで、複数のシートを1つのシートにマージできます。以下の手順では、同じワークブック内の2つのシートを1つにマージする方法を説明します。 Workbook オブジェクトを初期化し、Workbook->LoadFromFile() メソッドを使用して Excel ワークブックをロードします。 Workbook->GetWorksheets()->Get(int index) メソッドを使用して、特定のシートを取得します(ここでのシートインデックスは0から始まります)。 Worksheet->GetAllocatedRange() メソッドを使用して、sheet2 の使用範囲を取得します。 Worksheet->GetRange(int row, int column) メソッドを使用して、sheet1 の目的範囲を指定します(ここでの行と列のインデックスは1から始まります)。 CellRange->Copy(CellRange destRange) メソッドを使用して、sheet2 の使用範囲を sheet1 の目的範囲にコピーします 。 XlsWorksheet->Remove() メソッドを使用して、ブックから sheet2 を削除します。 Workbook->SaveToFile() メソッドを使用して、結果ワークブックをファイルに保存します。 C++ #include "Spire.Xls.o.h"; using namespace Spire::Xls; using namespace std; int main() { //Workbookオブジェクトを初期化する Workbook* workbook = new Workbook(); //Excelワークブックをロードする workbook->LoadFromFile(L"Sample.xlsx"); //sheet1を取得する Worksheet* sheet1 = workbook->GetWorksheets()->Get(0); //sheet2を取得する Worksheet* sheet2 = workbook->GetWorksheets()->Get(1); //sheet2の使用範囲を取得する CellRange* sourceRange = sheet2->GetAllocatedRange(); //sheet1の目的範囲を指定する CellRange* destRange = sheet1->GetRange(sheet1->GetLastRow() + 1, 1); //sheet2の使用範囲をsheet1の目的範囲にコピーする sourceRange->Copy(destRange); //sheet2を削除する sheet2->Remove(); //結果ブックをファイルに保存する workbook->SaveToFile(L"MergeExcelWorksheets.xlsx", ExcelVersion::Version2013); workbook->Dispose(); delete workbook; } 一時ライセンスを申請する 結果ドキュメントから評価メッセージを削除したい場合、または機能制限を取り除く場合は、についてこのメールアドレスはスパムボットから保護されています。閲覧するにはJavaScriptを有効にする必要があります。 にお問い合わせ、30 日間有効な一時ライセンスを取得してください。