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

20 ビュー (過去 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!