2013-04-30 63 views
4

我有一个CSV文件,其中有一个DateTime列,我使用php进行更改以便以此格式显示,02/18/2013 03:53:48 PM在excel中打开CSV文件更改我的格式

但是,当该文件在Excel中打开了所有的格式更改为此格式, 2013年2月18日15:53

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

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

回答

5

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

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

解决方案#1,用带有=符号的格式化日期字符串作为前缀并将其包裹在引号中,以便将其视为字符串。

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

+1

那么,如果我将日期更改为字符串,我无法正确地从最新到最旧排序(这可能是最终用户想要使用excel的原因)。 – 2013-04-30 12:49:15

+0

这就是缺点,它将解决方案#2作为您的选项 - 对其具有更多的好处,例如可以使用格式化(例如粗体标题行,冻结窗格,条件格式等) – 2013-04-30 12:54:54

+0

选项2可能是唯一的解。谢谢您的意见。 – 2013-04-30 13:03:50

1

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

我用http://phpexcel.codeplex.com/到某种程度的成功

的如果你只是输出CSV Excel稍后将进行格式化用户的默认设置,这可能是你想要的东西不同的打开它。

+0

我会看看这个。 – 2013-04-30 13:04:27

0

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

Excel将看到什么是由一个单一的直引号为文本rpeceded,这样可以存储您的日期/时间值"'02/18/2013 03:53:48 PM"

+0

是的,我知道这个和你的答案,但我不想在Excel中执行任何操作,只是希望它留在我有它的格式。显然这是不可能的。 – 2013-04-30 12:51:16

+0

对不起,我已经改变了我的答案符合你实际寻找的 – 2013-04-30 12:56:24