Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将集合动态合并到Word文档_C#_Asp.net Mvc_Templates_Ms Word - Fatal编程技术网

C# 将集合动态合并到Word文档

C# 将集合动态合并到Word文档,c#,asp.net-mvc,templates,ms-word,C#,Asp.net Mvc,Templates,Ms Word,概述:我构建了一个简单的MVC应用程序,它从SQL数据库检索数据,然后将这些信息(姓名、地址、城市等)存储到一个集合中。在检索到必要的信息后,我希望应用程序获取该数据集合,并将其传递到我创建的用于打印Avery信封的MS Word邮件合并中。应用程序还存储用户希望打印的数量 我期望发生的事情:应用程序查看Word文档中必要的表单字段(如“地址”),然后将集合中的第一项输入该表单字段,直到达到指定数量(如果他们输入的数量为10,则第一项将插入Word 10次)。然后,它将对下一个项目执行相同的操作

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

我期望发生的事情:应用程序查看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++;
            }
        }
var receptSelection=(PrintEntity)会话[sessionVariableName];
var模型=从receptSelection.NameAddress中的n开始
地址在哪里无效的
选择n;
var application=new Microsoft.Office.Interop.Word.application();
var document=新的Microsoft.Office.Interop.Word.document();
document=application.Documents.Add(模板:@“c:\test\Label3x9v2.0.doc”);
application.Visible=true;
foreach(模型中的var项目)
{
var-myNum=0;
while(myNum
我相信这个问题与field.code.text.contains(“xxx”)有关。我想告诉它,只是为了看看第一个字段是否包含xxx,但这有问题

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


关于,

我已经多年没有使用Word编程了,但是从逻辑上看,您的流程是否需要在您的时间结束时使用一些东西来移动到下一组邮件合并字段,或者这是隐式处理的?似乎没有移动到下一个集合,或者移动到下一个记录集合,我有什么意义吗?它应该首先遍历字段,然后将1添加到myNum值并重复。一旦myNum值等于数量模型,它应该停止这样做,然后继续foreach循环中的下一项。你说的很有道理。我对C#还不熟悉,所以我的假设可能是错误的。但是myNum与您访问字段的方式没有任何关系?它只是一个计数器,您正在重复相同的功能。就像我说的,除了文字编程之外,别指望了,但这就是它看起来的样子。我相信我需要在这方面做更多的研究。感谢您提供的信息。