假设我在C:\Users\me\Documents\
有一个文件夹,以及包含图表的2个独立子目录:Pfiles1
和Pfiles2
,每个子目录包含1个图:1-1.emf
在{ {1}}中的Pfiles1
和2-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;
答案 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);