主に命令の実施順序を入れ替えました。MATLAB R2017aとKingsoft Spreadsheets(9.1.0.4759)で動作確認しました。
- 画像ファイルは作業ファイルなので名前は”fig1.jpg"固定にしました。nが増えても上書きしていきます
- 一方Excelのシートはnの数だけ作成され、指定の名前Sheet名"A-n"が付けられていきます
- Excel関連の命令は単体では問題無く動作します。繰り返す必要の無い命令はfor文の外に出しました
- 追加したオブジェクトハンドルeNewSheetを使い図の貼り付け関連処理を行う事が出来ます
- fig1は「figure オブジェクト」であり「文字列」ではないので注意が必要です
imag_extension = '.jpg'; % 画像ファイルの拡張子
file_extension = '.xlsx'; % Excelファイルの拡張子
imag_name = [pwd, '\', 'fig1' imag_extension]; % 画像ファイルパス
file_name = [pwd, '\', 'matome', file_extension]; % Excelファイルパス
% Excel COM Server のハンドル取得と Workbook のオープン処理など
Excel = actxserver('Excel.Application');
excelapp.DisplayAlerts = false;
set(Excel, 'Visible', 1);
Workbooks = Excel.Workbooks;
Workbook = invoke(Workbooks,'Open',file_name);
eSheets = Excel.ActiveWorkbook.Sheets;
for n = 1:1:10
fig1 = plot(1:100,rand(1,100)); % 実際のfig1はnと共に変化すると想定
saveas(fig1,'fig1','jpg'); % ←保存したファイル名がim_nameと一致する想定
% Excelシートの追加
eSheet1 = Item(eSheets,1);
eNewSheet = Add(eSheets,eSheet1);
eNewSheet.Name = ['A-',num2str(n)];
% 画像の貼りつけ
Shapes = eNewSheet.Shapes;
Top = eNewSheet.Range('B2','B2').Top; % セル B2 の高さの位置
Left = eNewSheet.Range('B2','B2').Left; % セル B2 の左端の位置
Y = Shapes.AddPicture(im_name,0,1,Left,Top,300,300); % 画像貼り付け
end
Workbook.Save();