MS Word Office 自动化 - 填写文本表单域和复选框表单域以及邮件合并 [英] MS Word Office Automation - Filling Text Form Fields And Check Box Form Fields And Mail Merge

查看:25
本文介绍了MS Word Office 自动化 - 填写文本表单域和复选框表单域以及邮件合并的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否有人对如何使用 C#(VB.NET 也可以)创建引擎有什么好的建议或经验,它的通用性足以处理大多数情况下我需要用我得到的数据填充的 MS Word 文本字段从数据库?简而言之,我即将开始这个小小的 Office 自动化之旅,我希望这里的一些反馈可以帮助我避免一些耗时的错误.

Does anyone have any good advice or experience on how to create an engine using C# (VB.NET is okay too) that is generic enough to handle most cases of MS Word text fields I need to fill with data I'm getting from a database? In short, I'm about to embark on this little Office automation excursion and I'm hoping a little bit of feedback here may help me to avoid some time consuming errors.

干杯并提前感谢您的任何建议;

Cheers and thanks in advance for any advice;

戴夫

推荐答案

我将发送两个示例来解决您的自动化问题.第一个是使用 MailMerge,第二个是使用书签.

I will sent two examples for solving your automation problem. The first one is using MailMerge and the second is using bookmarks.

word 文件如下所示:

The word file looks like this:

使用 MailMerge(插入 -> 快速部件 -> 字段 -> 邮件合并 -> 合并字段)名字:«firstName»姓氏:«lastName»

Using MailMerge (Insert - > Quick Parts -> Field -> Mail merge -> Merge field) First name: «firstName» Last name: «lastName»

========

使用书签(插入 -> 书签)名字:(<- 书签在这里,它不可见)姓氏:

Using Bookmarks( Insert -> BookMark) First name: (<- the bookmark is here, it’s not visible) Last name:

代码如下:

  1. 使用书签

  1. Using bookmarks

    Open("D:/Doc1.doc");
    if (oDoc.Bookmarks.Exists("bkmFirstName"))
    {
        object oBookMark = "bkmFirstName";
        oDoc.Bookmarks.get_Item(ref oBookMark).Range.Text = textBox1.Text;
    }

    if (oDoc.Bookmarks.Exists("bkmLastName"))
    {
        object oBookMark = "bkmLastName";
        oDoc.Bookmarks.get_Item(ref oBookMark).Range.Text = textBox2.Text;
    }

    SaveAs("D:/Test/Doc2.doc"); Quit();
    MessageBox.Show("The file is successfully saved!");

  • 使用邮件合并

  • Using MailMerge

        Open("D:/Doc1.doc");
        foreach (Field myMergeField in oDoc.Fields)
        {
            //iTotalFields++;
            Range rngFieldCode = myMergeField.Code;
            String fieldText = rngFieldCode.Text;
    
            // GET only MAILMERGE fields
            if (fieldText.StartsWith(" MERGEFIELD"))
            {
                Int32 endMerge = fieldText.IndexOf("\");
                Int32 fieldNameLength = fieldText.Length - endMerge;
                String fieldName = fieldText.Substring(11, endMerge - 11);
    
                fieldName = fieldName.Trim();
                if (fieldName == "firstName")
                {
                    myMergeField.Select();
                    oWordApplic.Selection.TypeText("This Text Replaces the Field in the Template");
                }
            }
        }
        SaveAs("D:/Test/Doc2.doc"); Quit();
        MessageBox.Show("The file is successfully saved!");
    

  • 我还使用了一些辅助方法.

    I've also used some helper methods.

        ApplicationClass oWordApplic = new Microsoft.Office.Interop.Word.ApplicationClass();
        private Microsoft.Office.Interop.Word.Document oDoc = new Document();
    
        public void Open(string strFileName)
        {
            object fileName = strFileName;
            object readOnly = false;
            object isVisible = true;
            object missing = System.Reflection.Missing.Value;
    
            oDoc = oWordApplic.Documents.Open(ref fileName, ref missing, ref readOnly,
            ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
            ref missing, ref missing, ref isVisible, ref missing, ref missing, ref missing, ref missing);
    
            oDoc.Activate();
        }
    
        public void SaveAs(string strFileName)
        {
            object missing = System.Reflection.Missing.Value;
            object fileName = strFileName;
    
            oDoc.SaveAs(ref fileName, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
            ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
        }
    
        public void Quit()
        {
            object missing = System.Reflection.Missing.Value;
            oWordApplic.Application.Quit(ref missing, ref missing, ref missing);
        }
    

    我希望这个实现能够为解决您的问题提供一些想法.

    I hope that this implementation will give some ideas for solving your problem.

    这篇关于MS Word Office 自动化 - 填写文本表单域和复选框表单域以及邮件合并的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