我想迭代MS-Word邮件合并数据源的所有行,并将相关数据提取到XML中。
我目前正在使用此代码:
Imports Microsoft.Office.Interop
Do
objXW.WriteStartElement("Recipient")
Dim objDataFields As Word.MailMergeDataFields = DataSource.DataFields
For Each FieldIndex As Integer In mdictMergeFields.Keys
strValue = objDataFields.Item(FieldIndex).Value
If Not String.IsNullOrEmpty(strValue) Then
strName = mdictMergeFields(FieldIndex)
objXW.WriteElementString(strName, strValue)
End If
Next
objXW.WriteEndElement()
If DataSource.ActiveRecord = LastRecord Then
Exit Do
Else
DataSource.ActiveRecord = Word.WdMailMergeActiveRecord.wdNextDataSourceRecord
End If
Loop
结果有点迟钝(每排约1秒)。有没有办法更快地完成它?
我的幻想是找到像MailMergeDataSource.ToDatatable
这样的函数,然后检查数据表。
答案 0 :(得分:0)
每当你逐行迭代某些事情,然后对每一行进行某种处理时,就会变得有点慢。
我倾向于通过在此之前做一个准备mdictMergeFields集合的步骤来解决这个问题,以便仅包含不是'null或empty'的元素,这意味着你赢了'必须在每次迭代时检查一次。您可以在此过程中执行此操作,或在用户执行其他操作时在后台“偷偷摸摸”。
要尝试的另一件事(可能有帮助!)是更改“Do ... Loop”块,这样您就不会在每个导入行的末尾检查记录是否为“最后一条记录”。相反,获取记录的计数,然后将当前索引与知识最大值(可能更快)进行比较
即:
Dim i, x as Integer
i = ActiveDocument.MailMerge.DataSource.RecordCount
Do While x < i
objXW.WriteStartElement("Recipient")
Dim objDataFields As Word.MailMergeDataFields = DataSource.DataFields
For Each FieldIndex As Integer In mdictMergeFields.Keys
strValue = objDataFields.Item(FieldIndex).Value
If Not String.IsNullOrEmpty(strValue) Then
strName = mdictMergeFields(FieldIndex)
objXW.WriteElementString(strName, strValue)
End If
Next
objXW.WriteEndElement()
x += 1
Loop
我并没有真正使用Office Interop,但希望这可能会提供一些帮助!回复,让我知道它是怎么回事。
/理查德。