TExcelApplicationでPrintPreview

解決


かい  2007-07-12 03:11:18  No: 27033

いつもお世話になっています
WindowsXP  Delphi7  Excel2000で
TExcelApplication, TExcelWorkbook, TExcelWorksheetを利用しています

ExcelWorkSheet1.PrintPreview;
でプレビューしてくれることを期待しているのですが
OLE エラー 800A03EC.
となってしまいます

ExcelWorkbook1.PrintPreview;
でも まったく同じ結果になります

お分かりになる方いませんか?
宜しくお願いします


Ru  2007-07-12 18:00:58  No: 27034

環境はかいさんと同じです。
こちらは以下のソースで問題なく動きますがなにか相違点ありますでしょうか。

  ExcelApplication1.Connect;
  ExcelApplication1.Visible[0] := True;
  ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Open(
                             ファイル名,
                             EmptyParam,
                             EmptyParam,
                             EmptyParam,
                             EmptyParam,
                             EmptyParam,
                             EmptyParam,
                             EmptyParam,
                             EmptyParam,
                             EmptyParam,
                             EmptyParam,
                             EmptyParam,
                             EmptyParam,
                             0) as _Workbook);
  ExcelWorksheet1.ConnectTo(ExcelWorkbook1.activesheet as _Worksheet);
  ExcelWorksheet1.PrintPreview;


かい  2007-07-12 21:06:47  No: 27035

Ruさんこんにちは
ありがとうございます
1つ書き忘れていました
TWebBrowser上にExcelを乗っけるようにしています

Ruさんのコードなら私の環境でもうまくいきました
WebBrowserを使うと駄目なのでしょうか?


Ru  2007-07-12 22:15:41  No: 27036

var
  hoge:OleVariant;
begin
  WebBrowser1.ExecWB(OLECMDID_PRINT, 0, hoge, hoge);
end;

これで印刷ダイアログ出すとプレビューボタンが消えている。
機能的に出来ないのかな?
誰かご存じの方お願いします。


かい  2007-07-12 22:31:54  No: 27037

Ruさん
>これで印刷ダイアログ出すとプレビューボタンが消えている。
私も同じで、そのため直接プレビューしてみようと思ったんです


かい  2007-07-13 02:43:52  No: 27038

var
  ov:OleVariant;
begin
 WebBrowser1.ExecWB(OLECMDID_HIDETOOLBARS,OLECMDEXECOPT_DODEFAULT,ov,ov);

として、ツールバーを表示。
・・・で、プレビューボタンを押してみましたが、エラーは出ませんが
プレビューも出ませんでした
やはりWebBrowserを利用した場合はプレビュー出来ないのでしょうか

ところで・・・
Mr.XRAYさんのサイト
http://homepage2.nifty.com/Mr_XRAY/Delphi/plExcel/T_ExcelDialog.htm
では、印刷ダイアログにプレビューのボタンが出ているのですが
何かミソがあるのでしょうか?


Mr.XRAY  URL  2007-07-14 05:51:04  No: 27039

>やはりWebBrowserを利用した場合はプレビュー出来ないのでしょうか

既にいろいろ実験しているとは思いますが、例えば以下の様なテストをして
みて下さい。

新規のプロジェクトにTWebBrowserとTButtonを各々一つ配置します。
usesに SHDocVwを追加します。

----  テスト1 ------

procedure TForm1.FormShow(Sender: TObject);
var
     AURL : String;
begin
     AURL:='http://homepage2.nifty.com/Mr_XRAY/index.htm';
     WebBrowser1.Navigate(AURL);
end;
//  印刷プレビュー
procedure TForm1.Button1Click(Sender: TObject);
var
     Tmp:OleVariant;
begin
     WebBrowser1.ExecWB(OLECMDID_PRINTPREVIEW,OLECMDEXECOPT_DODEFAULT,Tmp,Tmp);
end;

----  テスト2 ------

procedure TForm1.FormShow(Sender: TObject);
var
     AURL : String;
begin
     AURL:='エクセルのブックのフルパス';
     WebBrowser1.Navigate(AURL);
end;
//  印刷プレビュー
procedure TForm1.Button1Click(Sender: TObject);
var
     Tmp:OleVariant;
begin
     WebBrowser1.ExecWB(OLECMDID_PRINTPREVIEW,OLECMDEXECOPT_DODEFAULT,Tmp,Tmp);
end;

違いは実行した結果の通りです。

エクセルをDelphi(VBAや他の言語でも同じ)からから操作する方法には
(1)操作用のフォームを用意して、そこに操作コード実行のボタン類を配置
(2)OleContainerを配置して、その上に表示
(3)WebBrowser1を配置して、そこに表示

等がありますが、それぞれ一長一短があるのでないかと思います。
エンドユーザに対して、どのようなインターフェイスを提供し、操作をどの程度
制限し、何を自動化するのか。全く自由で汎用的な目的であれば、エクセルその
ものを直接操作すればいいわけですから、その点は考える必要があるかも知れません。
業務アプリであればなおさらでしょう。
なお、テスト2の結果については、Microsoftのサイト(URLは失念!!)に記述があります。
(確か、これは仕様ですと書いてあったと記憶しています)

>http://homepage2.nifty.com/Mr_XRAY/Delphi/plExcel/T_ExcelDialog.htm
>では、印刷ダイアログにプレビューのボタンが出ているのですが
>何かミソがあるのでしょうか?

何故でしょう。正解者は自分で座布団2枚用意して下さいね(笑)。
もっとも、たとえ[印刷プレビュー]ボタンが表示されたとしてもプレビューしませんけど。


かい  2007-07-16 02:44:58  No: 27040

Mr.XRAYさん
ありがとうございました。

一長一短・・・
その通りですね。
今回は長所の部分の魅力が大きいので なんとか・・・と頑張ってみましたが、
別の手を考えることにします。

これまでご指導くださった皆様方、ありがとうございました。


kikyo  2007-07-31 19:37:54  No: 27041

MrXRAYさん。
いつも参考にさせていただいております。
テスト1は上手くいくのですが、テスト2の印刷プレビュー時
(Button1をクリックすると)
「登録されていないドロップ先の登録を解除しています」
とエラーが出ます。
いかがすればいいのでしょうか。ご教示ください。


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

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






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