1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C++でExcelシートにデータを書き込む

Posted at

データとはセルに格納された情報のことで、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();
}

出力:
WriteDataToExcel.png

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();
}

出力:
WriteArrayToExcel.png


C++を使用してExcel XLSまたはXLSXファイルを操作するスキルについてもっと知りたいですか?このチュートリアルをご覧ください:

https://www.e-iceblue.com/Tutorials/C++/Spire.XLS-for-C++/Program-Guide/Spire.XLS-for-C++-Program-Guide-Content.html

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?