我正在尝试自动执行一个繁琐的过程,目前涉及启动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
答案 0 :(得分:2)
以下是您需要做的事情:
这是一些示例代码。
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