Skip to content

Instantly share code, notes, and snippets.

@bg1bgst333
Created September 24, 2024 08:02
Show Gist options
  • Save bg1bgst333/b8fa4d7cb1b69b29f2ea266d880e3195 to your computer and use it in GitHub Desktop.
Save bg1bgst333/b8fa4d7cb1b69b29f2ea266d880e3195 to your computer and use it in GitHub Desktop.
Workbook
// ヘッダのインクルード
// 既定のヘッダ
#include <windows.h> // 標準WindowsAPI
#include <tchar.h> // TCHAR対応
// 独自のヘッダ
#include "Workbook.h" // Word::CWorkbook
// コンストラクタCWorkbook
Excel::CWorkbook::CWorkbook() {
}
// 引数付きコンストラクタ.(IDispatchポインタpDispatchを受け取る.)
Excel::CWorkbook::CWorkbook(IDispatch *pDispatch) {
// m_pDispatchにセット.
m_pDispatch = pDispatch;
}
// デストラクタ~CCWorkbook
Excel::CWorkbook::~CWorkbook() {
// m_pDispatchの解放.
if (m_pDispatch != NULL) { // m_pDispatchがNULLでなければ.
m_pDispatch->Release(); // IDispatch::Releaseで解放.
m_pDispatch = NULL; // NULLをセット.
}
}
// 二重インクルード防止
#ifndef __EXCEL__WORKBOOK_H__
#define __EXCEL__WORKBOOK_H__
// 名前空間Excelの定義
namespace Excel {
// ワークブッククラスCWorkbookの定義
class CWorkbook {
// privateメンバ
private:
// privateメンバ変数
IDispatch *m_pDispatch; // IDispatchポインタm_pDispatch.
// privateメンバ関数
// コンストラクタ
CWorkbook(); // コンストラクタCWorkbook(newで生成不可.)
// publicメンバ
public:
// publicメンバ関数
// コンストラクタ
CWorkbook(IDispatch *pDispatch); // 引数付きコンストラクタ.(IDispatchポインタpDispatchを受け取る.)
// デストラクタ
virtual ~CWorkbook(); // デストラクタ~CWorkbook
};
}
#endif
// ヘッダファイルのインクルード
// 既定のヘッダ
#include <windows.h> // 標準WindowsAPI
#include <tchar.h> // TCHAR対応
// 独自のヘッダ
#include "Excel/Application.h" // Excel::CApplication
// _tmain関数の定義
int _tmain(int argc, TCHAR *argv[]) { // main関数のTCHAR版.
// COMの初期化.
CoInitialize(NULL); // CoInitializeでCOMを初期化.
// Excel::CApplicationの生成
Excel::CApplication *pApplication = Excel::CApplication::CreateInstance(); // Excel::CApplication::CreateInstanceで作成.
// 取得したpApplicationを出力.
_tprintf(_T("pApplication = 0x%08x\n"), (unsigned long)pApplication); // pApplicationを出力.
// アプリケーションの表示.
pApplication->put_Visible(TRUE); // Excel::CApplication::put_VisibleにTRUE渡して表示.
// Workbooksの取得.
Excel::CWorkbooks * pWorkbooks = NULL; // CWorkbooksポインタpWorkbooksをNULLで初期化.
pWorkbooks = pApplication->get_Workbooks(); // Excel::CApplication::get_WorkbooksでpWorkbooksを取得.
// 取得したpWorkbooksを出力.
_tprintf(_T("CWorkbooks * pWorkbooks = 0x%08x\n"), (unsigned long)pWorkbooks); // pWorkbooksを出力.
// Workbookを追加.
Excel::CWorkbook * pWorkbook = NULL; // CWorkbookポインタpWorkbookをNULLで初期化.
pWorkbook = pWorkbooks->Add(); // Excel::CWorkbooks::AddでWorkbookを追加し, それを取得.
// 追加したpWorkbookを出力.
_tprintf(_T("CWorkbook * pWorkbook = 0x%08x\n"), (unsigned long)pWorkbook); // pWorkbookを出力.
// pWorkbookの破棄.
if (pWorkbook != NULL) {
delete pWorkbook;
}
// pWorkbooksの破棄.
if (pWorkbooks != NULL) {
delete pWorkbooks;
}
// pApplicationの破棄.
if (pApplication != NULL) {
delete pApplication;
}
// COMの終了処理.
CoUninitialize(); // CoUninitializeで終了処理.
// プログラムの終了.
return 0; // 0を返して終了.
}
// ヘッダのインクルード
// 既定のヘッダ
#include <windows.h> // 標準WindowsAPI
#include <tchar.h> // TCHAR対応
// 独自のヘッダ
#include "Workbooks.h" // Word::CWorkbooks
// コンストラクタCWorkbooks
Excel::CWorkbooks::CWorkbooks() {
}
// 引数付きコンストラクタ.(IDispatchポインタpDispatchを受け取る.)
Excel::CWorkbooks::CWorkbooks(IDispatch *pDispatch) {
// m_pDispatchにセット.
m_pDispatch = pDispatch;
}
// デストラクタ~CWorkbooks
Excel::CWorkbooks::~CWorkbooks() {
// m_pDispatchの解放.
if (m_pDispatch != NULL) { // m_pDispatchがNULLでなければ.
m_pDispatch->Release(); // IDispatch::Releaseで解放.
m_pDispatch = NULL; // NULLをセット.
}
}
// Workbookの追加.
Excel::CWorkbook * Excel::CWorkbooks::Add() {
// メソッドやプロパティのDISPIDの取得.
LPOLESTR lpwszName = L"Add"; // lpwszNameを"Add"で初期化.
DISPID dispid; // DISPID型dispid.
HRESULT hr = m_pDispatch->GetIDsOfNames(IID_NULL, &lpwszName, 1, LOCALE_USER_DEFAULT, &dispid); // IDispatch::GetIDsOfNamesでdispid取得.
if (FAILED(hr)) { // 失敗.
return NULL;
}
// メソッドやプロパティにアクセス.
VARIANT var; // VARIANT構造体var.
DISPPARAMS dispparams; // DISPPARAMS構造体dispparams.
DISPID dispidname = DISPID_PROPERTYPUT; // dispidnameをDISPID_PROPERTYPUTに初期化.
VariantInit(&var); // varをVariantInitで初期化.
dispparams.cArgs = 0; // 引数の数は0.
dispparams.rgvarg = NULL; // NULLを指定.
dispparams.rgdispidNamedArgs = NULL; // NULLを指定.
dispparams.cNamedArgs = 0; // cNamedArgsも0.
hr = m_pDispatch->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, &dispparams, &var, NULL, NULL); // IDispatch::Invokeでアクセス.
if (FAILED(hr)) { // 失敗.
return NULL;
}
// 成功.
CWorkbook *pWorkbook = new CWorkbook(var.pdispVal); // CWorkbookのコンストラクタにvar.pdispValをセット.
return pWorkbook;
}
// 二重インクルード防止
#ifndef __EXCEL__WORKBOOKS_H__
#define __EXCEL__WORKBOOKS_H__
// ヘッダのインクルード
// 独自のヘッダ
#include "Workbook.h" // Excel::CWorkbook
// 名前空間Excelの定義
namespace Excel {
// ワークブックスクラスCWorkbooksの定義
class CWorkbooks {
// privateメンバ
private:
// privateメンバ変数
IDispatch *m_pDispatch; // IDispatchポインタm_pDispatch.
// privateメンバ関数
// コンストラクタ
CWorkbooks(); // コンストラクタCWorkbooks(newで生成不可.)
// publicメンバ
public:
// publicメンバ関数
// コンストラクタ
CWorkbooks(IDispatch *pDispatch); // 引数付きコンストラクタ.(IDispatchポインタpDispatchを受け取る.)
// デストラクタ
virtual ~CWorkbooks(); // デストラクタ~CWorkbooks
CWorkbook * Add(); // Workbookの追加.
};
}
#endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment