C++でExcelファイルのデータを管理する

セルにデータを追加する方法

Aspose.Cellsは、Microsoft Excelファイルを表すWorkbookクラスを提供します。Workbookクラスには、Excelファイルの各ワークシートへのアクセスを可能にするWorksheetsコレクションが含まれています。ワークシートはWorksheetクラスで表されます。WorksheetクラスはCellsコレクションを提供します。Cellsコレクション内の各アイテムはCellクラスのオブジェクトを表します。

Aspose.Cellsでは、CellクラスのPutValueメソッドを呼び出すことで、ワークシートのセルにデータを追加できます。Aspose.Cellsは、PutValueメソッドのオーバーロードバージョンを提供し、開発者は異なる種類のデータをセルに追加できます。これらのPutValueメソッドのオーバーロードバージョンを使用することで、セルにブール値、文字列、倍精度浮動小数点数、整数、日付/時間などを追加することが可能です。

#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;

int main()
{
    Aspose::Cells::Startup();

    U16String outDir(u"..\\Data\\02_OutputDirectory\\");

    Workbook workbook;

    WorksheetCollection worksheets = workbook.GetWorksheets();
    Worksheet worksheet = worksheets.Get(0);


    worksheet.GetCells().Get(U16String(u"A1")).PutValue(U16String(u"Hello World"));
    worksheet.GetCells().Get(U16String(u"A2")).PutValue(20.5);
    worksheet.GetCells().Get(U16String(u"A3")).PutValue((int32_t)15);
    worksheet.GetCells().Get(U16String(u"A4")).PutValue(true);

    Cell cellA1 = worksheet.GetCells().Get(U16String(u"A4"));
    Style style = cellA1.GetStyle();
    style.SetNumber(15);
    cellA1.SetStyle(style);

    workbook.Save(outDir + u"output.out.xls");

    std::cout << "Data inserted and workbook saved successfully." << std::endl;

    Aspose::Cells::Cleanup();
}

効率を向上させる方法

PutValueメソッドを使用してワークシートに大量のデータを追加する場合は、まず行ごとに、次に列ごとに値をセルに追加するべきです。このアプローチにより、アプリケーションの効率が大幅に向上します。

セルからデータを取得する方法

Aspose.Cellsは、Microsoft Excelファイルを表すWorkbookクラスを提供します。Workbookクラスには、ファイル内のワークシートへのアクセスを可能にするWorksheetsコレクションが含まれています。ワークシートはWorksheetクラスで表されます。WorksheetクラスはCellsコレクションを提供します。Cellsコレクション内の各アイテムはCellクラスのオブジェクトを表します。

Cellクラスには、それぞれのデータ型に応じてセルから値を取得するためのいくつかのプロパティが提供されています。

  • StringValue:セルの文字列値を返します。
  • DoubleValue:セルの倍精度浮動小数点数値を返します。
  • BoolValue:セルのブール値を返します。
  • DateTimeValue:セルの日付/時刻値を返します。
  • FloatValue:セルの浮動小数点数値を返します。
  • IntValue:セルの整数値を返します。

フィールドが埋められていない場合、DoubleValueまたはFloatValueのセルは例外をスローします。

また、CellクラスのTypeプロパティを使用してセルに含まれるデータの型を確認することもできます。実際、CellクラスのTypeプロパティは、その前に定義された値がリストされたCellValueType列挙型に基づいています。

セル値の種類 説明
IsBool セルの値がブール型であることを指定します。
IsDateTime セルの値が日付/時刻であることを指定します。
IsNull 空白セルを表します。
IsNumeric セルの値が数値であることを指定します。
IsString セルの値が文字列であることを指定します。
IsUnknown セルの値が不明であることを指定します。

上記の事前定義されたセル値タイプを使用して、各セルに存在するデータのTypeと比較することもできます。

#include <iostream>
#include "Aspose.Cells.h"

using namespace Aspose::Cells;

int main()
{
    Aspose::Cells::Startup();

    U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
    U16String inputFilePath = srcDir + u"book1.xls";

    Workbook workbook(inputFilePath);
    Worksheet worksheet = workbook.GetWorksheets().Get(0);

    int maxRow = worksheet.GetCells().GetMaxDataRow();
    int maxCol = worksheet.GetCells().GetMaxDataColumn();

    for (int row = 0; row <= maxRow; row++)
    {
        for (int col = 0; col <= maxCol; col++)
        {
            Cell cell = worksheet.GetCells().Get(row, col);

            U16String stringValue;
            double doubleValue = 0.0;
            bool boolValue = false;

            switch (cell.GetType())
            {
                case CellValueType::IsString:
                    stringValue = cell.GetStringValue();
                    std::cout << "String Value: " << stringValue.ToUtf8() << std::endl;
                    break;

                case CellValueType::IsNumeric:
                    doubleValue = cell.GetDoubleValue();
                    std::cout << "Double Value: " << doubleValue << std::endl;
                    break;

                case CellValueType::IsBool:
                    boolValue = cell.GetBoolValue();
                    std::cout << "Bool Value: " << boolValue << std::endl;
                    break;

                case CellValueType::IsDateTime:
                    stringValue = cell.GetStringValue();
                    std::cout << "DateTime Value: " << stringValue.ToUtf8() << std::endl;
                    break;

                case CellValueType::IsUnknown:
                    stringValue = cell.GetStringValue();
                    std::cout << "Unknown Value: " << stringValue.ToUtf8() << std::endl;
                    break;

                case CellValueType::IsNull:
                    break;
            }
        }
    }

    Aspose::Cells::Cleanup();
    return 0;
}

高度なトピック