DLLからExcelを操作するには?(プロジェクト環境)


早馬  2007-06-27 07:26:24  No: 65524

過去ログに「DLLからExcelを操作するには?」とあり解決しているようですが
わたしの環境では、違う問題が発生しています。
セル、ワークシート、ワークブック等の処理は問題なく動いているのですが
グラフの作成時にアプリエラーが発生してしまいます。

試しにexeで同じ処理を通したところ正常に動作しました。
exeでもプロジェクト作成時に、「オートメーション」にチェックを入れないと
DLLと同じ現象でアプリケーションエラーが発生しました。

DLLを作成する場合、「オートメーション」にチェックを入れる以外に何か
設定が必要になるのでしょうか?
よろしくお願いします。

<グラフ作成時にアプリケーションエラーが発生する個所>
ChartObjectsPtr pChartObjects = pSheet->ChartObjects();
ChartObjectPtr pChartObject = pChartObjects->Add(200,10,300,300);
pChartObject->Chart->ChartType = xlColumnClustered;  <−ここで発生
//データの設定
pChartObject->Chart->SetSourceData(pRange);

開発環境:VC6.0(MFC)、OS:Win2000SP4、Excel2000
DLL種類:MFCの拡張DLL(MFCの共有DLL使用)
          「オートメーション」をチェック


Blue  2007-06-27 09:38:44  No: 65525

一度_ChartPtr型の変数に格納してからやってもダメでしょうか?

>pChartObject->Chart->ChartType = xlColumnClustered;
_ChartPtr pChart = pChartObject->Chart;

pChart->ChartType = xlColumnClustered;
pChart->SetSourceData(pRange);


早馬  2007-06-28 07:57:10  No: 65526

Blueさん、回答ありがとうございます。
しかし、その方法でもダメだったので調査した結果、exeとdllで違う部分が
あり同じくした結果、動くようになりました。
exeは、あるサイトのサンプルソースをそのまま使い、オートメーションチェックなし
のプロジェクトはそのプロジェクトの内容をコピーしたものでした。
その結果、次のようにimportの記述が違っていました。
エラーだった(DLL側)記述
// #import "C:\Program Files\Microsoft Office\Office\MSO9.DLL"
// #import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"
// #import "C:\Program Files\Microsoft Office\Office\EXCEL9.OLB" rename("DialogBox", "DialogBoxForExcel") rename( "RGB", "RGBForExcel")
修正した(EXE側)記述
#import "C:\Program Files\Microsoft Office\Office\Mso9.dll" no_namespace rename("DocumentProperties", "DocumentPropertiesXL")
#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\Vbe6ext.olb" no_namespace
#import "C:\Program Files\Microsoft Office\Office\excel9.olb" rename("DialogBox", "DialogBoxXL") rename("RGB", "RGBXL") rename("DocumentProperties", "DocumentPropertiesXL") no_dual_interfaces

修正した結果、パラメータが2つ必要だった関数が、1つになったりと
違うところに影響が出ましたが、今のところ問題なく動いています。
ただ意味が分からない為、何にどう影響しているのか分からず不安です。
解説して頂けるとありがたいのですが、よろしくお願いします。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加