我正在面對由我們的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受控文檔時,首先會在直接創建第二個文檔時打破字符編碼。