Created
September 19, 2024 23:12
-
-
Save bg1bgst333/231d990b47e4e5906ca50511148a4ef6 to your computer and use it in GitHub Desktop.
Workbooks
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ヘッダのインクルード | |
// 既定のヘッダ | |
#include <windows.h> // 標準WindowsAPI | |
#include <tchar.h> // TCHAR対応 | |
// 独自のヘッダ | |
#include "Application.h" // Word::CApplication | |
// コンストラクタCApplication | |
Excel::CApplication::CApplication() { | |
} | |
// staticな生成関数CreateInstance. | |
Excel::CApplication * Excel::CApplication::CreateInstance() { | |
// 変数の宣言と初期化. | |
CLSID clsid; // CLSIDを格納するclsid. | |
IDispatch * pDispatch = NULL; // IDispatchポインタpDispatchをNULLで初期化. | |
// "Excel.Application"のCLSIDの取得. | |
HRESULT hr = CLSIDFromProgID(_T("Excel.Application"), &clsid); // CLSIDFromProgIDで"Excel.Application"のclsidを取得. | |
if (FAILED(hr)) { // 失敗. | |
return NULL; | |
} | |
// IDispatchポインタpDispatchの取得. | |
hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_PPV_ARGS(&pDispatch)); // CoCreateInstanceで, pDispatchを生成. | |
if (FAILED(hr)) { // 失敗. | |
return NULL; | |
} | |
// 成功. | |
CApplication *pApplication = new CApplication(); | |
pApplication->m_pDispatch = pDispatch; | |
return pApplication; | |
} | |
// デストラクタ~CApplication | |
Excel::CApplication::~CApplication() { | |
// m_pDispatchの解放. | |
if (m_pDispatch != NULL) { // m_pDispatchがNULLでなければ. | |
m_pDispatch->Release(); // IDispatch::Releaseで解放. | |
m_pDispatch = NULL; // NULLをセット. | |
} | |
} | |
// 表示・非表示プロパティの設定. | |
BOOL Excel::CApplication::put_Visible(BOOL bVisible) { | |
// メソッドやプロパティのDISPIDの取得. | |
LPOLESTR lpwszName = L"Visible"; // lpwszNameを"Visible"で初期化. | |
DISPID dispid; // DISPID型dispid. | |
HRESULT hr = m_pDispatch->GetIDsOfNames(IID_NULL, &lpwszName, 1, LOCALE_USER_DEFAULT, &dispid); // IDispatch::GetIDsOfNamesでdispid取得. | |
if (FAILED(hr)) { // 失敗. | |
return FALSE; | |
} | |
// メソッドやプロパティにアクセス. | |
VARIANT var; // VARIANT構造体var. | |
DISPPARAMS dispparams; // DISPPARAMS構造体dispparams. | |
DISPID dispidname = DISPID_PROPERTYPUT; // dispidnameをDISPID_PROPERTYPUTに初期化. | |
var.vt = VT_I4; // 4バイトint. | |
if (bVisible) { // TRUEなら. | |
var.lVal = 1; // 値は1. | |
} | |
else { | |
var.lVal = 0; // 値は0. | |
} | |
dispparams.cArgs = 1; // 引数の数は1. | |
dispparams.rgvarg = &var; // &varを指定. | |
dispparams.rgdispidNamedArgs = &dispidname; // &dispidnameを指定. | |
dispparams.cNamedArgs = 1; // cNamedArgsも1. | |
hr = m_pDispatch->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYPUT, &dispparams, NULL, NULL, NULL); // IDispatch::Invokeでアクセス. | |
if (FAILED(hr)) { // 失敗. | |
return FALSE; | |
} | |
// 成功. | |
return TRUE; | |
} | |
// Workbooksオブジェクトプロパティの取得. | |
Excel::CWorkbooks * Excel::CApplication::get_Workbooks() { | |
// メソッドやプロパティのDISPIDの取得. | |
LPOLESTR lpwszName = L"Workbooks"; // lpwszNameを"Workbooks"で初期化. | |
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_PROPERTYGET, &dispparams, &var, NULL, NULL); // IDispatch::Invokeでアクセス. | |
if (FAILED(hr)) { // 失敗. | |
return NULL; | |
} | |
// 成功. | |
CWorkbooks *pWorkbooks = new CWorkbooks(var.pdispVal); // CWorkbooksのコンストラクタにvar.pdispValをセット. | |
return pWorkbooks; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 二重インクルード防止 | |
#ifndef __EXCEL__APPLICATION_H__ | |
#define __EXCEL__APPLICATION_H__ | |
// ヘッダのインクルード | |
// 独自のヘッダ | |
#include "Workbooks.h" // Word::CWorkbooks | |
// 名前空間Excelの定義 | |
namespace Excel { | |
// アプリケーションクラスCApplicationの定義 | |
class CApplication { | |
// privateメンバ | |
private: | |
// privateメンバ変数 | |
IDispatch *m_pDispatch; // IDispatchポインタm_pDispatch. | |
// privateメンバ関数 | |
// コンストラクタ | |
CApplication(); // コンストラクタCApplication(newで生成不可.) | |
// publicメンバ | |
public: | |
// publicメンバ関数 | |
// staticメンバ関数 | |
static CApplication * CreateInstance(); // staticな生成関数CreateInstance. | |
// デストラクタ | |
virtual ~CApplication(); // デストラクタ~CApplication | |
// メンバ関数 | |
BOOL put_Visible(BOOL bVisible); // 表示・非表示プロパティの設定. | |
CWorkbooks * get_Workbooks(); // Workbooksオブジェクトプロパティの取得. | |
}; | |
} | |
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ヘッダのインクルード | |
// 既定のヘッダ | |
#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をセット. | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 二重インクルード防止 | |
#ifndef __EXCEL__WORKBOOKS_H__ | |
#define __EXCEL__WORKBOOKS_H__ | |
// 名前空間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 | |
}; | |
} | |
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ヘッダファイルのインクルード | |
// 既定のヘッダ | |
#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を出力. | |
// pWorkbooksの破棄. | |
if (pWorkbooks != NULL) { | |
delete pWorkbooks; | |
} | |
// pApplicationの破棄. | |
if (pApplication != NULL) { | |
delete pApplication; | |
} | |
// COMの終了処理. | |
CoUninitialize(); // CoUninitializeで終了処理. | |
// プログラムの終了. | |
return 0; // 0を返して終了. | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment