如何通过ActiveX接口将MATLAB中的Unicode文本发送到Word文档中?

Mat*_*eau 13 unicode matlab activex ms-word

我正在使用MATLAB以编程方式在Windows上创建Microsoft Word文档.通常,此解决方案工作正常,但它与非ASCII文本有问题.例如,请使用以下代码:

wordApplication = actxserver('Word.Application');
wordApplication.Visible = 1;
wordApplication.Documents.Add;
selection = wordApplication.Selection;
umbrella = char(9730);
disp(umbrella)
selection.TypeText(umbrella)
Run Code Online (Sandbox Code Playgroud)

命令窗口正确显示伞形字符,但Word文档中的字符是"框中的问号"缺少字符符号.我可以将命令窗口中的字符剪切并粘贴到Word中,以便该字符确实可用.

TypeText方法必须假定为ASCII.有关如何为其他语言的类似操作设置Unicode标志的资源,但我不知道如何将它们转换为我在MATLAB中提供的语法.

澄清:我的用例是发送一个未知的Unicode字符串(char数组),而不仅仅是一个字符.能够一次发送所有内容是理想的.这是更好的示例代码:

% Define a string to send with a non-ASCII character.
umbrella = char(9730);
toSend = ['Have you seen my ' umbrella '?'];
disp(toSend)

% Open a new Word document.
wordApplication = actxserver('Word.Application');
wordApplication.Visible = 1;
wordApplication.Documents.Add;

% Send the text.
selection = wordApplication.Selection;
selection.TypeText(toSend)
Run Code Online (Sandbox Code Playgroud)

我希望我可以简单地设置文档本身的编码,但这似乎没有帮助:

wordApplication = actxserver('Word.Application');
wordApplication.Visible = 1;
wordApplication.Documents.Add;
disp(wordApplication.ActiveDocument.TextEncoding)
wordApplication.ActiveDocument.TextEncoding = 65001;
disp(wordApplication.ActiveDocument.TextEncoding)
selection = wordApplication.Selection;
toSend = sprintf('Have you seen my \23002?');
selection.TypeText(toSend)
Run Code Online (Sandbox Code Playgroud)

Lui*_*ndo 9

方法1.对单个字符有效(原始问题)

取自这里:

umbrella = 9730; %// Unicode number of the desired character
selection.InsertSymbol(umbrella, '', true); %// true means use Unicode
Run Code Online (Sandbox Code Playgroud)

第二个参数指定字体(所以你可以使用'Arial'等),''显然意味着使用当前字体.第三个参数'true'意味着使用Unicode.

方法2.对单个字符有效(原始问题)

这里采取的不那么直接的方式:

umbrella = 9730; %// Unicode number of the desired character
selection.TypeText(dec2hex(umbrella));
selection.ToggleCharacterCode;
Run Code Online (Sandbox Code Playgroud)

方法3.对字符串有效(编辑问题)

如果您不介意使用剪贴板,则可以立即使用字符串:

umbrella = char(9730);
toSend = ['Have you seen my ' umbrella '?'];
clipboard('copy', toSend); %// copy the Unicode string contained in variable `toSend`
selection.Paste %// paste it onto the Word document
Run Code Online (Sandbox Code Playgroud)

  • @MatthewSimoneau如果你不介意使用剪贴板,我发现了另一种适用于完整字符串的方法.见方法3 (2认同)