TNB Library
TnbOfsExcel.h
[詳解]
1#pragma once
11#include "TnbDef.h"
12#include "TnbFilePathManager.h"
13#include "TnbStr.h"
14
15#include <comutil.h>
16#ifndef _TnbDOXYGEN //Document作成用シンボル
17//Excelを操作するためのタイプライブラリを読みこむ(Excel2007用)
18//#import "C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE14\MSO.DLL"
19//#import "C:\Program Files (x86)\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"
20//Excelを操作するためのタイプライブラリを読みこむ(Excel2019用)
21#import "C:\Program Files (x86)\Microsoft Office\Root\VFS\ProgramFilesCommonX86\Microsoft Shared\OFFICE16\MSO.DLL"
22#import "C:\Program Files (x86)\Microsoft Office\Root\VFS\ProgramFilesCommonX86\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"
23#import "C:\Program Files (x86)\Microsoft Office\root\Office16\excel.exe" rename("DialogBox", "DialogBoxForExcel") rename( "RGB", "RGBForExcel")
24#endif // _TnbDOXYGEN
25
26
27
28//TNB Library
29namespace TNB
30{
31
32
33
39{
40public:
41
44 {
45 Close(false);
46 }
47
54 bool Open(LPCTSTR lpszXlsxFile)
55 {
57 HRESULT r = m_pApp.CreateInstance( "Excel.Application");
58 if ( m_pApp == NULL )
59 {
60 return false;
61 }
62 try
63 {
64 CUnicode fn = fpm.GetCanonicalize(lpszXlsxFile);
65 m_pWorkbook = m_pApp->Workbooks->Open(fn.ReferBuffer());
66 }
67 catch( ... )
68 {
69 m_pApp->Quit(); //非表示の場合、このタイミングではインスタンスは消えない。
70 // インスタンスを開放
71 m_pApp.Release(); //非表示の場合、ここでexcel.exeインスタンスもなくなる。
72 return false;
73 }
74 return true;
75 }
76
83 bool Close(bool isSave = true)
84 {
85 if ( m_pApp != NULL )
86 {
87 try
88 {
89 if ( isSave )
90 {
91 m_pWorkbook->Save();
92 }
93 m_pWorkbook->Close();
94 m_pRange.Release();
95 m_pWorkbook.Release();
96 m_pSheet.Release();
97 m_pApp->Quit(); //非表示の場合、このタイミングではインスタンスは消えない。
98 // インスタンスを開放
99 m_pApp.Release(); //非表示の場合、ここでexcel.exeインスタンスもなくなる。
100 }
101 catch( ... )
102 {
103 return false;
104 }
105 }
106 return true;
107 }
108
115 bool SelectWorksheet(LPCTSTR lpszSheetName)
116 {
117 try
118 {
119 m_pSheet = m_pWorkbook->Sheets->Item[CUnicode(lpszSheetName).ReferBuffer()];
120 return m_pSheet != NULL;
121 }
122 catch( ... )
123 {
124 //m_pSheet.Release();
125 return false;
126 }
127 }
128
135 bool SelectCell(LPCTSTR lpszCellName)
136 {
137 try
138 {
139 COleVariant varCell;
140 varCell = CUnicode(lpszCellName).ReferBuffer();
141 m_pRange = m_pSheet->GetRange( varCell);
142 }
143 catch( ... )
144 {
145 m_pRange.Release();
146 return false;
147 }
148 return m_pRange != NULL;
149 }
150
155 Excel::RangePtr GetRange(void)
156 {
157 return m_pRange;
158 }
159
164 Excel::BorderPtr GetBorder(Excel::XlBordersIndex index)
165 {
166 return m_pRange->GetBorders()->GetItem(index);
167 }
168
174 static CStr ColunmChar(INDEX idx)
175 {
176 TCHAR buf[3] = {0};
177 INDEX i = idx % 26;
178 INDEX j = idx / 26;
179 if ( j == 0 )
180 {
181 buf[0] = 'A' + i;
182 }
183 else
184 {
185 buf[0] = 'A' + (j - 1);
186 buf[1] = 'A' + i;
187 }
188 return buf;
189 }
190
191private:
192 Excel::_ApplicationPtr m_pApp;
193 Excel::_WorkbookPtr m_pWorkbook;
194 Excel::_WorksheetPtr m_pSheet;
195 Excel::RangePtr m_pRange;
196public:
197 void test(void)
198 {
199 // COMの初期化
200 ::CoInitialize(NULL);
201
203 // Excelを起動
204 Excel::_ApplicationPtr pApp;
205
206 // インスタンスを作成
207 pApp.CreateInstance( "Excel.Application");
208 // Excelを表示する
209// pApp->PutVisible( 0, TRUE); //TRUEにするとインスタンスが残る
210
211
212 // WorkBookを追加する
213// pApp->Workbooks->Add();
214
215 Excel::_WorkbookPtr pWorkbook;
216 try
217 {
218 pWorkbook = pApp->Workbooks->Open(L"C:\\Home\\Temp\\DDDDD\\Test\\Debug\\test.xlsx"); //フルパスで渡すこと!
219 }
220 catch( ... )
221 {
222 pApp->Quit(); //非表示の場合、このタイミングではインスタンスは消えない。
223 // インスタンスを開放
224 pApp.Release(); //非表示の場合、ここでexcel.exeインスタンスもなくなる。
225 ::CoUninitialize();
226 return;
227 }
228 // アクティブなSheetを取得
229// Excel::_WorksheetPtr pSheet;
230// pSheet = pApp->GetActiveSheet();
231
232 Excel::_WorksheetPtr pSheet = pWorkbook->Sheets->Item[L"Sheet2"];
233
235 // Cellに文字を書き込む
236 COleVariant varCell;
237 varCell = L"B2";
238 Excel::RangePtr pRang;
239 pRang = pSheet->GetRange( varCell);
240 pRang->NumberFormat = "@";
241
242 pRang->Value2 = "=A1+B1";
243
244
245 Excel::BorderPtr border;
246 border = pRang->GetBorders()->GetItem( Excel::xlEdgeTop );
247 border->LineStyle = (long)Excel::xlContinuous;
248 border = pRang->GetBorders()->GetItem( Excel::xlEdgeBottom);
249 border->PutLineStyle((long)Excel::xlContinuous);
250 border = pRang->GetBorders()->GetItem( Excel::xlEdgeLeft);
251 border->LineStyle = (long)Excel::xlContinuous;
252 border = pRang->GetBorders()->GetItem( Excel::xlEdgeRight);
253 border->LineStyle = (long)Excel::xlContinuous;
254 border->PutWeight((long)Excel::xlMedium);
255
256 pRang->Interior->Color = (long)RGB( 255, 0, 0 );
257
258 varCell = pRang->Value; //計算結果が取得できる。式ではない。
259
260
262 // Cellにハイパー
263 // リンクを書き込む
264 varCell = "C2";
265// pRang = pSheet->GetRange( varCell);
266 pRang = pSheet->Range[varCell];
267 _bstr_t bstrURL = "http://homepage1.nifty.com/goldfish";
268 pSheet->Hyperlinks->Add( pRang, bstrURL);
269
270
271 pWorkbook->Save();
272 pWorkbook->Close();
273 // インスタンスを開放
274 pRang.Release();
275 pWorkbook.Release();
276 pSheet.Release();
277
278 pApp->Quit(); //非表示の場合、このタイミングではインスタンスは消えない。
279 // インスタンスを開放
280 pApp.Release(); //非表示の場合、ここでexcel.exeインスタンスもなくなる。
281
282 ::CoUninitialize();
283
284 }
285
286};
287
288
289
290}; // TNB
TNBライブラリの定義ヘッダ
ファイルパス関係のヘッダ
文字列管理関係のヘッダ
Microsoft Office Excel コントロール補助
Definition: TnbOfsExcel.h:39
bool SelectWorksheet(LPCTSTR lpszSheetName)
[設定] カレントワークシート選択.
Definition: TnbOfsExcel.h:115
static CStr ColunmChar(INDEX idx)
[作成] カラム文字生成.
Definition: TnbOfsExcel.h:174
Excel::RangePtr GetRange(void)
[取得] レンジ取得.
Definition: TnbOfsExcel.h:155
bool SelectCell(LPCTSTR lpszCellName)
[設定] カレントセル名選択.
Definition: TnbOfsExcel.h:135
bool Close(bool isSave=true)
[設定] クローズ.
Definition: TnbOfsExcel.h:83
~CExcelControl(void)
デストラクタ
Definition: TnbOfsExcel.h:43
Excel::BorderPtr GetBorder(Excel::XlBordersIndex index)
[取得] ボーダー取得.
Definition: TnbOfsExcel.h:164
bool Open(LPCTSTR lpszXlsxFile)
[設定] オープン.
Definition: TnbOfsExcel.h:54
ファイルパス管理クラス
CStr GetCanonicalize(LPCTSTR path) const
[取得] 絶対パス作成.
文字列管理テンプレート
Definition: TnbStr.h:74
const TYP * ReferBuffer(void) const
[取得] バッファ参照.
Definition: TnbStr.h:380
TNB::CStrT< WCHAR > CUnicode
UNICODE文字列クラス
Definition: TnbStr.h:1771
TNB Library
Definition: TnbDoxyTitle.txt:2