vb脚本单行邮件合并

时间:2015-10-22 15:02:00

标签: vbscript mailmerge

我有一个特殊的需要。我需要能够从csv文件中读取一行,将数据合并到mailmerge文档中,使用唯一名称保存文档,继续下一行,冲洗并重复。

我完全不知道如何使用/合并从文件中提取的单行数据作为邮件合并的数据源。有人能给我一些洞察下面的oDoc.mailmerge ...行应该是什么样的吗?

我知道下面的代码中的打开和关闭效率不高,这是我通过快速联系以获得我的观点。我可以休息一下。我只需要合并线的帮助。

DATAFILE = "test.txt"
DOCFILE  = "myDoc.doc"
listFile  = fso.OpenTextFile(DATAFILE).ReadAll
listLines = Split(listFile, vbCrLf)
For Each line In listLines
   WScript.Echo line 
   'My Stuff
   dim objWord, oDoc, wdName
   Set objword = CreateObject("Word.Application")

   wdName = "D:\My Documents\DOCFILE"

   set oDoc = objword.Documents.Open (wdName)
   objword.Visible = True

   oDoc.MailMerge.OpenDataSource ?line?, , ,True, , , , , , , , , "IDONTKNOWWHATGOESHERE"
   oDoc.MailMerge.Execute

   oDoc.PrintOut
   'redefine savename and execute save here
   oDoc.Close()
   objword.Quit (0)
Next

1 个答案:

答案 0 :(得分:0)

OpenDataSource不允许您指定除SQL之外的各个行。你通常会做的是使用一个循环来增加(比方说)iRecord然后使用

obj.MailMerge.DataSource.FirstRecord = iRecord
obj.MailMerge.DataSource.LastRecord = iRecord

您可以每次打开数据源,但有效的方法是打开它,然后有一个循环设置这两个值并执行执行。无论哪种方式,你需要意识到你的" oDoc"对象将始终引用邮件合并主文档,而不是合并产生的文档。要从VBScript访问 文档,我认为您需要objWord.ActiveDocument。

在我看来,其他任何方法都比较复杂。

但是,如果您真的想使用OpenDataSource行来控制合并,OpenDataSource(a)需要使用磁盘文件,而不是像listLines数组这样的内存结构,(b)需要发布用于检索单行的SQL(这反过来要求您的数据源具有唯一的键字段,并且(可能)您知道其名称和类型。

如果你有,那么你的OpenDataSource行可能就像

oDoc.MailMerge.OpenDataSource "the full path and name of the data file",,,,,,,,,,,, _
"SELECT * FROM X WHERE [fieldname] = " & cstr(theFieldValue)

从listLines数组中的相应记录中获取相关的theFieldValue。或者,如果您知道该字段包含行号,则可以生成该号码,您可能根本不需要您的阵列。

如果theFieldValue是字符串类型而不是数字类型,那么您需要更多类似的东西:

oDoc.MailMerge.OpenDataSource "the full path and name of the data file",,,,,,,,,,,, _
"SELECT * FROM X WHERE [fieldname] = '" & theFieldValue & "'"

" X"只是满足Word要求有一个FROM子句(Word有一个非常粗糙的内部SQL方言)。 OTOH,如果Word决定使用其OLE DB提供程序打开文件,您可能需要更多关注"表名"

另一种方法是使用VBScript和FileSystemObject为数据源中的每个数据行创建一个新数据文件(由标题行+ 1数据行组成)。然后mailmerge整个文件。

相关问题