如何使用C#填写Word文档?

时间:2014-03-07 18:24:21

标签: c# .net forms ms-word ms-office

我有一个Word文档,letter.docx,这是一封我打算邮寄给数百人参加聚会的信。这封信已经组成,并且已经以自己特殊的方式格式化,具有不同的类型大小和字体。它已经准备就绪,我可以用占位符填写变量,如姓名,地址,电话号码等。

现在,我想编写一个C#程序,用户可以在其中输入名称,地址等变量,表单,点击按钮,然后生成letter.docx,并填写正确的信息。正确的地方。

我理解Word具有允许您执行此操作的功能,但我确实希望在C#中执行此操作。

4 个答案:

答案 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的引用

另外,请看这个问题:

Filling in FIelds in work using C#

答案 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();
    }
}

正如你所看到的,它真的不那么难。表单上还有其他一些选项,因此您必须对它们进行研究,但最常见的选项,复选框和文本框是我在此处演示的选项。如果您没有创建表单,我建议您通过并确保您知道所有字段,因为这就是您需要的。