Я пытаюсь запустить код, написанный мною в 2016 году, для создания документа MS Word, каждая страница которого состоит из таблицы 4_rows * 2_columns, в каждой ячейке которой содержится число Matlab:
Сначала я вызываю следующую функцию для создания документа Word:
function prepareReport(WORD_fileName)
global WORD_SERVER;
CurDir=pwd;
FileSpec = fullfile(CurDir,WORD_fileName);
WORD_SERVER=actxserver('Word.Application');
word_document=invoke(WORD_SERVER.Documents,'Add');
CM_IN_POINTS=28.3464567; %1cm=28.3464567
word_document.Pagesetup.LeftMargin=0.7*CM_IN_POINTS;
word_document.Pagesetup.RightMargin=0.7*CM_IN_POINTS;
word_document.Pagesetup.TopMargin=0.5*CM_IN_POINTS;
word_document.Pagesetup.BottomMargin=0.5*CM_IN_POINTS;
end
Используя следующую функцию, я затем создаю таблицу в документе Word (если это первая или следующая таблица, которая должна быть заполнена)и попробуйте заполнить его двумя цифрами Matlab:
function insertFiguresToWordTable( fig_1, fig_2)
persistent NUM_ROW_IN_WORD_TABLE;
persistent TABLE;
global WORD_SERVER;
if isempty(NUM_ROW_IN_WORD_TABLE)
NUM_ROW_IN_WORD_TABLE = 1;
end
if mod(NUM_ROW_IN_WORD_TABLE,4)==1
range=WORD_SERVER.ActiveDocument.Content;
range.Collapse(0);
numRows=4;
numCols=2;
TABLE=invoke(WORD_SERVER.ActiveDocument.Tables,'add',range,numRows,numCols,1,0);
end
insertToTable(TABLE , fig_1 , NUM_ROW_IN_WORD_TABLE , 1)
insertToTable(TABLE , fig_2 , NUM_ROW_IN_WORD_TABLE , 2)
end
NUM_ROW_IN_WORD_TABLE=NUM_ROW_IN_WORD_TABLE+1;
if (NUM_ROW_IN_WORD_TABLE>4)
NUM_ROW_IN_WORD_TABLE=1;
end
end
Функция 'insertToTable' имеет вид:
function insertToTable(table,fig,row_ind,col_ind)
global WORD_SERVER;
word_document=WORD_SERVER.ActiveDocument;
print(fig,'-dmeta');
table.Cell(row_ind,col_ind).Select;
invoke(WORD_SERVER.Selection,'Paste');
numShapes=word_document.InlineShapes.Count;
word_document.InlineShapes.Item(numShapes).Height=90;
word_document.InlineShapes.Item(numShapes).Width=265;
end
Когда я заканчиваю вставлять все цифры Matlab в таблицы, я вызываюследующая функция:
function endReport(WORD_fileName)
global WORD_SERVER;
CurDir=pwd;
FileSpec = fullfile(CurDir,WORD_fileName);
document=WORD_SERVER.ActiveDocument;
invoke(document,'SaveAs',FileSpec,1);
% Close the word window:
invoke(document,'Close');
% Quit MS Word
invoke(WORD_SERVER,'Quit');
% Close Word and terminate ActiveX:
delete(WORD_SERVER);
end
Теперь, код работал отлично тогда, в 2016 году. Я думаю, что я запустил его с Matlab 2011, но теперь с Matlab 2017b я получаю следующую ошибку: Undefined function 'Cell' for input arguments of type 'handle.handle'.
Эта ошибка появляется для строки:
table.Cell(row_ind,col_ind).Select;
в функции 'insertToTable'.
В чем проблема и как ее исправить ??
=> Я обнаружил, что эта ошибка возникает только тогда, когда я звоню 'prepareReport'
больше, чем оnce (имеется в виду, когда я хочу записать в несколько документов MS Word), и это, я полагаю, поскольку я определил переменную TABLE
как постоянную переменную.