在Excel中打开一个CSV文件改变我的格式

我有一个CSV文件,它有一个date时间列,我用PHP来改变,以便它在这种格式,02/18/2013 03:53:48 PM

但是当这个文件在excel中打开的时候,所有的格式都变成了这种格式,02/18/2013 15:53

现在,这对我来说不是一个问题,但我希望最终用户不必在Excel中以24小时格式查看时间。 如何让excel在打开csv后不更改我的格式,并允许最终用户对此DateTime列进行sorting而不会出现任何问题。 我知道我可以通过格式化单元格,一旦我打开文件,但我不希望最终用户甚至不得不采取这一步的格式。

我也想指出,当我select一个单元格的公式栏将以我想要的格式显示我的DateTime列让我感到困惑。

CSV文件没有格式,只包含数据。

MS Excel将检查该数据,并尝试为其设置适当的格式。 例如,它的数值是正确的。 它可以识别包含人类可读的date/时间值的string,并将其转换为其自己的内部时间戳值(表示为浮点数),然后将适当的date/时间掩码应用于该单元格,以使其样式为date或时间,但不一定要使用CSV文件中的string表示。

解决scheme#1,在格式化的datestring前加上一个=符号,并用引号括起来,所以它被当作一个string来处理。

解决scheme#2,写一个实际的Excel文件,您可以控制单元格的格式。

如果要控制最终Excel文件的格式,则需要将数据输出为该格式,并使用PHP Excel库进行相应的修改。 我不能告诉你如何做到这一点,因为我不知道你可能决定使用哪个库。

我用http://phpexcel.codeplex.com/取得了一定程度的成功

如果你只是输出一个CSV,那么Excel将会打开它,并且用户的格式化默认设置可能与你想要的不同。

他们的方式将显示在Windows中的设置或(如果用户设置不同)在Office中。 如果您希望Excel应用程序在打开时看起来像date/时间不是格式化的,那么您不应该首先将其设置为date/时间。

Excel将会看到任何以单引号作为文本的字符,因此您可以将date/时间值存储为"'02/18/2013 03:53:48 PM"