概述:我构建了一个简单的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,但是遇到了麻烦。
非常感谢您提供的任何帮助。如果我需要提供任何其他信息,请告诉我。
此致