主要内容

このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

Excelをオトメションサバとして使用したスプレッドシトデタの読み取り

この例では,comオトメションサバを使用してmatlab®から別のアプリケ,ションにアクセスする方法を示します。微软®Excel®ファ。アプリケ,ションでコンポ,ネントオブジェクトモデル(com)を使用しない場合,スプレッドシ,トの関数と例で、ExcelスプレッドシートのデータをMATLABにインポートする代替方法を参照してください。

MATLABとスプレッドシートプログラム間の通信を有効にするために,この例では,Excelアプリケーションを実行するオートメーションサーバーにオブジェクトを作成します。これにより,MATLABはExcelオートメーションサーバーによって提供されるインターフェイスを介してスプレッドシートのデータにアクセスするようになります。最後に,この例では,Microsoft Excelファ。

例示される手法

  • オトメションサバを使用して,matlabから別のアプリケションにアクセスする

  • Excelデタをンタフェスとプロットに使用する型に変換する操作をする

次の手法は,スプレッドシ,トのデ,タの可視化と操作をどのように行うかを示します。

  • Excelスプレッドシトの選択した列をプロットするンタフェスの実装。

  • MATLABの图の,ExcelファExcelルへの挿入。

完全なコドリストを確認するには,ファルactx_excel.mをエディタ,で開きます。

Excelオ,トメ,ションサ,バ,の作成

Matlabからスプレッドシ,トのデ,タにアクセスするための最初の手順として,関数actxserverとプログラムidexcel.applicationを使用して,オ,トメ,ションサ,バ,プロセスでExcelアプリケ,ションを実行します。

Exl = actxserver('excel.application');

exlオブジェクトは、Excelプログラムでサポートされる数多くのインターフェイスへのアクセスを提供します。手册▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪

exlWkbk = exl.Workbooks;exlFile = exlWkbk。打开([docroot ' / techdoc / matlab_external /例子/ input_resp_data.xls '));

ワ,クブックの范围オブジェクトからデ,タにアクセスします。このオブジェクトには,指定されたシ,トからのデ,タ範囲への参照が格納されています。この例では,列一个の最初のセルから列Gの最後のセルにあるすべてのデ,タにアクセスします。

exlSheet1 = exlFile.Sheets.Item('Sheet1');robj = exlSheet1.Columns.End(4);查找列的结尾numrows = robj.row;dat_range = ['A1:G' num2str(numrows)];rngObj = exlSheet1.Range(dat_range);

この時点で,Excelファ,Excelルのsheet1の全デタセットが,范围オブジェクトンタフェスrngObjからアクセスされます。このオブジェクトは,MATLAB单元格配列exlDataのデ,タを返します。これには数値デ,タと文字デ,タの両方が含まれます。

exlData = rngObj.Value;

MATLABワ,クスペ,スでのデ,タの操作

データを细胞配列に入れたことにより,MATLAB関数を使用してデータの一部を抽出し,インターフェイスでの使用とプロット関数への受け渡しができるデータ形状に変更できるようになりました。デタに関する仮定の詳細にいては,Excelスプレッドシ,ト形式を参照してください。

次のコ,ドはデ,タを操作します。

for ii = 1:size(exlData,2) matData(:,ii) =重塑([exlData{2:end,ii}],size(exlData(2:end,ii)));lBoxList{ii} = [exlData{1,ii}];结束

このコ,ドは次の操作を実行します。

  • Cell配列から数値デ,タを抽出します。中かっこ{}内の@ @ンデックス式を参照してください。

  • ▪▪▪▪ンデックス操作によって返される個々の双を結合します。大かっこ[]内の式を参照してください。

  • 関数重塑を使用して,結果の形状を,デ,タを列単位で並べる配列に変換します。

  • exlDataデ,タのそれぞれの列における最初のセルのテキストを抽出し,テキストをcell配列lBoxListに格納します。この変数を使用して,リストボックスの項目を生成します。

Excelスプレッドシ,ト形式

この例では,次の図に示されるように,Excelスプレッドシ,トの特定の構成を想定します。

ExcelファExcelルの形式は以下のとおりです。

  • 各列の最初の要素は,列に格納されているデ,タを識別するテキストです。これらの値が抽出され,リストボックスが作成されます。

  • 最初の列时间は,残りのデ,タのすべてのプロットにおけるx軸に使用されます。

  • 各列のすべての行がmatlabに読み取られます。

プロッタのンタフェスの作成

この例では,入力と応答のデタのリストから選択できるンタフェスを使用します。すべてのデ,タは時間の関数としてプロットされます。また,グラフにデ,タを追加し続けることができます。グラフにデ,タプロットが追加されると,凡例にもデ,タが追加されます。

