为什么 Xlsread 读取(日期时间)为字符串
Why Xlsread reading (date time) as string
我正在尝试阅读 Excel sheet。
在同一台计算机上,我有不同的结果。我应该怎么做才能将日期时间读取为日期而不是字符串?
我知道以后可以更改它,但我需要为 Octave 和 Matlab 使用相同的代码。
Matlab:
[data,header, raw]=xlsread('Mappe1.xlsx');
data =
0 -0.1843 -0.1445
0 -0.1845 -0.1455
0 -0.1833 -0.1461
0 -0.1819 -0.1466
header =
'Stamp' 'R1.1' 'R2.1' 'R2.2'
'24.11.2017 09:41:25' '' '' ''
'24.11.2017 05:41:23' '' '' ''
'24.11.2017 01:41:21' '' '' ''
'23.11.2017 21:41:19' '' '' ''
Octave:
data =
4.3063e+004 0.0000e+000 -1.8434e-001 -1.4451e-001
4.3063e+004 0.0000e+000 -1.8445e-001 -1.4551e-001
4.3063e+004 0.0000e+000 -1.8328e-001 -1.4611e-001
4.3063e+004 0.0000e+000 -1.8186e-001 -1.4661e-001
4.3063e+004 0.0000e+000 -1.8071e-001 -1.4493e-001
4.3063e+004 0.0000e+000 -1.8192e-001 -1.4123e-001
4.3062e+004 0.0000e+000 -1.8348e-001 -1.4165e-001
4.3062e+004 0.0000e+000 -1.8358e-001 -1.4219e-001
4.3062e+004 0.0000e+000 -1.8342e-001 -1.4284e-001
header =
{
[1,1] = Stamp
[1,2] = R1.1
[1,3] = R2.1
[1,4] = R2.2
}
确保您的 Excel 数据在 Excel 中格式化为日期,然后使用 "basic" 模式从 MATLAB 加载:
[data,header,raw]=xlsread('Mappe1.xlsx','','','basic');
首先,您上面显示的数据将您的日期格式设置为 24.11.2017 09:41:25
。点分隔符在我看来并不标准,这让我想知道它们是如何存储在 Excel 中的。我会使用像 2017-11-24 09:41:25
这样的标准格式,并确保 Excel 将它们识别为 dates/times。 (有关 MATLAB 喜欢的格式,请参阅 here)。
通过执行上述操作,我能够在 MATLAB 中读取与您请求的数值看起来相同的数值。使用基本模式将读取日期作为 Excel 序列号(不是 MATLAB datenums),如记录 here.
如果您不使用 "basic" 模式,则 MATLAB 行为取决于您计算机上安装的 Excel 版本(我们不知道)。我不知道 Octave 在这种情况下是如何工作的。
最后,在简单的情况下,编写同时适用于 MATLAB 和 Octave 的代码可能是不可能的(甚至根本不可能)。你必须准备好克服重重困难才能实现这一目标。此外,我不声称这在 Octave 中也能正常工作,因为我没有要测试的 Octave!
我正在尝试阅读 Excel sheet。 在同一台计算机上,我有不同的结果。我应该怎么做才能将日期时间读取为日期而不是字符串?
我知道以后可以更改它,但我需要为 Octave 和 Matlab 使用相同的代码。
Matlab:
[data,header, raw]=xlsread('Mappe1.xlsx');
data =
0 -0.1843 -0.1445
0 -0.1845 -0.1455
0 -0.1833 -0.1461
0 -0.1819 -0.1466
header =
'Stamp' 'R1.1' 'R2.1' 'R2.2'
'24.11.2017 09:41:25' '' '' ''
'24.11.2017 05:41:23' '' '' ''
'24.11.2017 01:41:21' '' '' ''
'23.11.2017 21:41:19' '' '' ''
Octave:
data =
4.3063e+004 0.0000e+000 -1.8434e-001 -1.4451e-001
4.3063e+004 0.0000e+000 -1.8445e-001 -1.4551e-001
4.3063e+004 0.0000e+000 -1.8328e-001 -1.4611e-001
4.3063e+004 0.0000e+000 -1.8186e-001 -1.4661e-001
4.3063e+004 0.0000e+000 -1.8071e-001 -1.4493e-001
4.3063e+004 0.0000e+000 -1.8192e-001 -1.4123e-001
4.3062e+004 0.0000e+000 -1.8348e-001 -1.4165e-001
4.3062e+004 0.0000e+000 -1.8358e-001 -1.4219e-001
4.3062e+004 0.0000e+000 -1.8342e-001 -1.4284e-001
header =
{
[1,1] = Stamp
[1,2] = R1.1
[1,3] = R2.1
[1,4] = R2.2
}
确保您的 Excel 数据在 Excel 中格式化为日期,然后使用 "basic" 模式从 MATLAB 加载:
[data,header,raw]=xlsread('Mappe1.xlsx','','','basic');
首先,您上面显示的数据将您的日期格式设置为 24.11.2017 09:41:25
。点分隔符在我看来并不标准,这让我想知道它们是如何存储在 Excel 中的。我会使用像 2017-11-24 09:41:25
这样的标准格式,并确保 Excel 将它们识别为 dates/times。 (有关 MATLAB 喜欢的格式,请参阅 here)。
通过执行上述操作,我能够在 MATLAB 中读取与您请求的数值看起来相同的数值。使用基本模式将读取日期作为 Excel 序列号(不是 MATLAB datenums),如记录 here.
如果您不使用 "basic" 模式,则 MATLAB 行为取决于您计算机上安装的 Excel 版本(我们不知道)。我不知道 Octave 在这种情况下是如何工作的。
最后,在简单的情况下,编写同时适用于 MATLAB 和 Octave 的代码可能是不可能的(甚至根本不可能)。你必须准备好克服重重困难才能实现这一目标。此外,我不声称这在 Octave 中也能正常工作,因为我没有要测试的 Octave!