如何使用C#填写Word文档?
我有一个Word文档,letter.docx,这是一封我打算为一个聚会寄给数百人的信。这封信已经写好了,并以自己独特的方式格式化,字体大小和字体各不相同。它已经设置好并准备就绪,带有占位符,我必须在其中填写更改的变量,如姓名、地址、电话号码等 现在,我想编写一个C#程序,在这个程序中,用户可以在表单中键入变量,如姓名、地址等,点击按钮,然后生成letter.docx,在正确的位置填入正确的信息如何使用C#填写Word文档?,c#,.net,forms,ms-word,ms-office,C#,.net,Forms,Ms Word,Ms Office,我有一个Word文档,letter.docx,这是一封我打算为一个聚会寄给数百人的信。这封信已经写好了,并以自己独特的方式格式化,字体大小和字体各不相同。它已经设置好并准备就绪,带有占位符,我必须在其中填写更改的变量,如姓名、地址、电话号码等 现在,我想编写一个C#程序,在这个程序中,用户可以在表单中键入变量,如姓名、地址等,点击按钮,然后生成letter.docx,在正确的位置填入正确的信息 我知道Word具有允许您执行此操作的功能,但我确实希望在C#中执行此操作 我不知道这门语言中有什么内置
我知道Word具有允许您执行此操作的功能,但我确实希望在C#中执行此操作 我不知道这门语言中有什么内置的东西,但似乎完全是你想要的
如果你能提供你想要做什么的具体例子(占位符字段?特别是命名文本位?),我可能会给你一个更精确的答案,直接针对你的问题。Word提供了可以在C中使用的COM对象# 在“添加引用”对话框的“COM”选项卡下添加对Microsoft office互操作的引用 此外,请参见此问题:
当然你能做到。在项目中使用Microsoft.Office.Interop.Word引用 首先,从“插入”选项卡将文档中要更新的所有字段标记为书签(例如,NameField标记为“name\u field”)。然后,在C代码中添加以下内容:
Microsoft.Office.Interop.Word.Application wordApp = null;
wordApp = new Microsoft.Office.Interop.Word.Application();
wordApp.Visible = true;
Document wordDoc = wordApp.Documents.Open(@"C:\test.docx");
Bookmark bkm = wordDoc.Bookmarks["name_field"];
Microsoft.Office.Interop.Word.Range rng = bkm.Range;
rng.Text = "Adams Laura"; //Get value from any where
请记住正确保存并关闭文档。(您可以)我曾经遇到过需要填写一些MS Word表单的情况,因此我使用了类似于以下代码的代码(请确保您参考
Microsoft.Office.Interop.Word
;我使用了版本14,但您应该根据自己的情况进行调整):
正如你所看到的,其实一点也不难。表单上还有一些其他选项,因此您必须研究它们,但最常用的选项,复选框和文本框,就是我在这里演示的选项。如果您没有创建表单,我建议您仔细检查并确保您知道所有字段,因为这正是您需要的。占位符不是字段,带有大写字母F,因为我不知道字段是什么。它似乎有着特殊的意义。基本上,我已经格式化了文本,想从列表中交换出/交换姓名、地址和电话号码。啊。那将只是搜索和替换。我上面的链接就是用他们的库做的。看起来也有人这样做。看起来很简单。:)您可以在文档中设置虚拟文本(格式符合您的喜好),将它们添加到书签中,然后从C#访问它们并设置它们的值。
// FormData is a custom container type that holds data... you'll have your own.
public static void FillOutForm(FormData data)
{
var app = new Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word.Document doc = null;
try
{
var filePath = "Your file path.";
doc = app.Documents.Add(filePath);
doc.Activate();
// Loop over the form fields and fill them out.
foreach(Microsoft.Office.Interop.Word.FormField field in doc.FormFields)
{
switch (field.Name)
{
// Text field case.
case "textField1":
field.Range.Text = data.SomeText;
break;
// Check box case.
case "checkBox1":
field.CheckBox.Value = data.IsSomethingTrue;
break;
default:
// Throw an error or do nothing.
break;
}
}
// Save a copy.
var newFilePath = "Your new file path.";
doc.SaveAs2(newFilePath);
}
catch (Exception e)
{
// Perform your error logging and handling here.
}
finally
{
// Make sure you close things out.
// I tend not to save over the original form, so I wouldn't save
// changes to it -- hence the option I chose here.
doc.Close(
Microsoft.Office.Interop.Word.WdSaveOptions.wdDoNotSaveChanges);
app.Quit();
}
}