データとはセルに格納された情報のことで、MS Excelではさまざまなツールを使って計算や分析を行うことができる。この記事では、C++を使ってエクセル文書を作成し、指定したセルにデータを書き込む方法を紹介する。
以下、2つの例を取り上げます:
エクセル処理用C++ライブラリのインストール
Spire.XLS for C++は、あらゆるタイプのC++アプリケーションでExcelファイルの作成、読み込み、書き込み、変換に使用できるプロフェッショナルなExcel C++ APIです。テンプレートからの新規Excelドキュメントの作成、既存Excelドキュメントの編集、Excelファイルの変換など、C++プラットフォームでのExcelプログラミングを高速化するオブジェクトモデルExcel APIを提供します。
以下のリンクをクリックし、チュートリアルに従ってインストールしてください。
C++でテキストや数値をセルに書き込む
指定したセルにテキスト値や数値値を割り当てるには、Worksheet->GetRange()->SetText()
または Worksheet->GetRange()->SetNumberValue()
メソッドを使用します。
サンプル C++ コード:
#include "Spire.Xls.o.h";
using namespace Spire::Xls;
int main() {
std::wstring outputFile = L"WriteDataToCells.xlsx";
//Workbookオブジェクトを作成する
intrusive_ptr<Workbook> workbook = new Workbook();
//最初のシートを入手する
intrusive_ptr<Worksheet> sheet = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(0));
//指定したセルにテキストと数値を書き込む
sheet->GetRange(1, 1)->SetText(L"商品ID");
sheet->GetRange(1, 2)->SetText(L"商品名");
sheet->GetRange(1, 3)->SetText(L"在庫状況");
sheet->GetRange(1, 4)->SetText(L"数量");
sheet->GetRange(2, 1)->SetText(L"SP-001");
sheet->GetRange(2, 2)->SetText(L"商品A");
sheet->GetRange(2, 3)->SetText(L"在庫補充");
sheet->GetRange(2, 4)->SetNumberValue(110);
sheet->GetRange(3, 1)->SetText(L"SP-002");
sheet->GetRange(3, 2)->SetText(L"商品B");
sheet->GetRange(3, 3)->SetText(L"使用中");
sheet->GetRange(3, 4)->SetNumberValue(82);
sheet->GetRange(4, 1)->SetText(L"SP-003");
sheet->GetRange(4, 2)->SetText(L"商品C");
sheet->GetRange(4, 3)->SetText(L"在庫切れ");
sheet->GetRange(4, 4)->SetNumberValue(0);
//指定したセルにスタイルを適用する
intrusive_ptr <CellStyle> style = dynamic_pointer_cast<CellStyle>(workbook->GetStyles()->Add(L"newStyle"));
style->GetFont()->SetIsBold(true);
sheet->GetRange(1, 1, 1, 4)->SetStyle(style);
//ファイルに保存
workbook->SaveToFile(outputFile.c_str(), ExcelVersion::Version2016);
workbook->Dispose();
}
C++で指定したセル範囲に配列を書き込む
Spire.XLS for C++ が提供する Worksheet->InsertArray()
メソッドを使用すると、プログラマはワークシートの指定したセル範囲にベクトルを書き込むことができます。ワークシートに配列を書き込む前に、配列をベクトルに変換する必要があります。
サンプル C++ コード:
#include "Spire.Xls.o.h";
using namespace Spire::Xls;
using namespace std;
int main() {
wstring outputFile = L"WriteArraysToCellRanges.xlsx";
//Workbookオブジェクトを作成する
intrusive_ptr<Workbook> workbook = new Workbook();
//最初のシートを入手する
intrusive_ptr<Worksheet> sheet = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(0));
//二次元配列の作成
wstring twoDimensionalArray[4][5] = {
{L"SKU", L"説明", L"購入日", L"購入価格"},
{L"SP7875", L"品目 1", L"2024/1/31", L"2000"},
{L"TR87680", L"品目 2", L"2024/3/10", L"1500"},
{L"MK676554", L"品目 3", L"2024/3/25", L"560"},
};
//行番号と列番号を取得
int rowNum = sizeof(twoDimensionalArray) / sizeof(twoDimensionalArray[0]);
int columnNum = sizeof(twoDimensionalArray[0]) / sizeof(twoDimensionalArray[0][0]);
//2次元配列を複数の1次元ベクトルに分割する
for (size_t i = 0; i < rowNum; i++)
{
vector<LPCWSTR> vec_temp;
for (size_t j = 0; j < columnNum; j++)
{
vec_temp.push_back(twoDimensionalArray[i][j].c_str());
}
//ワークシートにベクトルを挿入する
sheet->InsertArray(vec_temp, 1+i, 1, false);
}
//指定したセルにスタイルを適用する
intrusive_ptr <CellStyle> style = dynamic_pointer_cast<CellStyle>(workbook->GetStyles()->Add(L"newStyle"));
style->GetFont()->SetIsBold(true);
sheet->GetRange(1, 1, 1, 4)->SetStyle(style);
//ファイルに保存
workbook->SaveToFile(outputFile.c_str(), ExcelVersion::Version2016);
workbook->Dispose();
}
C++を使用してExcel XLSまたはXLSXファイルを操作するスキルについてもっと知りたいですか?このチュートリアルをご覧ください: