http://homepage2.nifty.com/Mr_XRAY/Delphi/plExcel/index.htm
にある、Excel操作の[テストプログラム等]にある
表示の基本のコードを参考にTWebBrowser上でExcelを表示し
編集することはできました。
このソースにForm2を作成してボタンから
Form2.Show
とやると、TWebBrowser上のExcelの動作がおかしくなります。
アドレスバーの部分の表示がおかしくなったり、
セルの選択がうまくできなかったり・・・
おそらく、再描画ができていないためと思われますが、
FormActiveでRefreshなどとするとエラーになったり
うまくいきません。
TWebBrowser上のExcelの表示を正常にするにはどうしたらよいでしょうか?
そんなおかしな動作はしないけど、どうやったら再現できる?
すみません。調査不足でした。
普通にForm2.Showでは、現象は、起きませんでした。
しかし、Form2にWebBrowserを配置、Form1とは、別の
Excelファイルを用意してForm2のFormShowで
TWebBrowser上に表示させると
Form1のExcelのコマンドバーがクリックできなくなったり
スクロールバーが無くなったり・・・
Excelが二つ起動しているのが問題なのでしょうか?
{Form1での処理 最初の発言のURL参照}
procedure TForm1.BitBtn1Click(Sender: TObject);
var FilePath : String;
begin
ExcelApplication1.Connect;
FilePath := ExtractFilePath(Application.ExeName)+'a.xls';
WebBrowser1.Offline:=True;
WebBrowser1.Silent:=True;
try
WebBrowser1.Navigate(FilePath);
except
end;
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
Form2.Show;
end;
{Form2での処理}
procedure TForm2.FormShow(Sender: TObject);
var FilePath : String;
begin
ExcelApplication1.Connect;
FilePath := ExtractFilePath(Application.ExeName)+'b.xls';
WebBrowser1.Offline:=True;
WebBrowser1.Silent:=True;
try
WebBrowser1.Navigate(FilePath);
except
end;
end;
Form1でコマンドバーの表示部分が抜けてました。
procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
ExcelWorkbook1.ConnectTo
(ExcelApplication1.ActiveWorkbook as _workbook);
ExcelWorksheet1.ConnectTo
(ExcelApplication1.ActiveWorkbook.Activesheet as _worksheet);
ExcelWorkSheet1.Activate;
//コマンドバーの表示
WebBrowser1.ExecWB(OLECMDID_HIDETOOLBARS, OLECMDEXECOPT_DONTPROMPTUSER);
end;
http://support.microsoft.com/kb/304643/ja
どうやら、仕様のようです。
設計を見直します。
1 つのプロジェクト内で複数の WebBrowser コントロールを使用する場合、各コントロールに同じ種類の Office ドキュメント (すべて Word 文書、すべて Excel スプレッドシートなど) を読み込むと、いくつかの問題が発生することが確認されています。そのため、1 つのプロジェクトに使用するコントロールは 1 つとし、1 度に参照するドキュメントも 1 つとすることをお勧めします。
ツイート | ![]() |