COleSafeArrayを使って文字列データをエクセルに出力するにはC++でどのように記述すればよいですか?

COleSafeArrayを使用してExcelに文字列を書き込むには、次の手順に従う必要があります。

必要なヘッダーファイルをインクルードする

#include 
#include

文字列値を格納するために`COleVariant`オブジェクトを作成:

CString strValue = "Hello, World!";
COleVariant var(strValue);

COleVariantオブジェクトをCOleSafeArrayオブジェクトに変換します。

COleSafeArray sa;
sa.CreateOneDim(VT_VARIANT, 1);
LONG index[] = {0};
sa.PutElement(index, &var);

Excel アプリケーションを開いて `IDispatch` インターフェースポインタを取得します。

_Application app;
app.CreateDispatch("Excel.Application");

ワークブックを開くか新規作成する:

Workbooks workbooks = app.GetWorkbooks();
_Workbook workbook;
workbooks.Open(L"C:\\path\\to\\Workbook.xlsx", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
NULL, NULL, NULL);
// 如果要创建新的工作簿,请使用下面的代码:
// _Workbook workbook = workbooks.Add();

ワークシートオブジェクトの取得:

Sheets sheets = workbook.GetSheets();
_Worksheet sheet;
sheet = sheets.GetItem(COleVariant((short)(1)));

セルに文字列値を入力する:

Range range;
range = sheet.GetCells();
range = range.GetItem(COleVariant((long)(1)), COleVariant((long)(1)));
range.SetValue(COleVariant(sa));

ブックを保存して閉じる:

workbook.Save();
workbook.Close();

9. Excel アプリケーションを終了します。

app.Quit();

完全なサンプルコードは以下のとおりです。

#include 
#include 
int main() {
    CoInitialize(NULL);
    CString strValue = "Hello, World!";
    COleVariant var(strValue);
    COleSafeArray sa;
    sa.CreateOneDim(VT_VARIANT, 1);
    LONG index[] = {0};
    sa.PutElement(index, &var);
    _Application app;
    app.CreateDispatch("Excel.Application");
    Workbooks workbooks = app.GetWorkbooks();
    _Workbook workbook;
    workbooks.Open(L"C:\\path\\to\\Workbook.xlsx", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL, NULL, NULL, NULL);
    //_Workbook workbook = workbooks.Add();
    Sheets sheets = workbook.GetSheets();
    _Worksheet sheet;
    sheet = sheets.GetItem(COleVariant((short)(1)));
    Range range;
    range = sheet.GetCells();
    range = range.GetItem(COleVariant((long)(1)), COleVariant((long)(1)));
    range.SetValue(COleVariant(sa));
    workbook.Save();
    workbook.Close();
    app.Quit();
    CoUninitialize();
    return 0;
}

「ole32.lib」と「afxdisp.lib」ライブラリへのリンクが確立済みで、ファイルパスは実際の Excel ブックパスに置き換えていることを確認してください。

bannerAds