MATLAB:如何将无花果粘贴到excel中,然后保存并关闭excel文件?

问题描述

我在MATLAB中生成一个excel文件,并使用以下命令成功保存并关闭了该文件

    invoke(Workbook,'Save')
    invoke(Excel,'Quit');
    delete(Excel);
    clear Excel;
   

但是,当我使用 PlotInExcel 将图形添加到该excel文件时,无法再次使用相同的代码保存和关闭文件。这是 PlotInExcel

    function PlotInExcel
       x= {1:10};
       a= cell2mat(x);
       y= {1:10};
       b= cell2mat(y);
       %............plotting......................
       plot(a,b);
       xlabel('X Values');
       ylabel('Y Values');
       print -dMeta;   %.................copying to clipboard
       FILE  = 'C:DATA.xlsx';
       Range='OL14';
       %.............excel COM object...........................................
             Excel = actxserver ('Excel.Application');
     Excel.Visible = 1;
     if ~exist(FILE,'file')
           ExcelWorkbook=Excel.Workbooks.Add;
            ExcelWorkbook.SaveAs(FILE);
           ExcelWorkbook.Close(false);
     end
     invoke(Excel.Workbooks,'Open',FILE); %Open the file
     ActiveSheet  = Excel.ActiveSheet;
     ActiveSheetRange  = get(ActiveSheet,'Range',Range);
    ActiveSheetRange.Select;
     ActiveSheetRange.PasteSpecial; %.................Pasting the figure to the selected location

    %-----------------------------------end of function"PlotInExcel----------

如何让MatLab立即保存该文件退出?上面提到的代码现在无法使用。是否有向该函数添加代码方法?还是可以/应该在脚本之外的功能之外保存/关闭文件

解决方法

有了足够的抨击,我终于能够回答自己的问题。如果有人遇到此问题,我将在此处发布解决方案。我在一开始就删除了这些行,因为它们只是生成了一个测试图。下面的功能假定您要粘贴自己的图形到Excel电子表格中。顺便说一句,您必须先将图形保存到剪贴板,然后才能运行此功能。

function PlotInExcel
   
   FILE  = 'C:\DATA.xlsx';     %identify the name and location of your excel spreadsheet
   Range='R1';                 %select where you want your figure pasted in the speadsheet (cell ID)
   %.............excel COM object............................................................................
         Excel = actxserver ('Excel.Application');
 Excel.Visible = 1;
 if ~exist(FILE,'file')
       ExcelWorkbook=Excel.Workbooks.Add;
       ExcelWorkbook.SaveAs(FILE);
       ExcelWorkbook.Close(false);
 end
 invoke(Excel.Workbooks,'Open',FILE); %Open the file
 ActiveSheet  = Excel.ActiveSheet;
 ActiveSheetRange  = get(ActiveSheet,'Range',Range);
 ActiveSheetRange.Select;
 ActiveSheetRange.PasteSpecial; %.................Pasting the figure to the selected location
  Excel.ActiveWorkbook.Save     % Now save the workbook
     if eq(Excel.ActiveWorkbook.Saved,1)
         Excel.ActiveWorkbook.Close;
     else
         Excel.ActiveWorkbook.Save;
     end
     invoke(Excel,'Quit');    % Quit Excel    
     delete(Excel);            % End process
end