お世話になります
C++で EXCELファイルに 改ページを設定したいのですが
思うようにいきません
C列に 改ページを 挿入しようとしているコードです
(マクロでは
Columns("D:D").Select
ActiveSheet.VPageBreaks.Add Before:=ActiveCell
)
MessageBox(NULL, "OK-3", NULL, MB_OK);
までは 実行できますが
"Add"メソッドで エラーが 発生します
parm2.bstrVal = ::SysAllocString(rangeStr2.AllocSysString());を
parm2.bstrVal = ::SysAllocString(rangeStr3.AllocSysString());に 変えても 同様です
よろしく お願い致します
C++
1#include "stdafx.h" 2#include <windows.h> 3#include <Ole2.h> 4#include <atlbase.h> 5#include <atlstr.h> 6 7 8HRESULT AutoWrap(int autoType, VARIANT *pvResult, IDispatch *pDisp, LPOLESTR ptName, int cArgs...) { 9 // Begin variable-argument list... 10 va_list marker; 11 va_start(marker, cArgs); 12 13 if (!pDisp) { 14 MessageBox(NULL, _T("NULL IDispatch passed to AutoWrap()"), _T("Error"), 0x10010); 15 _exit(0); 16 } 17 18 // Variables used... 19 DISPPARAMS dp = { NULL, NULL, 0, 0 }; 20 DISPID dispidNamed = DISPID_PROPERTYPUT; 21 DISPID dispID; 22 HRESULT hr; 23 TCHAR buf[200]; 24 char szName[200]; 25 26 27 // Convert down to ANSI 28 WideCharToMultiByte(CP_ACP, 0, ptName, -1, szName, 256, NULL, NULL); 29 30 // Get DISPID for name passed... 31 hr = pDisp->GetIDsOfNames(IID_NULL, &ptName, 1, LOCALE_USER_DEFAULT, &dispID); 32 if (FAILED(hr)) { 33 MessageBox(NULL, _T("Dispatch::GetIDsOfNames failed"), _T("AutoWrap()"), 0x10010); 34 _exit(0); 35 return hr; 36 } 37 38 // Allocate memory for arguments... 39 VARIANT *pArgs = new VARIANT[cArgs + 1]; 40 // Extract arguments... 41 for (int i = 0; i<cArgs; i++) { 42 pArgs[i] = va_arg(marker, VARIANT); 43 } 44 45 // Build DISPPARAMS 46 dp.cArgs = cArgs; 47 dp.rgvarg = pArgs; 48 49 // Handle special-case for property-puts! 50 if (autoType & DISPATCH_PROPERTYPUT) { 51 dp.cNamedArgs = 1; 52 dp.rgdispidNamedArgs = &dispidNamed; 53 } 54 55 // Make the call! 56 hr = pDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, autoType, &dp, pvResult, NULL, NULL); 57 if (FAILED(hr)) { 58 MessageBox(NULL, buf, _T("IDispatch::Invoke failed"), 0x10010); 59 _exit(0); 60 return hr; 61 } 62 // End variable-argument section... 63 va_end(marker); 64 65 delete[] pArgs; 66 67 return hr; 68} 69int main() { 70 71 IDispatch *m_pXlApp; 72 IDispatch *m_pXlBooks; 73 IDispatch *m_pXlBook; 74 IDispatch *m_pXlSheet; 75 IDispatch *m_pXlColumn; 76 IDispatch *m_pXlPageBreak; 77 78 79 CoInitialize(NULL); 80 81 // CLSID取得 82 CLSID clsid; 83 HRESULT hr = CLSIDFromProgID(L"Excel.Application", &clsid); 84 if (FAILED(hr)) { 85 CoUninitialize(); 86 MessageBox(NULL, _T("CLSIDFromProgID() failed"), _T("Error"), MB_OK); 87 return 0; 88 } 89 90 // IDispatch取得 91 //IDispatch *m_pXlApp; 92 //*m_pXlApp; 93 hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void**)&m_pXlApp); 94 if (FAILED(hr)) { 95 MessageBox(NULL, _T("CoCreateInstance() failed"), _T("Error"), MB_OK); 96 return 0; 97 } 98 99 100 { 101 VARIANT result; 102 VariantInit(&result); 103 AutoWrap(DISPATCH_PROPERTYGET, &result, m_pXlApp, L"Workbooks", 0); 104 m_pXlBooks = result.pdispVal; 105 } 106 107 108 { 109 CString FilePath = _T("S:\Test.xlsx"); 110 111 VARIANT parm; 112 VARIANT result; 113 parm.vt = VT_BSTR; 114 parm.bstrVal = ::SysAllocString(FilePath.AllocSysString()); 115 VariantInit(&result); 116 AutoWrap(DISPATCH_PROPERTYGET, &result, m_pXlBooks, L"Open", 1, parm); 117 m_pXlBook = result.pdispVal; 118 } 119 120 121 { 122 VARIANT result; 123 VariantInit(&result); 124 AutoWrap(DISPATCH_PROPERTYGET, &result, m_pXlApp, L"ActiveSheet", 0); 125 m_pXlSheet = result.pdispVal; 126 } 127 128 129 { 130 VARIANT result, parm1, parm2; 131 CString rangeStr = L"Before";; 132 CString rangeStr2 = L"ActiveCell"; 133 CString rangeStr3; 134 135 136 rangeStr3 = L"D:D"; 137 VARIANT parm; 138 parm.vt = VT_BSTR; 139 parm.bstrVal = ::SysAllocString(rangeStr3.AllocSysString()); 140 141 VariantInit(&result); 142 AutoWrap(DISPATCH_PROPERTYGET, &result, m_pXlSheet, L"Columns", 1, parm); 143 m_pXlColumn = result.pdispVal; 144 MessageBox(NULL, "OK-1", NULL, MB_OK); 145 146 AutoWrap(DISPATCH_METHOD, NULL, m_pXlColumn, L"Select", 0); 147 MessageBox(NULL, "OK-2", NULL, MB_OK); 148 149 VariantInit(&result); 150 AutoWrap(DISPATCH_PROPERTYGET, &result, m_pXlSheet, L"VPageBreaks", 0); 151 m_pXlPageBreak = result.pdispVal; 152 MessageBox(NULL, "OK-3", NULL, MB_OK); 153 154 155 parm1.bstrVal = ::SysAllocString(rangeStr.AllocSysString()); 156 parm1.vt = VT_BSTR; 157 158 parm2.bstrVal = ::SysAllocString(rangeStr2.AllocSysString()); 159 parm2.vt = VT_BSTR; 160 161 162 VariantInit(&result); 163 AutoWrap(DISPATCH_METHOD, &result, m_pXlPageBreak, L"Add", 2, parm2, parm1); 164 MessageBox(NULL, "OK-4", NULL, MB_OK); 165 166 } 167 168 169 AutoWrap(DISPATCH_PROPERTYGET, NULL, m_pXlBook, L"Save", 0); 170 171 AutoWrap(DISPATCH_METHOD, NULL, m_pXlApp, L"Quit", 0); 172 173 174 m_pXlBook->Release(); 175 m_pXlBooks->Release(); 176 m_pXlApp->Release(); 177 178 m_pXlSheet->Release(); 179 m_pXlColumn->Release(); 180 m_pXlPageBreak->Release(); 181 182 183 CoUninitialize(); 184 185 return 0; 186}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。