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

조회 수: 11 (최근 30일)
YUKI FUJITA
YUKI FUJITA 2021년 10월 28일
댓글: YUKI FUJITA 2021년 11월 1일
既存の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개)

제품


릴리스

R2015a

Community Treasure Hunt

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

Start Hunting!