我遇到了由我们的 CRM 系统控制的 MS Word DDE 自动化的问题。
设置
创建的文档的基础是一个 Word .dot 模板,它在 Document.New 上触发一个宏。在这个宏中,我创建了一个为 COM 注册的 .Net 组件。
Set myCOMObject = CreateObject("MyCOMObject")
该组件从数据库中提取一些数据并处理分配给 Word DocumentVariables 的字符串值。
Set someClass = myCOMObject.GetSomeClass(123)
ActiveDocument.Variables("docaddress") = someClass.GetSenderAddress(456)
从组件返回的所有字符串值都以 UTF-16(代码页 1200)编码。
怎么了
当CRM系统调用Word通过DDE(winword.exe /n /dde)创建新文档时出现问题:来自组件的字符串值转换为UTF-8编码的字符串。
模板中的所有静态文本都以 UTF-16 很好地编码 - 例如,我的 DocumentVariables 中的元音变音 ü变成了c3 b0 ,而它在文档的其余部分保持fc (在十六进制编辑器中检查文件)。
如果我直接从具有相同宏功能的模板(没有 DDE)创建文档,则所有字符串都可以;即以 UTF-16 编码。
副作用 如果我从我的模板创建一个新文档,请保持该文档打开并创建一个由 DDE 控制的新文档,字符编码正确!
这也反过来起作用:在直接创建第二个文档时,创建一个 DDE 控制的文档首先会破坏字符编码。