この▪▪ンタ▪▪フェ▪▪スには以下の詳細が含まれます。

  • グラフにデ,タを追加するごとに更新される凡例

  • 座標軸からすべてのグラフを削除できるクリアボタン

  • PNGファaapl . exeルとしてグラフを保存し,それを別のExcelファaapl . exeルに追加する保存ボタン

  • アクセスしているExcelファExcelルを表示または非表示にするトグルボタン

  • オ、トメ、ションサ、バ、を終了するための图の削除関数

デ,タの選択とプロット

(创建图)ボタンをクリックすると,コールバック関数がリストボックスのクエリを行い,どの項目が選択されたかを判断し,各データを時間に対してプロットします。Matlabは既存のデ,タの凡例を維持し,凡例を更新して新しいデ,タを表示します。

iSelected = get(listBox,'Value');hold all for p = 1:length(iSelected) switch iSelected(p) case 1 plot(a,tme,matData(:,2) case 2 plot(a,tme,matData(:,3) case 3 plot(a,tme,matData(:,4)) case 4 plot(a,tme,matData(:,5) case 5 plot(a,tme,matData(:,5) case 5 plot(a,tme,matData(:,6) case 6 plot(a,tme,matData(:,7))否则disp('选择数据到plot') end end [b,c,g,lbs] = legend([lbs lBoxList(iSelected+1)]);结束% plotButtonCallback

軸のクリア

プロッターは,ユーザーがリストボックスからデータを選択するごとに継続的にグラフを追加するように設計されています。(清晰的图)ボタンは,座標軸を削除してリセットし,プロットデータのラベルの格納に使用される変数(凡例で使用)を削除します。

clearButtonCallback(src,evt) cla(a,'reset') lbs = ";结束% clearButtonCallback

Excelの表示または非表示

MATLABプログラムは,オートメーションサーバーで実行しているExcelアプリケーションのプロパティにアクセスします。このコ,ルバックは可见プロパティを1または0に設定することにより,Excelファ,Excelルの可視性を制御します。

显示或隐藏Excel文件函数disbuttoncallback (src,evt) exl。visible = get(src,'Value');结束% disbuttoncallback

图を閉じてExcelオ,トメ,ションプロセスを終了

ExcelオートメーションサーバーはMATLABとは別のプロセスで実行されるため,このプロセスは明示的に終了しなければなりません。インターフェイスを閉じた後にこのプロセスを実行し続ける必要はないため,この例では图の删除関数を使い,辞职メソッドでExcelプロセスを終了します。また,グラフの保存に使用したExcelプロセスも終了する必要があります。このプロセスを終了する方法の詳細にいては,ExcelスプレッドシトへのMATLABグラフの挿入を参照してください。

终止Excel处理函数deleteFig(src,evt) exlWkbk. exe。exlWkbk2关闭。思想密切李世默。exl2辞职。辞职结束% deleteFig

Excelスプレッドシ,トへのMATLABグラフの挿入

この▪▪ンタ▪▪フェ▪▪スを使って作成したグラフをExcelファ▪▪ルに保存できます。この例では,この目的のために別のExcelオ,トメ,ションサ,バ,プロセスを使用します。(保存图)プッシュボタンのコ,ルバックは,メ,Excelファ,ルに追加します。

  • 座標軸と凡例の両方が,画面表示どおりにグラフを印刷するように設定された非表示图にのコピーされます(图のPaperPositionModeプロパティは汽车に設定されています)。

  • 打印コマンドでPNG格式。

  • 形状●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●

サバとンタフェスは初期化フェズ中にンスタンス化されます。

Exl2 = actxserver('excel.application');exlWkbk2 = exl2.Workbooks;wb = invoke(exlWkbk2,'Add');graphSheet =调用(wb.Sheets,'Add');形状= graphSheet.Shapes;

このコ,ドを使用して,(保存图)ボタンのコ,ルバックを実装します。

function saveButtonCallback(src,evt) tempfig = figure('Visible','off','PaperPositionMode','auto');Tempfigfile = [tempname '.png'];Ah = findobj(f,'type','axes');copyobj(ah,tempfig) %复制图形轴和图例轴print(tempfig,'- dng ',tempfigfile);Shapes.AddPicture (tempfigfile, 0, 1, 18300235);exl2。Visible = 1;结束

例の実行

例を実行するには,リストボックスの任意の項目を選択し,(创建图)ボタンをクリックします。この例で提供されるサンプルデータには,3つの入力と,関連付けられた3つの応答データセットが格納されています。これらすべてのデータセットは,Excelファイルの1列目,つまり時間データに対してプロットされます。

[显示Excel数据文件]ボタンをクリックして,Excelデタファルを表示します。グラフの画像を別のExcelファExcelルに保存するには,(保存图)ボタンをクリックします。現在のフォルダ,への書き込みアクセス権がある場合,(保存图)オプションを使用すると,そのフォルダ,に一時的なPNGファ@ @ルが作成されます。

次の図は,リストボックスで入力/応答の組み合わせが選択され,座標軸にプロットされているインターフェイスを示しています。

この例を実行するには,このリンクをクリックします。

参考

関連するトピック