【问题标题】:How to add data into a Merge Field如何将数据添加到合并字段中
【发布时间】:2017-06-28 16:57:00
【问题描述】:

我想通过 Word 模板自动打印发票。我想我的逻辑是错误的,但我只是不知道正确的编码方式。这是我当前的代码

Selection wrdSelection;
MailMerge wrdMailMerge;
MailMergeFields wrdMergeFields;
Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application();
Document wrdDoc = new Document();
wordApp.Visible = false;
wrdSelection = wordApp.Selection;

object oMissing = System.Reflection.Missing.Value;

// PUT MY EXISTING TEMPLATE FILE INTO WORD DOCUMENT
wrdDoc = wordApp.Documents.Add(Properties.Resources.invoiceTemp,oMissing,oMissing, oMissing);
// RETREIVE MAIL MERGE PROPERTIES FROM THE DOCUMENT IN HOPES OF UTILIZING IT

wrdMailMerge = wrdDoc.MailMerge;
wrdDoc.Select();
wrdMergeFields = wrdMailMerge.Fields;

如果有帮助,这里是我模板上的合并字段:

date_issued, month_covered, invoiceNo, tuition, lunchFee, discount, studentNo, studentName, amountDue, penalty, @98654336@, penalty, @986 , status

现在,如何将使用我的应用程序检索到的数据添加到从模板中获取所有属性的文档中?

【问题讨论】:

  • 您似乎没有阅读我在您的previous question 上提供的the reference。此外,在那个问题中,您接受了一个建议您基于模板创建文档的答案。模板应该已经包含相关的合并字段。
  • 是的,但我仍然不知道如何添加/更改合并字段以包含要打印的数据。所以我走了另一条路
  • 您阅读了链接吗?它说,在许多其他事情中wrdMergeFields.Add(wrdSelection.Range, "Address");
  • 合并字段的内容来自链接数据。要更改内容,请更改链接数据。它没有显示如何选择和更改文档中合并字段的内容,因为这样您就没有合并。你到底想做什么?

标签: c# merge interop mailmerge mergefield


【解决方案1】:

以下是使用模板和数据文件运行的一些注意事项。

Word.Application _wordApp = new Word.Application();
Word.Document oDoc = _wordApp.Documents.Add(@"z:\docs\mergetemplate.dotx");
_wordApp.Visible = true;
oDoc.MailMerge.MainDocumentType = Word.WdMailMergeMainDocType.wdFormLetters;
oDoc.MailMerge.OpenDataSource(@"Z:\Docs\new.csv", false, false, true);
oDoc.MailMerge.Destination = Word.WdMailMergeDestination.wdSendToNewDocument;
oDoc.MailMerge.Execute(false);

新创建的合并文件现在是活动文档,因此您可以保存它:

Word.Document oLetters = _wordApp.ActiveDocument;
oLetters.SaveAs2(@"z:\docs\letters.docx", 
     Word.WdSaveFormat.wdFormatDocumentDefault);

【讨论】:

  • 我需要将我们之前讨论的文本文件重命名为 csv 文件吗?
  • 一个 csv 是一个文本文件。我建议您对数据使用 csv(逗号分隔值)。 Access 的输出类似于DoCmd.TransferText acExportDelim, , "Table1_or_Query1", "z:\docs\data.csv", True。在一定限度内,它叫什么并不重要,如果您愿意,您可以将名称设置为变量。如果需要记录,您甚至可以按日期命名文件。
  • 我做到了Remou!它添加了数据,但是如何防止它打开各种窗口并要求我保存文档?我想丢弃所有创建的文档,只保留模板文件?
  • 创建的文档是您的信件。您想关闭模板文件并询问用户是否要保存或打印创建的文档。
  • 好的,我该如何处理新文档?我的意思是它会放在哪里,以便我可以 .PrintOut() 它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-12
  • 1970-01-01
  • 2022-07-27
  • 1970-01-01
  • 2020-11-12
相关资源
最近更新 更多