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)
取自这里:
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.
从这里采取的不那么直接的方式:
umbrella = 9730; %// Unicode number of the desired character
selection.TypeText(dec2hex(umbrella));
selection.ToggleCharacterCode;
Run Code Online (Sandbox Code Playgroud)
如果您不介意使用剪贴板,则可以立即使用字符串:
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)
归档时间: |
|
查看次数: |
1205 次 |
最近记录: |