2016-03-27 4 views
0

セルに日付と時刻を持つExcelデータファイルがあります。 (数式バーにデータ別名)のセルに格納されたデータは以下のとおりです。Excelセル内のすべてのデータにアクセスするにはどうすればよいですか?私はMATLABにインポートする必要があります

3/11/2016 5:27:36 PM 

しかし、同じセルが表示され

2016/03/11 17:27:37.653 

私はミリ秒単位にアクセスする必要がある、といくつかの理由でその情報ISN同じように扱った。 WordにコピーしてExcelに貼り付けない限り、ExcelはExcelで動作しません。どのようにしてミリ秒をMATLABに入れることができますか?私はこれらのファイルの数十を読む必要があります。

マイMATLABコードのみで構成されています

2016/03/11 17:27:19.213 0.000004 
2016/03/11 17:27:35.813 -0.00002 
2016/03/11 17:27:36.000 0.000015 

これは、細胞内に含まれているものです::

3/11/2016 5:27:19 PM 0.000004 
3/11/2016 5:27:36 PM -0.00002 
3/11/2016 5:27:36 PM 0.000015 

for i=1:5 
    traverse_file=sprintf('traverse_s4r%d.xlsx',i); 
    [num,text,both{i}]=xlsread(traverse_file); 
end 

これはExcelのセルがどのように見えますかありがとう。

+1

私は、知りませんが、実際の値は:

最後に、あなたがデータをロードし、それを操作することができますしかし、ヨーヨーが欲しいですそのセルに格納されている日数は、1900年1月1日以降(またはそのシステムを使用している場合は1/1/1904)の日数と1日の端数になります。表示された日付の場合、その値は '42440.7275191319'になります。これはRangeオブジェクトの' .Value2'プロパティとしてアクセスできます。または、セルを十分な小数点以下の桁数で 'Number'としてフォーマットすると表示されます。 –

+0

あなたがExcelファイルを読むために使用しているコードを投稿してください。また、サンプルファイルも役に立ちます。 – Amro

+0

@Amroさらに詳しい情報を追加しました。ありがとう – echou

答えて

0

xlsreadは、現在のシステムロケールに従ってフォーマットされた文字列として日付/時刻フィールドを検索します。問題は、ほとんどの場合、秒の小数部分は表示されず、ファイルをインポートすると失われます。 Windows用のExcelなし

xlsreadbasicモード以外(例えば'10/31/96' など)を文字列としてインポート形式の日付を、そしてコンピュータ上:これを説明するthe documentation of xlsreadの最後にメモがあります。

Fortunately

、あなたは(これが唯一のExcelのソフトウェアがインストールされたWindowsコンピュータでサポートされています)生未フォーマットの値を取得するために xlsreadcustom processing functionを渡すことができます。 @RonRosenfeldはコメントで説明したように、00年1月 - 1900年以来の端数日数表す serial numbersとしてExcelの保存日付時刻を:彼らは計算に使用することができるように

エクセル店が連続したシリアル番号としてさかのぼります。デフォルトでは、1900年1月1日には、シリアルナンバー1であり、それは39448日1月1日、1900年

後あなたはCOM/ActiveXのから未フォーマットの値を取得することができているので、2008年1月1日は、シリアル番号39448です.Value2プロパティを使用します。

MATLABにはserial date numbers(00-January-0000以降の端数日数)を格納する独自の規約があります。だから、Excelから生シリアル番号をロードしたら、それをMATLABが使用する規約に変換する必要があります。MATLABのdatetimeクラスでは、変換はhereのように簡単です。

今、私たちはここに、定住そのすべてが完全な日付/時刻の精度であなたのExcelファイルをロードするためのコードでいることを

function t = loadMyExcelFile(fnameXLSX, sheet) 
    % read Excel sheet using our custom processing function to get the 
    % raw dates without any formatting 
    if nargin<2, sheet = 1; end 
    [~,~,~,custom] = xlsread(fnameXLSX, sheet, '', '', @CustomProcessFcn); 

    % convert excel dates to MATLAB datetime, also customize how 
    % the datetime values are displayed (with full precision) 
    dt = datetime(cell2mat(custom(:,1)), 'ConvertFrom','excel', ... 
     'Format','yyyy-MM-dd HH:mm:ss.SSSSSS'); 
    val = cell2mat(custom(:,2)); 

    % compute the milliseconds part alone 
    ms = round(rem(dt.Second, 1) * 1000); 

    % build and return results as a MATLAB table 
    t = table(dt, val, ms); 
end 

function [data, V2] = CustomProcessFcn(data) 
    V2 = data.Value2; 
end 

上記のインポート機能を確認するために、私はサンプルExcelを作成ランダムな日付と値のシート(あなたが従うことを望むならばdownload it here)。

excel_sheet

(注:私はミリ秒の部分を見るためにカスタムyyyy-mm-dd hh:mm:ss.000に日付のセルの書式を変更します)。これが役立つ場合、私はMATLABで動作しないよう

>> t = loadMyExcelFile('Book1.xlsx') 
t = 
       dt     val  ms 
    __________________________ _______ ___ 
    2016-03-28 23:00:25.100877 0.31472 101 
    2016-03-29 18:58:28.578988 0.72052 579 
    2016-03-30 10:19:04.318113  0.3475 318 
    2016-03-31 10:00:26.065898 0.76088  66 
    2016-04-01 14:19:13.908256 0.89324 908 
    2016-04-02 04:29:42.858488 0.49078 858 
    2016-04-03 07:12:32.249770 0.26928 250 
    2016-04-04 16:48:25.073809 0.31616  74 
    2016-04-05 08:51:05.228647 0.77366 229 
    2016-04-06 21:38:29.768989  1.2386 769 
    2016-04-07 06:55:49.555229 0.89617 555 
    2016-04-08 01:13:40.028169  1.3668  28 
    2016-04-09 23:38:56.049314  1.8239  49 
    2016-04-10 04:13:09.258885  1.8093 259 
    2016-04-11 09:40:38.799400  2.1096 799 
    2016-04-12 03:37:27.442933  1.7515 443 
    2016-04-13 12:20:01.502968  1.6732 503 
    2016-04-14 18:15:25.406924  2.089 407 
    2016-04-15 14:46:10.802325  2.3812 802 
    2016-04-16 02:58:43.615177  2.8407 615 

>> plot(t.dt, t.val) 

datetime_plot

+0

' datetime'オブジェクトで動作するには少なくともMATLAB R2014bが必要です。古いバージョンの場合は、代わりに 'datenum'(シリアル日付番号)を使用するか、単純な古い文字列を使用します。 – Amro

+0

ありがとう!これはうまくいきます。 – echou

0

以下が動作しない場合

doc datestr 

を行います。無数のフォーマットで日付/時刻を操作するためのサポートがたくさんあります。カスタムソリューションを思いついて自分自身を殺す前に、これらを利用してください。デフォルトで

time = datestr(text, 'yyyy/mm/dd hh:MM:dd.fff') 
[y,m,d,h,m,s] = datevec(time); 
ms = s - floor(s); 
関連する問題