VC++からEXCELのシートを印刷したい – プログラミング – Home

VC++からEXCELのシートを印刷し...
 
通知
すべてクリア

VC++からEXCELのシートを印刷したい


天然
 天然
(@天然)
ゲスト
結合: 22年前
投稿: 16
Topic starter  

いつも参考にしています。
VC++からEXCELのシートを印刷したいのですが、今記述しているソースだと
印刷できないのです。どなたかお教えください。特に分からないのは、バリアントというもので
す。印刷関数の引数が分かりません。
環境 Win2000/VC++6.0/MFC

VC++とExcelの接続はClassWizardを使用してタイプライブラリからExcel操作用クラスを取り
込み操作する方法を使用しています。

プログラムの仕様はOKボタンを押すとエクセルが起動してデータが入力されて印刷するという仕
様になっています。
以下がそのプログラムです。

void CExcelDlg::OnOK()
{
  _Application pXlsApp;
Workbooks pXlsBooks;
  _Workbook pXlsBook;
  Sheets pSheets;
  _Worksheet pSheet;
  Range pRanges,
pRange;
  Borders pBorders;
  LPDISPATCH pDisp;

  int row, col;
  COleVariant var, fil, data, x, y, cell1, cell2, prt;

  // OLE初期化
AfxOleInit();
AfxEnableControlContainer();

  pXlsApp.CreateDispatch( Excel.Application ); // Excelを起動する

  // Workbooksのオブジェクトを取得
pXlsBooks.AttachDispatch(pXlsApp.GetWorkbooks(),TRUE);

  // Workbooksオープン
  pDisp = pXlsBooks.Open(D:\\Job\\Book1.xls,
               COleVariant((long)0, VT_I4),
COleVariant((long)FALSE, VT_BOOL),
COleVariant((long)1, VT_I4),
COleVariant("),
COleVariant("),
     COleVariant((long)FALSE, VT_BOOL),
COleVariant((long)2, VT_I4),
COleVariant(),
COleVariant((long)FALSE, VT_BOOL),
COleVariant((long)FALSE, VT_BOOL),
COleVariant(),
COleVariant((long)FALSE, VT_BOOL));

  pXlsBook.AttachDispatch(pDisp);

  pXlsApp.m_bAutoRelease = TRUE;
pXlsApp.SetVisible(TRUE); // 画面表示を有効にする

  // Sheetsオブジェクトの取得
  pSheets.AttachDispatch(pXlsBook.GetWorksheets());

  // Worksheetオブジェクトの取得
  // 1つ目のタブに設定
  pSheet.AttachDispatch(pSheets.GetItem(COleVariant((long)1, VT_I4)));

  // Worksheetオブジェクト全体をRangeとして取得
  pRanges.AttachDispatch(pSheet.GetCells());

  // Cel(Row=2~3, Col=2~4)を取得
  for(row=2; row<=3; row++){
  for(col=2; col<=4; col++){
      pRange.AttachDispatch(pRanges.GetItem(COleVariant((long)row,     
                    VT_I4), COleVariant((long)col, VT_I4)));
pRange.SetValue(COleVariant(COleVariant(HELLO!!)));
}
}

// 印刷する
pSheet.PrintOut(COleVariant((long)1, VT_I4),
COleVariant((long)1, VT_I4),
COleVariant((long)1, VT_I4),
COleVariant((long)FALSE, VT_BOOL),
COleVariant(),
COleVariant((long)TRUE, VT_BOOL),
COleVariant((long)FALSE, VT_BOOL), fil);

//警告メッセージが表示されないように設定
pXlsApp.SetDisplayAlerts(FALSE);

//結びつけたオブジェクトの分離と開放
pBorders.DetachDispatch(); // Bordersの分離
pBorders.ReleaseDispatch(); // Bordersの解放

pRange.DetachDispatch(); // Rangeの分離
pRange.ReleaseDispatch(); // Rangeの解放

pSheet.DetachDispatch(); // _Worksheetの分離
pSheet.ReleaseDispatch(); // _Worksheetの解放

pSheets.DetachDispatch(); // Sheetsの分離
pSheets.ReleaseDispatch(); // Sheetsの解放

pXlsBook.DetachDispatch(); // _Workbookの分離
pXlsBook.ReleaseDispatch(); // _Workbookの解放

pXlsBooks.DetachDispatch(); // Workbooksの分離
pXlsBooks.ReleaseDispatch(); // Workbooksの解放

//Excelを終了する
pXlsApp.Quit();
pXlsApp.ReleaseDispatch(); // Applicationの解放
}


引用解決済
トピックタグ
秋衛門
 秋衛門
(@秋衛門)
ゲスト
結合: 22年前
投稿: 6
 

あれ? 10日も前のヤツ?

 pRange.AttachDispatch(pRanges.GetItem(COleVariant((long)row,         
        VT_I4), COleVariant((long)col, VT_I4)));

                ↓
 pRange.AttachDispatch(pRanges.GetItem(COleVariant((long)row,         
        VT_I4), COleVariant((long)col, VT_I4)).pdispVal );

で出来たよ。
コンパイルエラーだよ。

上記の行と、

error C2664: 'AttachDispatch' : 1 番目の引数を 'struct tagVARIANT' から 'struct
IDispatch *' に変換できません。

を載っけてくれれば二秒で答えが返って来たよ。
っつーか暇なのか俺は。


返信引用
冬衛門
 冬衛門
(@冬衛門)
ゲスト
結合: 22年前
投稿: 1
 

おまえ!うざれ!
調子にのるなよ!


返信引用
秋衛門
 秋衛門
(@秋衛門)
ゲスト
結合: 22年前
投稿: 6
 

なんだテメー、ヘッダに
#define if(x) if(((x)||1)&&rand()%2)
仕込むぞコラ


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました