○MFC Excel操作

プロジェクト→クラスの追加→TypeLibからのMFCクラスを開く

■タイプライブラリを選択して、クラスを生成します。

私の場合はMicrosoft Excel 8.0 Object Library<1.2>を選択して

CApplication.h
CWorkbooks.h
CWorksheet.h
CWorksheets.h
CRange.h

以上のラッパークラスを作成しました。







#include "CApplication.h"
#include "CWorkbooks.h"
#include "CWorksheet.h"
#include "CWorksheets.h"
#include "CRange.h"

CApplication app;
CWorkbooks books;

COleVariant NonOption((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

void CsssDlg::OnBnClickedButton1()
{

	CoInitialize(NULL);//COMを利用するスレッド毎に呼び出さなければならないAPI

	if(app.CreateDispatch("Excel.Application")){
		app.put_Visible(TRUE);//エクセルを画面に表示
		books=app.get_Workbooks();

		books.Add(NonOption);//新しいシートを開く

		//books.Open("c:\\a.xls",//読み取り専用でファイルを開く
		//NonOption,NonOption,NonOption,NonOption,NonOption,NonOption,
		//NonOption,NonOption,NonOption,NonOption,NonOption,NonOption);

		CWorksheets sheets=app.get_Worksheets();
		CWorksheet sheet=sheets.get_Item(COleVariant((short)1));//一つ目のシートを選択
		CRange r = sheet.get_Range(COleVariant("A1"), COleVariant("A1"));//セルを取得

		r.put_Value(COleVariant("=A2+A3"));//セルに文字や数式を入れる

		CString str=r.get_Value();//セルの値を取得
		TRACE(str);

		sheet.SaveAs("c:\\test.xls",NonOption,NonOption,NonOption,//ファイルへ保存
		NonOption,NonOption,NonOption,NonOption,NonOption);

		app.Quit();
		books.ReleaseDispatch();
		app.ReleaseDispatch();
	}else{
		TRACE("err");
	}
}

○補足

私の環境では、CRange.hの内容が

	VARIANT DialogBox()
	{
		............................
	}
となっており、エラーが発生しましたので、
勝手に、
	VARIANT CDialogBox()
	{
		............................
	}

に変更しました。



▲トップページ > Windows と C++