4

要するに質問:

この行:

doc.InlineShapes.AddOLEObject("Excel.Chart.8"); // doc is a Microsoft.Office.Interop.Word.Document object

Excelを開きます。これを無効にする方法は?


詳細:

c#でWord2010のスクリプトを使用してテンプレートからdocxドキュメントを作成しようとしています。次の方法でドキュメントを開きます。

Word.Document doc = app.Documents.Open(@"xxxx.docx",Visible:false);

スクリプト中、Word2010は表示されませんが、Word文書内にグラフを作成するとExcel2010が表示されます( "Excel.Chart.8")

チャートのスクリプト作成プロセス全体がモニターに表示されますが、これは私が望んでいることではありません。

プロセス中にExcel2010(グラフツール)を非表示にする方法はありますか?

編集:Excelチャートを作成する例:

Microsoft.Office.Interop.Word.Application app = new Microsoft.Office.Interop.Word.Application();
Word.Document doc = app.Documents.Open(@"xxxx.docx",Visible:false);
string classtype = "Excel.Chart.8";
Bookmark shapeBookMark = doc.Bookmarks.get_Item("mybookmark");
Word.InlineShape wrdInlineShape = doc.InlineShapes.AddOLEObject(classtype, Range: shapeBookMark.Range);
if (wrdInlineShape.OLEFormat.ProgID == classtype)
      {
         object verb = Word.WdOLEVerb.wdOLEVerbHide;
         wrdInlineShape.OLEFormat.DoVerb(ref verb);
         Excel.Workbook obook = (Excel.Workbook)wrdInlineShape.OLEFormat.Object;
         Excel.Worksheet sheet = (Excel.Worksheet)obook.Worksheets["Sheet1"];
         //then the access of a cell goes like this:
         ((Microsoft.Office.Interop.Excel.Range)sheet.Cells[1, 1]).Value = "data";
      }

Visible:falseパラメータを使用する必要があることに注意してください。そうしないと、Excelとwordの両方が長いスクリプトプロセスで表示されるためです。短いものでは表示されませんが、長いスクリプトプロセス(16個のグラフ/ docxの作成、入力、フォーマット)を実行する必要があります

4

1 に答える 1

2

2010ではなくOffice2007を使用していますが、これを自分のマシンで再作成できます。これまでに見つけた唯一の半解決策は、Excelのアクティブなインスタンスを取得して非表示に切り替えることです。Excelは一瞬点滅してから消えますが、少なくともスクリプト/チャートを実行している間は表示されたままになりません。

したがって、これをコードに挿入します。

Word.InlineShape wrdInlineShape = doc.InlineShapes.AddOLEObject(classtype, Range: shapeBookMark.Range);
Excel.Application xlApp = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
xlApp.Visible = false;

if (wrdInlineShape.OLEFormat.ProgID == classtype)
{
    // etc...
于 2012-05-06T05:27:03.097 に答える