- 画像ファイルは作業ファイルなので名前は”fig1.jpg"固定にしました。nが増えても上書きしていきます
- 一方Excelのシートはnの数だけ作成され、指定の名前Sheet名"A-n"が付けられていきます
- Excel関連の命令は単体では問題無く動作します。繰り返す必要の無い命令はfor文の外に出しました
- 追加したオブジェクトハンドルeNewSheetを使い図の貼り付け関連処理を行う事が出来ます
- fig1は「figure オブジェクト」であり「文字列」ではないので注意が必要です
Excelにプロット画像を連続で張り付けたい
61 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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
1 commentaire
Atsushi Ueno
le 10 Mai 2022
Déplacé(e) : Atsushi Ueno
le 17 Août 2022
主に命令の実施順序を入れ替えました。MATLAB R2017aとKingsoft Spreadsheets(9.1.0.4759)で動作確認しました。
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();
Réponses (0)
Voir également
Catégories
En savoir plus sur スプレッドシート dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!