複数の Excel ファイルに保存されたデータをまとめる必要がある場合、Excel のマージは重要なツールです。例えば、各四半期の売上レポートを1つのファイルに統合することで、全年のデータをより包括的なビューで確認することができます。また、Excel をマージすることで、複数のファイルを切り替えるのではなく、同じ組織化されたワークブックにデータを保存できます。これにより、作業プロセスが効率化され、生産性が向上します。この記事では、Spire.XLS for C++ を使用して C++ で Excel ファイルを マージする方法について説明します。
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 日間有効な一時ライセンスを取得してください。