0

我只想创建一个 C# 程序,它将读取一个 word 模板并使用邮件合并功能创建它的 n 个副本。要替换的数据是名称和地址,模板中的其余内容应该保持不变。谁能告诉我该怎么做?

4

3 回答 3

1

我在 Java 中做到了这一点 - (断开的链接)工作示例here with source code。

想法是这样的:使用 MS-Word 设计和构建您要发送的文档。将其保存为 XML(Word-ML 或新的 .docx 格式)。然后,使用文本编辑器,将文档中的字段替换为占位符标签,例如名称应该放在哪里的@@NAME,以及地址的 @@ADDRESS 等。标签名称无关紧要。

然后,构建替换逻辑 - 使用 XSLT 甚至简单的基于字符串的替换函数,并用实际数据值迭代替换标记。保存每个修改过的文档。

十分简单。

您可以在 C# 中使用相同的设计 - 实际上它会更容易。

于 2009-02-26T10:29:58.650 回答
1

您可以使用 Aspose.Word 来处理 Word 对象模型,而无需在程序应该运行的地方安装办公室(使用互操作),我正在使用 Aspose.Word 生成 Word 文档。

链接到 Aspose:http ://www.aspose.com/categories/file-format-components/aspose.words-for-.net-and-java/default.aspx

它工作得相当不错:)

于 2008-11-18T11:31:35.760 回答
0

我不确定您是否希望运行邮件合并或复制模板。我无法用 c# 帮助你,但是这个 VBA 片段可能会给你一些想法。

 strDir = CurrentProject.Path  

 strMailmergeDataFilename = strDir & Format(Now, "yymmdd_hhnnss") & ".txt"

' Create CSV from database for use with mailmerge '
' This is a separate function that simply exports the sql '
' ExportSQLToCSV SQL, strMailmergeDataFilename '

'Open merge template '
Set objWordDoc = GetObject(strDir & MergeDocumentFilename, "Word.Document")

objWordDoc.Application.Visible = True      

'Format:=0 ''0 = wdOpenFormatAuto'
'Add the data source '
objWordDoc.MailMerge.OpenDataSource _
    Name:=strMailmergeDataFilename, ConfirmConversions:=False, _
    ReadOnly:=False, LinkToSource:=True, AddToRecentFiles:=False, _
    PasswordDocument:="", PasswordTemplate:="", WritePasswordDocument:="", _
    WritePasswordTemplate:="", Revert:=False, Format:=0, _
    Connection:="", SQLStatement:="", SQLStatement1:=""

'Type some text at a bookmark, you could use .range property ' 
Selection.Goto What:=wdGoToBookmark, Name:="signaturetext"
Selection.TypeText Text:="You are here"

'Run mailmerge '
objWordDoc.MailMerge.Destination = 0 '0 = wdSendToNewDocument'

objWordDoc.MailMerge.Execute

objWordDoc.Application.ActiveDocument.PrintPreview
于 2008-11-19T21:07:15.440 回答