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 不会出现,但 Excel2010 会出现,当我在 word 文档中创建图表时(“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

尽管我使用的是 Office 2007 而不是 2010,但我可以在我的机器上重新创建它。到目前为止,我设法找到的唯一半解决方案是获取 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 回答