Re[3]: VCでExcelのデータを取得/出力する方法を教えてください。


[コメントツリー表示を見る] [発言時刻順表示を見る]

Posted by Uz on 2000/10/12 15:37:15

In Reply to: Re[2]: VCでExcelのデータを取得/出力する方法を教えてください。 Posted by まき on 2000/10/12 14:03:02


    > > 後はそのクラスに対してファイルを開いたり、
    > > 値を取得したり、出力したりすれば。
    > > (大変ですけど。)
    > >
    > まさに、この方法が知りたいです!!

    > でも、そんなに大変なんですかぁ・・・。
    OLEオートメーション自体が僕にとっては大変なことです。
    VBなら簡単ですが。

    > どんな関数を使えばいいのか、どうやってセルの位置を取得するのか、
    > HELPとかいろんな掲示板とかHPとか、かなり探して見たものの・・・もう、泣きそうです。
    > 頼ってばかりで本当に申し訳ないのですが、この方法についてもう少し
    > 詳しく教えてください。

    サンプルを作りました。これを参考にすれば出来るでしょう。


    _Application app; // app is an _Application object.
    Workbooks books;
    _Workbook book;
    Worksheets sheets;
    _Worksheet sheet;
    Range range;

    LPDISPATCH lpDisp; // Often reused variable.
    // Common OLE variants. Easy variants to use for calling arguments.
    COleVariant
    covTrue((short)TRUE),
    covFalse((short)FALSE),
    covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
    // Start Microsoft Excel, get _Application object,
    // and attach to app object.
    if(!app.CreateDispatch("Excel.Application"))
    {
    AfxMessageBox("Couldn't CreateDispatch() for Excel");
    return;
    }
    // Set visible.
    app.SetVisible(TRUE);
    // Get the Workbooks collection.
    lpDisp = app.GetWorkbooks(); // Get an IDispatch pointer.
    ASSERT(lpDisp);
    books.AttachDispatch(lpDisp); // Attach the IDispatch pointer
    // to the books object.
    lpDisp = books.Open("C:\\sample.xls", // Test.xls is a workbook.
    covOptional, covOptional, covOptional, covOptional, covOptional,
    covOptional, covOptional, covOptional, covOptional, covOptional,
    covOptional, covOptional ); // Return Workbook's IDispatch pointer.

    book.AttachDispatch(lpDisp);

    lpDisp = book.GetWorksheets();

    sheets.AttachDispatch(lpDisp);

    lpDisp = sheets.GetItem(COleVariant((long)1));

    sheet.AttachDispatch(lpDisp);

    TRACE("Name: %s\n", sheet.GetName());

    lpDisp = sheet.GetCells();

    range.AttachDispatch(lpDisp);

    long nCol = 1;
    long nRow = 1;

    COleVariant v = range.GetItem(COleVariant(nRow), COleVariant(nCol));
    v.ChangeType(VT_BSTR);

    CString s = v.bstrVal;

    TRACE("Val : %s\n", s);

    s.Format("%s%s", s, "Test");

    range.SetItem(COleVariant(nRow), COleVariant(nCol), COleVariant(s));

    long i, j;
    for (i = 1; i < 10; i++)
    for (j = 1; j < 10; j++) {
    s.Format("%d", i*j);
    range.SetItem(COleVariant((long)(j+1)), COleVariant((long)i), COleVariant(s));
    }

    range.DetachDispatch();
    sheet.DetachDispatch();
    sheets.DetachDispatch();
    book.DetachDispatch();
    books.DetachDispatch();


記事スレッド一覧