Перевести синтаксис VBA в Matlab для управления Activex документа Word - PullRequest
1 голос
/ 27 сентября 2011

Я новичок в использовании элементов управления ActiveX в Matlab.Пытаюсь контролировать слово документ.Мне нужна помощь в переводе между синтаксисом 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 ]

2 голосов
/ 29 сентября 2011

После некоторой путаницы, я думаю, я заставил его работать:

%# 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 (как и это решение предложено).Просто скопируйте все это в текстовый файл и найдите искомые строки.

ildasm

0 голосов
/ 27 сентября 2011

Посмотрите справку для actxserver и исходный код для xlsread.m в базовой панели инструментов MATLAB. Если вы все еще застряли, то обновите ваш вопрос с вашим прогрессом.

EDIT : Вам нужно проверить справку 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>;

По моему опыту, вы должны получить значения из перечислений, таких как wdCaptionNumberStyleArabic и wdSeparatorHyphen из сценария VBA, а затем жестко их кодировать. Вы можете попробовать следующее, но я не думаю, что это работает:

o.NumberStyle = 'wdCaptionNumberStyleArabic';
o.Separator = 'wdSeparatorHyphen';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...