为什么Xlsread读取(日期时间)为字符串

时间:2017-12-06 06:45:53

标签: matlab xlsread

我正在尝试阅读Excel表格。 在同一台计算机上,我有不同的结果。如何将日期时间视为日期而不是字符串?

我知道我可以稍后更改它,但我需要为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
}

1 个答案:

答案 0 :(得分:2)

确保您的Excel数据在Excel中格式化为日期,然后使用“基本”模式从MATLAB加载:

[data,header,raw]=xlsread('Mappe1.xlsx','','','basic');

首先,您在上面显示的数据会将您的日期格式设为24.11.2017 09:41:25。点分隔符看起来并不标准,这让我想知道它们是如何存储在Excel中的。我会使用像2017-11-24 09:41:25这样的标准格式,并确保Excel将它们识别为日期/时间。 (有关MATLAB喜欢的格式,请参阅here。)

执行上述操作后,我能够在MATLAB中读取与您请求的数值相同的数值。使用基本模式将在日期中读取Excel序列号(不是MATLAB datenums),如文档here所示。

如果不使用“基本”模式,则MATLAB行为取决于计算机上安装的Excel版本(我们不知道)。我不知道Octave在这种情况下是如何工作的。

最后,在简单的情况下(甚至根本不可能),编写在MATLAB和Octave中都有效的代码可能是不可能的。你必须准备好通过箍来实现这一目标。另外我并不认为这在Octave中会起作用,因为我没有测试Octave!