为什么从Matlab代码中粘贴到Excel中的图表具有不正确的大小和位置?

时间:2018-05-31 18:45:11

标签: excel matlab

假设我在C:\Users\me\Documents\有一个文件夹,以及包含图表的2个独立子目录:Pfiles1Pfiles2,每个子目录包含1个图:1-1.emf在{ {1}}中的Pfiles12-1.emf中的Pfiles2(图表可以采用任何格式 - png,jpg等)

我想让Matlab将每个图表粘贴到一个Excel文件中 粘贴的第一个图是好的。但是,第二个图太大(应该与第一个图相同),它的左上角应该像第一个图那样在D列

为什么会这样?

代码如下:

function Example(folder, Pdir, figImgs, outputDir)

%{
folder='C:\Users\me\Documents\';
Pdir=strings(2);
for i=1:2
    Pdir(i)=[folder '\Pfiles' num2str(i)];
end
figImgs(1,1)=["1-1.emf"];
figImgs(2,1)=["2-1.emf"];
outputDir='C:\Users\me\Documents\';
%}

%columns in Sheet 1 of Excel to paste plots
cellPos = {'D'};

excel = actxserver('Excel.Application');  % Create server object
excelWorkbook = excel.Workbooks.Add(1);   % Add a workbook
WS = excelWorkbook.Worksheets;
WS.Add([], excel.ActiveSheet);
excelSheet = WS.Item(1);

%cnt refers to the counter to keep track of the plots
for j=1:2
    cnt=1;
    figImg=figImgs(j, cnt);
    figImg=char(figImg);
    excelSheet.Shapes.AddPicture(strcat(Pdir(j), '\', figImg) , 0, 1, 0, excelSheet.Range(strcat(cellPos{1}, num2str(1 +(j-1)*60))).Top, -1, -1);  
    excelSheet.Shapes.Item(cnt).PictureFormat.CropLeft  = 30;
    excelSheet.Shapes.Item(cnt).PictureFormat.CropRight  = 30;
    excelSheet.Shapes.Item(cnt).Height  = 120;
    excelSheet.Shapes.Item(cnt).Left = excelSheet.Range(strcat(cellPos{1}, num2str(1 +(j-1)*60))).Left;
end
disp("printing Excel..")

xlWorkbookDefault = 51;
disp(['Saving file: ' num2str(j)]);
excelWorkbook.SaveAs(fullfile(outputDir, 'single.xlsx'), xlWorkbookDefault);
excelWorkbook.Close();                 % Close workbook
excel.Quit();                          % Quit server
excel.delete();                        % Delete server object

close all;

1 个答案:

答案 0 :(得分:0)

我想象这个

directions.headOption match {
  case Some('^') => // ...
  case Some('v') => // ...
  case Some('<') => // ...
  case Some('>') => // ...
  case _ => // ...
}

excelSheet.Shapes.Item(cnt).Left = excelSheet.Range(strcat(cellPos{1}, num2str(1 +(j-1)*60))).Left;

导致问题变大。乘以一个非常数J的

我对此进行了一些研究,然后意识到你需要在mathlab中使用解决方案而不是VBA。不管这可能会有所帮助:

excelSheet.Shapes.AddPicture(strcat(Pdir(j), '\', figImg) , 0, 1, 0, excelSheet.Range(strcat(cellPos{1}, num2str(1 +(j-1)*60))).Top, -1, -1);