、xlsread
は、現在のシステムロケールに従ってフォーマットされた文字列として日付/時刻フィールドを検索します。問題は、ほとんどの場合、秒の小数部分は表示されず、ファイルをインポートすると失われます。 Windows用のExcelなし
xlsread
basic
モード以外(例えば'10/31/96' など)を文字列としてインポート形式の日付を、そしてコンピュータ上:これを説明するthe documentation of xlsread
の最後にメモがあります。
Fortunately
、あなたは(これが唯一のExcelのソフトウェアがインストールされたWindowsコンピュータでサポートされています)生未フォーマットの値を取得するために
xlsread
で
custom 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)。
(注:私はミリ秒の部分を見るためにカスタム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)
私は、知りませんが、実際の値は:
最後に、あなたがデータをロードし、それを操作することができますしかし、ヨーヨーが欲しいですそのセルに格納されている日数は、1900年1月1日以降(またはそのシステムを使用している場合は1/1/1904)の日数と1日の端数になります。表示された日付の場合、その値は '42440.7275191319'になります。これはRangeオブジェクトの' .Value2'プロパティとしてアクセスできます。または、セルを十分な小数点以下の桁数で 'Number'としてフォーマットすると表示されます。 –
あなたがExcelファイルを読むために使用しているコードを投稿してください。また、サンプルファイルも役に立ちます。 – Amro
@Amroさらに詳しい情報を追加しました。ありがとう – echou