Ошибка Matlab: `Неопределенная функция 'Cell' для входных аргументов типа 'handle.handle' при попытке заполнить таблицу MS Word цифрами Matlab - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь запустить код, написанный мною в 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 как постоянную переменную.

...