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

36 visualizaciones (últimos 30 días)
YUKI FUJITA
YUKI FUJITA el 28 de Oct. de 2021
Comentada: YUKI FUJITA el 1 de Nov. de 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 comentarios
Atsushi Ueno
Atsushi Ueno el 28 de Oct. de 2021
>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 el 1 de Nov. de 2021
Atsushi Ueno さん
ご丁寧にご教授頂き、ありがとうございます。COMサーバを使って複雑な事をやるよりもreadmatrix,writematrixを使用する方が良いとのことですね。

Iniciar sesión para comentar.

Respuesta aceptada

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

Iniciar sesión para comentar.

Más respuestas (0)

Productos


Versión

R2015a

Community Treasure Hunt

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

Start Hunting!