从外部应用程序编写Word文档

时间:2014-04-02 16:43:58

标签: c# ms-word vsto office-automation

我正在尝试自动执行一个繁琐的过程,目前涉及启动Word,从.dot创建新文档,保存它,运行一个或两个使用VSTO用C#编写的插件,再次保存,退出文档,并退出Word。

我想编写一个C#命令行应用程序,用户可以使用一个或两个args启动(传达通常需要与Word中的对话框交互的所有信息),然后在没有进一步交互的情况下继续运行...在必要和可能的情况下,在Word运行时抑制任何和所有焦点窃取。

有没有直接的方法来实现这一目标?这是我想到的类似Java的伪代码示例:

// magic to non-interactively launch Word and expose it as an object
WordHost word = xx; 

// create new Word document based on a specific template that isn't the default one.
WordDocument doc = MSWord.create("z:\path\to\arbitraryTemplate.dot");

// If we can avoid physically saving it at this point and just assign a concrete
// file path, it would be even better because the network is glacially slow.
doc.saveAs("z:\path\to\newDoc.docx");

// someZeroArgPlugin and aTwoArgPlugin are VSTO plugins written with C#
doc.someZeroArgPlugin(); 
doc.aTwoArgPlugin("first", "second");

// done!
doc.save();
doc=null;
word=null; // something like word.unload() first?
// now do more things that don't involve Word directly...

假设我走在正确的轨道上......

  • 我很确定通过搜索我能找到大部分我需要知道的内容......一旦我弄明白我需要搜索 应该我要搜索什么?

  • 我想在Visual Studio中创建哪种项目?一个.net 4.5 C#控制台应用程序? Word 2010加载项?其他一些项目?

可能会或可能不会产生影响的详细信息:

  • 我的程序只能在安装了Word 2010的计算机上运行。不需要与旧版本兼容。

  • 如果它可以在Vista下运行会很好,但只有 才能在Win7下运行。

  • 我有Visual Studio Ultimate 2012

1 个答案:

答案 0 :(得分:2)

以下是您需要做的事情:

  1. 安装了Visual Studio和Office。
  2. 使用您选择的.NET框架(推荐4.0或更高版本)创建C#控制台项目。
  3. 添加对Word COM库的引用(项目菜单=> 添加参考 COM 标签, Microsoft Word XX .0对象库 - Word 2010 14.0 )。
  4. 为上面添加的参考设置嵌入互操作类型设置为false
    1. 解决方案资源管理器
    2. 中展开参考
    3. 选择 Microsoft.Office.Core Microsoft.Office.Interop.Word VBIDE
    4. 右键单击并选择属性以显示引用的属性面板。
    5. 属性面板中,将嵌入互操作类型设置为错误
  5. 代码离开。
  6. 这是一些示例代码。

    using System;
    using Microsoft.Office.Interop.Word;
    
    namespace CSharpConsole
    {
        static class Program
        {
            [STAThread]
            static void Main()
            {
                var application = new ApplicationClass();
                var document = application.Documents.Add();
                document.SaveAs("D:\test.docx");
                application.Quit();
            }
        }
    }
    

    有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/office/ff601860(v=office.14).aspx