Created
September 24, 2024 21:39
-
-
Save bg1bgst333/8058b5a2e1ab49c2d1813520222f294d to your computer and use it in GitHub Desktop.
Workbooks.Open
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をセット. | |
} | |
} | |
// 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; | |
} | |
// 指定のWorkbookを開く. | |
Excel::CWorkbook * Excel::CWorkbooks::Open(LPCTSTR lpctszFileName) { | |
// メソッドやプロパティのDISPIDの取得. | |
LPOLESTR lpwszName = L"Open"; // lpwszNameを"Open"で初期化. | |
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. | |
VARIANT varResult; // 結果を格納するVARIANT構造体varResult. | |
DISPPARAMS dispparams; // DISPPARAMS構造体dispparams. | |
DISPID dispidname = DISPID_PROPERTYPUT; // dispidnameをDISPID_PROPERTYPUTに初期化. | |
var.vt = VT_BSTR; // 文字列 | |
var.bstrVal = SysAllocString(lpctszFileName); // SysAllocStringでlpctszFileNameのBSTR生成. | |
VariantInit(&varResult); // VariantInitでvarResult初期化. | |
dispparams.cArgs = 1; // 引数の数は1. | |
dispparams.rgvarg = &var; // &varを指定. | |
dispparams.rgdispidNamedArgs = NULL; // NULLを指定. | |
dispparams.cNamedArgs = 0; // cNamedArgsも0. | |
hr = m_pDispatch->Invoke(dispid, IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD, &dispparams, &varResult, NULL, NULL); // IDispatch::Invokeでアクセス. | |
SysFreeString(var.bstrVal); // SysFreeStringでvar.bstrValを破棄. | |
if (FAILED(hr)) { // 失敗. | |
return NULL; | |
} | |
// 成功. | |
CWorkbook *pWorkbook = new CWorkbook(varResult.pdispVal); // CWorkbookのコンストラクタにvarResult.pdispValをセット. | |
return pWorkbook; | |
} |
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__ | |
// ヘッダのインクルード | |
// 独自のヘッダ | |
#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の追加. | |
CWorkbook * Open(LPCTSTR lpctszFileName); // 指定のWorkbookを開く. | |
}; | |
} | |
#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を出力. | |
// xlsxファイルのパス生成. | |
TCHAR tszCurrentPath[MAX_PATH] = { 0 }; // このプロセスの現在のディレクトリパスを指すTCHAR配列tszCurrentPath(長さMAX_PATH)を{0}で初期化. | |
GetCurrentDirectory(MAX_PATH, tszCurrentPath); // GetCurrentDirectoryでtszCurrentPathを取得. | |
_tcscat(tszCurrentPath, _T("\\")); // "\"を連結. | |
_tcscat(tszCurrentPath, _T("test.xlsx")); // "test.xlsx"を連結. | |
// Workbookを開く. | |
Excel::CWorkbook * pWorkbook = NULL; // CWorkbookポインタpWorkbookをNULLで初期化. | |
pWorkbook = pWorkbooks->Open(tszCurrentPath); // Excel::CWorkbooks::OpenでtszCurrentPathを開き, それを取得. | |
// 追加した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を返して終了. | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment