質問編集履歴

1 不要な語句の削除

Beginner_ABC

Beginner_ABC score 16

2018/07/17 14:08  投稿

【C++】【Excel】改ページの挿入方法が知りたい
### ヘディングのテキスト  
お世話になります
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++
#include "stdafx.h"
#include <windows.h>
#include <Ole2.h>
#include <atlbase.h>
#include <atlstr.h>
HRESULT AutoWrap(int autoType, VARIANT *pvResult, IDispatch *pDisp, LPOLESTR ptName, int cArgs...) {
   // Begin variable-argument list...
   va_list marker;
   va_start(marker, cArgs);
   if (!pDisp) {
       MessageBox(NULL, _T("NULL IDispatch passed to AutoWrap()"), _T("Error"), 0x10010);
       _exit(0);
   }
   // Variables used...
   DISPPARAMS dp = { NULL, NULL, 0, 0 };
   DISPID dispidNamed = DISPID_PROPERTYPUT;
   DISPID dispID;
   HRESULT hr;
   TCHAR buf[200];
   char szName[200];
   // Convert down to ANSI
   WideCharToMultiByte(CP_ACP, 0, ptName, -1, szName, 256, NULL, NULL);
   // Get DISPID for name passed...
   hr = pDisp->GetIDsOfNames(IID_NULL, &ptName, 1, LOCALE_USER_DEFAULT, &dispID);
   if (FAILED(hr)) {
       MessageBox(NULL, _T("Dispatch::GetIDsOfNames failed"), _T("AutoWrap()"), 0x10010);
       _exit(0);
       return hr;
   }
   // Allocate memory for arguments...
   VARIANT *pArgs = new VARIANT[cArgs + 1];
   // Extract arguments...
   for (int i = 0; i<cArgs; i++) {
       pArgs[i] = va_arg(marker, VARIANT);
   }
   // Build DISPPARAMS
   dp.cArgs = cArgs;
   dp.rgvarg = pArgs;
   // Handle special-case for property-puts!
   if (autoType & DISPATCH_PROPERTYPUT) {
       dp.cNamedArgs = 1;
       dp.rgdispidNamedArgs = &dispidNamed;
   }
   // Make the call!
   hr = pDisp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT, autoType, &dp, pvResult, NULL, NULL);
   if (FAILED(hr)) {
       MessageBox(NULL, buf, _T("IDispatch::Invoke failed"), 0x10010);
       _exit(0);
       return hr;
   }
   // End variable-argument section...
   va_end(marker);
   delete[] pArgs;
   return hr;
}
int main() {
   IDispatch *m_pXlApp;
   IDispatch *m_pXlBooks;
   IDispatch *m_pXlBook;
   IDispatch *m_pXlSheet;
   IDispatch *m_pXlColumn;
   IDispatch *m_pXlPageBreak;
   CoInitialize(NULL);
   // CLSID取得
   CLSID clsid;
   HRESULT hr = CLSIDFromProgID(L"Excel.Application", &clsid);
   if (FAILED(hr)) {
       CoUninitialize();
       MessageBox(NULL, _T("CLSIDFromProgID() failed"), _T("Error"), MB_OK);
       return 0;
   }
   // IDispatch取得
   //IDispatch *m_pXlApp;
   //*m_pXlApp;
   hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER, IID_IDispatch, (void**)&m_pXlApp);
   if (FAILED(hr)) {
       MessageBox(NULL, _T("CoCreateInstance() failed"), _T("Error"), MB_OK);
       return 0;
   }
   
       
   {
       VARIANT result;
       VariantInit(&result);
       AutoWrap(DISPATCH_PROPERTYGET, &result, m_pXlApp, L"Workbooks", 0);
       m_pXlBooks = result.pdispVal;
   }
   
   {
       CString FilePath = _T("S:\\Test.xlsx");
       VARIANT parm;
       VARIANT result;
       parm.vt = VT_BSTR;
       parm.bstrVal = ::SysAllocString(FilePath.AllocSysString());
       VariantInit(&result);
       AutoWrap(DISPATCH_PROPERTYGET, &result, m_pXlBooks, L"Open", 1, parm);
       m_pXlBook = result.pdispVal;
   }
   
   {
       VARIANT result;
       VariantInit(&result);
       AutoWrap(DISPATCH_PROPERTYGET, &result, m_pXlApp, L"ActiveSheet", 0);
       m_pXlSheet = result.pdispVal;
   }
   
   {
       VARIANT result, parm1, parm2;
       CString rangeStr = L"Before";;
       CString rangeStr2 = L"ActiveCell";
       CString rangeStr3;
       
       rangeStr3 = L"D:D";
       VARIANT parm;
       parm.vt = VT_BSTR;
       parm.bstrVal = ::SysAllocString(rangeStr3.AllocSysString());
       VariantInit(&result);
       AutoWrap(DISPATCH_PROPERTYGET, &result, m_pXlSheet, L"Columns", 1, parm);
       m_pXlColumn = result.pdispVal;
       MessageBox(NULL, "OK-1", NULL, MB_OK);
       AutoWrap(DISPATCH_METHOD, NULL, m_pXlColumn, L"Select", 0);
       MessageBox(NULL, "OK-2", NULL, MB_OK);
       VariantInit(&result);
       AutoWrap(DISPATCH_PROPERTYGET, &result, m_pXlSheet, L"VPageBreaks", 0);
       m_pXlPageBreak = result.pdispVal;
       MessageBox(NULL, "OK-3", NULL, MB_OK);
       
       parm1.bstrVal = ::SysAllocString(rangeStr.AllocSysString());
       parm1.vt = VT_BSTR;
       parm2.bstrVal = ::SysAllocString(rangeStr2.AllocSysString());
       parm2.vt = VT_BSTR;
       VariantInit(&result);
       AutoWrap(DISPATCH_METHOD, &result, m_pXlPageBreak, L"Add", 2, parm2, parm1);
       MessageBox(NULL, "OK-4", NULL, MB_OK);
   }
   
   AutoWrap(DISPATCH_PROPERTYGET, NULL, m_pXlBook, L"Save", 0);
   AutoWrap(DISPATCH_METHOD, NULL, m_pXlApp, L"Quit", 0);
   
   m_pXlBook->Release();
   m_pXlBooks->Release();
   m_pXlApp->Release();
   
   m_pXlSheet->Release();
   m_pXlColumn->Release();
   m_pXlPageBreak->Release();
   
   
   CoUninitialize();
   return 0;
}
```
  • C++

    4423 questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • Excel

    1923 questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る