动态合并集合到Word文档

时间:2014-08-21 17:19:42

标签: c# asp.net-mvc templates ms-word

概述:我构建了一个简单的MVC应用程序,它从SQL数据库中检索数据,然后将该信息(名称,地址,城市等)存储到集合中。在检索必要的信息后,我希望应用程序然后获取该数据集合并将其传递给我创建的MS Word邮件合并以打印Avery信封。该应用程序还存储用户想要打印的数量。

我期望发生的事情:应用程序在Word文档中查找必要的表单字段(例如“地址”),然后将该集合中的第一个项目输入到该表单字段中,直到达到指定数量(如果他们输入的数量为10,则第一个项目将被插入Word 10次)。然后,对于下一个项目,它将执行相同的操作,直到所有项目都放入Word文档。

发生了什么:应用程序只将我的集合中的第一个项目输入Word中的所有表单字段。因此,对于5个项目,我没有1个标签,而是有1个项目的5个标签。

以下是我在我的应用程序中使用的代码。

        var receptSelection = (PrintEntity)Session[sessionVariableName];
        var model = from n in receptSelection.NameAddress
                    where n.Address != null
                    select n;

        var application = new Microsoft.Office.Interop.Word.Application();
        var document = new Microsoft.Office.Interop.Word.Document();

        document = application.Documents.Add(Template: @"c:\test\Label3x9v2.0.doc");

        application.Visible = true;

        foreach (var item in model)
        {
            var myNum = 0;

            while (myNum < item.Quantity)
            {

                foreach (Microsoft.Office.Interop.Word.Field field in document.Fields)
                {

                    if (field.Code.Text.Contains("Name"))
                    {
                        field.Select();
                        application.Selection.TypeText(item.Name);
                    }
                    else if (field.Code.Text.Contains("Address"))
                    {
                        field.Select();
                        application.Selection.TypeText(item.Address);
                    }
                    else if (field.Code.Text.Contains("City"))
                    {
                        field.Select();
                        application.Selection.TypeText(item.City);
                    }
                    else if (field.Code.Text.Contains("State"))
                    {
                        field.Select();
                        application.Selection.TypeText(item.State);

                    }
                    else if (field.Code.Text.Contains("Zip"))
                    {
                        field.Select();
                        application.Selection.TypeText(item.Zip);
                    }
                }
                myNum++;
            }
        }

我认为这个问题与field.code.text.contains(“xxx”)有关。我想以某种方式告诉它只是看第一个字段是否包含xxx,但是遇到了麻烦。

非常感谢您提供的任何帮助。如果我需要提供任何其他信息,请告诉我。

此致

0 个答案:

没有答案