我有一个CSV文件,其中包含一个DateTime列,我使用php进行更改,以便它采用这种格式,02/18/2013 03:53:48 PM
但是当在excel中打开此文件时,所有格式都会更改为此格式, 02/18/2013 15:53
现在这对我来说不是一个问题,但是我希望最终用户不必在excel中查看24小时格式的时间。如何在打开csv后使excel不更改格式并允许最终用户对此DateTime列进行排序而不会出现任何问题。我知道我可以通过在打开文件后格式化单元格来更改日期的格式,但我不希望最终用户甚至不得不采取这一步骤。
我还想指出,当我选择一个单元格时,公式栏会以我想要的格式显示我的DateTime列,这让我感到困惑。
答案 0 :(得分:5)
CSV文件没有格式,只包含数据。
MS Excel将检查该数据,并尝试为其设置适当的格式。例如,它右对齐数值。它可以识别包含人类可读日期/时间值的字符串,并将其转换为自己的内部timestammp值(表示为浮点数),然后将适当的日期/时间掩码应用于该单元格,使其样式为日期或时间,但不一定使用CSV文件中的字符串表示。
解决方案#1,在格式化的日期字符串前加上一个=符号,并用引号括起来,以便将其视为字符串。
解决方案#2,编写一个实际的Excel文件,您可以在其中控制单元格的格式。
答案 1 :(得分:1)
如果要控制最终Excel文件的格式,则需要将数据输出为该格式,并使用PHP Excel库进行相应的修改。我无法确切地告诉你如何做到这一点,因为我不知道你可能决定使用哪个库。
我已经使用http://phpexcel.codeplex.com/取得了一定程度的成功
如果您只是输出一个CSV,那么Excel将使用用户默认设置打开它,这可能与您想要的格式不同。
答案 2 :(得分:0)
他们的方式显示时间是Windows中的设置或(如果用户设置不同)在Office中。如果你想要的东西看起来像是在开放时没有由Excel应用程序格式化的日期/时间,那么你不应该首先把它作为日期/时间。
Excel会看到任何由单个直引号改为文本的内容,因此您可以将日期/时间值存储为"'02/18/2013 03:53:48 PM"