Excelにプロット画像を連続で張り付けたい

27 views (last 30 days)
大輝 徳永
大輝 徳永 on 10 May 2022
Answered: Atsushi Ueno on 10 May 2022
1,あらかじめ作っておいた"matome.xlsx"にSheet名"A-n"を作成
2.matlab上で作成したグラフをjpg形式で"A-n"内セルB2に左上角を併せて貼付
↑の1・2をnの数だけ行いたいのですが、うまくいきません。
下記が作成途中のプログラムになります。
extension = '.jpg'; % 拡張子
for n=1:1:10
for i=1:1:100
A(i,1)=i;
end
fig1=plot(1:1:100,A)
saveas(fig1,fig1,'jpg');
filename=[fig1 extension];
file_name=[' ']; % Excel ファイルパス
im_name = [pwd, '\',filename]; % 画像ファイルパス
% 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;
eSheet1 = Item(eSheets,1);
eNewSheet = Add(eSheets,eSheet1);
% Sheet のハンドルを取得し、Sheet を選択
Activesheet = Excel.Activesheet;
Sheets = Excel.ActiveWorkBook.Sheets;
Sheet1 = get(Sheets, 'Item', 2);
Sheet1.Activate;
Sheet1.Name = ['A-',num2str(n)];
% 画像の貼りつけ
Shapes = Sheet1.Shapes;
Top = Sheet1.Range('B2', 'B2').Top; % セル B2 の高さの位置
Left = Sheet1.Range('B2', 'B2').Left; % セル B2 の左端の位置
Y=Shapes.AddPicture(im_name ,0,1,Left,Top,300,300); % 画像貼り付け
Workbook.Save();
end

Answers (1)

Atsushi Ueno
Atsushi Ueno on 10 May 2022
主に命令の実施順序を入れ替えました。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();

Tags

Products


Release

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!