既存Excelにワークスペース変数を貼り付けるためにはどのようなscriptを組めばよいでしょうか?
10 次查看(过去 30 天)
显示 更早的评论
既存のExcelシートの指定したシートへMATLABのワークスペースに保存された変数を貼り付けるためのscriptを考えていますが、
変数貼り付けの部分がまだ作れていません。ご教授頂きたいです。
XL_file = [pwd '\test.xlsm'];
[type, sheet_names] = xlsfinfo(XL_file);
% Excel を COM オートメーションサーバとしてオープン
Excel = actxserver('Excel.Application');
set(Excel, 'Visible', 1);
% エクセルのアラートを非表示に設定
set(Excel,'DisplayAlerts',0);
% エクセルのワークブックのハンドルを取得
Workbooks = Excel.Workbooks;
% エクセルワークブックを開き、アクティベート
Workbook = Workbooks.Open(XL_file);
% 貼り付けるsheetを指定してアクティブに
Sheets = Excel.ActiveWorkBook.Sheets;
Sheet1 = get(Sheets,'Item',3);
Sheet1.Activate;
% MATLABワークスペース変数を貼り付ける ・・・未作成
% ワークブックを保存
Workbook.Save;
% ワークブックをクローズ
Workbooks.Close;
% エクセルを終了
invoke(Excel, 'Quit');
% ActiveX オブジェクトのハンドルを消去
delete(Excel);
4 个评论
Atsushi Ueno
2021-10-28
>writematrixを使用すると新規シートを作成することになりませんか?
>やりたいことは既存Excelの内容を維持しつつ、指定したシートに変数を貼り付けたいです。
上記回答と同じ変更内容をCOMサーバで実行するなら、下記の2行を質問のプログラムに加えると動くと思います。
% MATLABワークスペース変数を貼り付ける ・・・未作成
range = Sheet1.get('Range','B2:B16')
range.value = randi(15,15,1); % ここを実行した時点でワークシートの値も変わります。
動作確認は下記環境で行いました。
- MATLAB(R2017a)
- WPS Spreadsheets (Interface.Upgrade_WPS_Spreadsheets_3.0_Object_Library__Beta_)
COMサーバはインターフェースが複雑で厄介なので、回答の方法(readmatrix, writematrix)をお勧めします。
采纳的回答
Hernia Baby
2021-10-28
Sampleで指定したシート、指定した場所に数字を貼り付けています。
これを動かす条件は「対象のエクセルを閉じておく」ことです。
clear,clc;
X = readmatrix('Sample.xlsx','Sheet',1,'Range','B2:B16')
上のX部分を書き換えます。他のセルには干渉しません。
x = randi(15,15,1);
writematrix(x,'Sample.xlsx','Sheet',1,'Range','B2:B16');
X = readmatrix('Sample.xlsx','Sheet',1,'Range','B2:B16')
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 MATLAB の COM オブジェクト 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!