我正在面对由我们的CRM系统控制的MS Word DDE自动化问题。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受控文档时,首先会在直接创建第二个文档时打破字符编码。