> > 後はそのクラスに対してファイルを開いたり、 > > 値を取得したり、出力したりすれば。 > > (大変ですけど。) > > > まさに、この方法が知りたいです!!
> でも、そんなに大変なんですかぁ・・・。 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();
|