我有一个Word文档,letter.docx,这是一封我打算邮寄给数百人参加聚会的信。这封信已经组成,并且已经以自己特殊的方式格式化,具有不同的类型大小和字体。它已经准备就绪,我可以用占位符填写变量,如姓名,地址,电话号码等。
现在,我想编写一个C#程序,用户可以在其中输入名称,地址等变量,表单,点击按钮,然后生成letter.docx,并填写正确的信息。正确的地方。
我理解Word具有允许您执行此操作的功能,但我确实希望在C#中执行此操作。
答案 0 :(得分:10)
当然你可以做到。在项目中使用Microsoft.Office.Interop.Word引用。
首先在“插入”选项卡中为文档中要更新的所有字段添加书签(例如,NameField标记有标记'name_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
记得妥善保存&关闭文件。(你可以see this)
答案 1 :(得分:1)
我不知道该语言中包含的任何内容,但the example here似乎完全符合您的要求。
如果您可以提供您想要做的具体示例(占位符字段?特别是文本的名称?),我可以给您一个更精确的答案,直接针对您的问题。
答案 2 :(得分:1)
Word提供可以在C#中使用的COM对象
在“添加引用”对话框的“COM”选项卡下添加对Microsoft Office interop的引用
另外,请看这个问题:
答案 3 :(得分:1)
我遇到了需要填写一些MS Word表单的情况,因此我使用了与以下代码类似的内容(请确保您引用Microsoft.Office.Interop.Word
;我使用的是版本14,但您应该将其调整为自己的场景):
// 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();
}
}
正如你所看到的,它真的不那么难。表单上还有其他一些选项,因此您必须对它们进行研究,但最常见的选项,复选框和文本框是我在此处演示的选项。如果您没有创建表单,我建议您通过并确保您知道所有字段,因为这就是您需要的。