既存Excelにワークスペース変数を貼り付けるためにはどのようなscriptを組めばよいでしょうか?
11 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
YUKI FUJITA
am 28 Okt. 2021
Kommentiert: YUKI FUJITA
am 1 Nov. 2021
既存の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 Kommentare
Atsushi Ueno
am 28 Okt. 2021
>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)をお勧めします。
Akzeptierte Antwort
Hernia Baby
am 28 Okt. 2021
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')
2 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu スプレッドシート finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!