xlsread から readtable への書き換えはどのようにすればよいですか?

15 views (last 30 days)
xlsread 関数を使っていましたが、readtable 関数へ書き換えを行いたいと思います。どのようにすればよいか、教えてください。

Accepted Answer

MathWorks Support Team
MathWorks Support Team on 26 Oct 2018
readtable 関数は、R2013b 以降のリリースで提供されており、出力データは、テーブル型となります。
そのため、既存のプログラムに合わせるためには、readtable 関数からはテーブル型のデータが得られることを意識し、適宜テーブルからデータを取り出す必要があります。
例えば、下記のような Excel ファイル climate.xlsxがあるとします。
(シート名 : Temperatures)
このファイルは、R2017b 以降では、MATLAB のデモに含まれており、Windows 環境では、下記コマンドで開くことができます。
>> winopen('climate.xlsx')
xlsread 関数で読み込む場合、下記のように実行すると、数値データ num と全データ raw をセル配列として取得できます。
>> [num,~,raw] = xlsread('climate.xlsx','Temperatures')
num =
12 98
13 99
14 97
raw =
4×3 cell 配列
{'Time'} {'Temp'} {'Visibility' }
{[ 12]} {[ 98]} {'clear' }
{[ 13]} {[ 99]} {'clear' }
{[ 14]} {[ 97]} {'partly cloudy'}
これに対して、readtable 関数を使う場合は、下記のように実行できます。
>> T = readtable('climate.xlsx','Sheet','Temperatures')
T =
3×3 table
Time Temp Visibility
____ ____ _______________
12 98 'clear'
13 99 'clear'
14 97 'partly cloudy'
ここで、T はテーブル型のデータになっています。
テーブルデータ T から数値データの 1, 2 列目のデータを取り出すには以下のように行います。
>> num = T{:,1:2}; % 1列目と 2 列目だけを抽出
もしくは、下記のように実行すると、数値の列を識別し、取得します。
>> ind = varfun(@isnumeric,T,'OutputFormat','uniform'); % 数値データを識別
>> num = table2array(T(:,ind)) % 数値型のデータのみを抽出
num =
12 98
13 99
14 97
また、xlsread 関数と同様に、全てのデータをセル配列で取得したい場合、(列ヘッダが含まれるのであれば)下記のように実行します。
>> raw = [T.Properties.VariableNames; table2cell(T)]
raw =
4×3 cell 配列
{'Time'} {'Temp'} {'Visibility' }
{[ 12]} {[ 98]} {'clear' }
{[ 13]} {[ 99]} {'clear' }
{[ 14]} {[ 97]} {'partly cloudy'}
なお、回答上部からダウンロードできる my_xlsread.m は、readtable 関数をベースとした読み取りを行う関数の記述例として作成したサンプル関数です。
関数の実行は、xlsread と同様にファイル名、シート名、シート範囲を指定して利用可能です。
例:
>> [num,str, all_data] = my_xlsread('test.xlsx')
>> [num,str, all_data] = my_xlsread('test.xlsx','', 'B1:E5')
ただし、あくまでもサンプルであり、すべての Excel ファイルの入力に対して動作確認を行っておりませんので、書き換えの参考にしてください。

More Answers (0)

Categories

Find more on table in Help Center and File Exchange

Products


Release

R2016b

Community Treasure Hunt

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

Start Hunting!