既存Excelにワー​クスペース変数を貼り​付けるためにはどのよ​うなscriptを組​めばよいでしょうか?

10 次查看(过去 30 天)
YUKI FUJITA
YUKI FUJITA 2021-10-28
既存の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
Atsushi Ueno 2021-10-28
>writematrixを使用すると新規シートを作成することになりませんか?
⇒いいえ。それだけでなく、既存シートの任意の場所に書き込む事も出来ます。
>やりたいことは既存Excelの内容を維持しつつ、指定したシートに変数を貼り付けたいです。
⇒はい。@Hernia Babyさんの回答のように既存シートの任意の場所に書き込む事も出来ます。
上記回答と同じ変更内容を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)をお勧めします。
YUKI FUJITA
YUKI FUJITA 2021-11-1
Atsushi Ueno さん
ご丁寧にご教授頂き、ありがとうございます。COMサーバを使って複雑な事をやるよりもreadmatrix,writematrixを使用する方が良いとのことですね。

请先登录,再进行评论。

采纳的回答

Hernia Baby
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')
  2 个评论
Atsushi Ueno
Atsushi Ueno 2021-10-28
これが王道!間違いない!
YUKI FUJITA
YUKI FUJITA 2021-11-1
Heria Babyさん
ありがとうございます。Atushi Uenoさんからコメント頂いておりますが、readmatrix, writematrixを使用してトライしてみます。ご丁寧にありがとうございました。本当に助かります。

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 MATLAB の COM オブジェクト 的更多信息

产品


版本

R2015a

Community Treasure Hunt

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

Start Hunting!