将VBA语法转换为Matlab,以便对Word文档进行Activex控制

时间:2011-09-27 14:23:49

标签: matlab vba activex office-interop

我是在matlab中使用activex控件的新手。我试图控制word文档。我想,我需要在VBA语法和Matlab之间进行翻译。如何在matlab中编写以下代码?

Sub macro()
With CaptionLabels("Table")
        .NumberStyle = wdCaptionNumberStyleArabic
        .IncludeChapterNumber = True
        .ChapterStyleLevel = 1
        .Separator = wdSeparatorHyphen
End With

Selection.InsertCaption Label:="Table", TitleAutoText:="", Title:="", _
        Position:=wdCaptionPositionAbove, ExcludeLabel:=0
End Sub

谢谢,我查看了帮助和来源,但我仍然感觉很密集。我希望能够在自动报告中控制字幕编号和字幕文本。我正在使用表格和数字。我只是无法理解如何编写添加字幕的代码。

以下代码让我分道扬..但我无法控制编号风格等。我试图找出activex结构,但我无法理解它。特别是,特别是上面的VB子程序的第一位。

% Start an ActiveX session with Word
hdlActiveX = actxserver('Word.Application');
hdlActiveX.Visible = true;
hdlWordDoc = invoke(hdlActiveX.Documents, 'Add');
hdlActiveX.Selection.InsertCaption('Table',captiontext);

2 个答案:

答案 0 :(得分:2)

经过一番摆弄,我想我已经开始工作了:

%# open Word
Word = actxserver('Word.Application');
Word.Visible = true;

%# create new document
doc = Word.Documents.Add;

%# set caption style for tables
t = Word.CaptionLabels.Item(2); %# 1:Figure, 2:Table, 3:Equation
t.NumberStyle = 0;              %# wdCaptionNumberStyleArabic
t.IncludeChapterNumber = false;
t.ChapterStyleLevel = 1;
t.Separator = 0;                %# wdSeparatorHyphen

%# insert table caption for current selection
Word.Selection.InsertCaption('Table', '', '', 0, false) %# wdCaptionPositionAbove

%# save document, then close
doc.SaveAs2( fullfile(pwd,'file.docx') )
doc.Close(false)

%# quit and cleanup
Word.Quit
Word.delete

请参阅MSDN文档以了解如何使用此API。例如,上面使用的InsertCaption函数的参数顺序。

请注意,我必须将IncludeChapterNumber设置为false,否则Word会在标题文本中打印"Error! No text of specified style in document" ...

最后,为了找出wd*枚举的整数值,我使用ILDASM工具来反汇编Office Interop程序集(建议this solution)。只需将整个内容转储到文本文件中,然后搜索您要查找的字符串。

ildasm

答案 1 :(得分:0)

在基础MATLAB工具箱中查看actxserver的帮助和xlsread.m的源代码。如果您仍然卡住,请根据您的进度更新您的问题。

修改: 您需要检查VBA帮助,但第一部分应该可以通过以下方式实现:

o = hdlWordDoc.CaptionLabels('Table');
o.NumberStyle = <some number corresponding to wdCaptionNumberStyleArabic>;
o.IncludeChapterNumber = true;
o.ChapterStyleLevel = 1;
o.Separator = <some number corresponding to wdSeparatorHyphen>;

根据我的经验,你必须从枚举中获取值,例如来自VBA脚本的wdCaptionNumberStyleArabic和wdSeparatorHyphen,然后对它们进行硬编码。您可以尝试以下方法,但我认为它不起作用:

o.NumberStyle = 'wdCaptionNumberStyleArabic';
o.Separator = 'wdSeparatorHyphen';