【问题标题】:Opening a CSV file in excel changes my formats在 excel 中打开 CSV 文件会改变我的格式
【发布时间】:2013-04-24 09:06:48
【问题描述】:

我有一个 CSV 文件,其中有一个 DateTime 列,我使用 php 对其进行更改,以便它采用这种格式,02/18/2013 03:53:48 PM

但是当这个文件在excel中打开时,所有的格式都变成了这个格式, 2013 年 2 月 18 日 15:53

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

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

【问题讨论】:

    标签: php excel csv datetime-format


    【解决方案1】:

    如果您想控制最终 Excel 文件的格式,您需要将数据输出为该格式并使用 PHP Excel 库进行相应修改。我无法确切告诉您如何执行此操作,因为我不知道您可能决定使用哪个库。

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

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

    【讨论】:

    • 我会看看这个。
    【解决方案2】:

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

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

    解决方案#1,在格式化的日期字符串前面加上一个 = 符号并将其括在引号中,以便将其视为字符串。

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

    【讨论】:

    • 好吧,如果我将日期更改为一个字符串,我将无法正确地从最新到最旧进行排序。(这可能是最终用户想要使用 excel 的原因)。
    • 这就是缺点,它让解决方案 #2 成为您的选择 - 这样做还有其他好处,例如能够使用格式设置(例如粗体标题行、冻结窗格、条件格式等)
    • 那么选项 2 可能是唯一的解决方案。感谢您的意见。
    【解决方案3】:

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

    Excel 会将单引号所代表的任何内容视为文本,因此您可以将日期/时间值存储为 "'02/18/2013 03:53:48 PM"

    【讨论】:

    • 是的,我知道这一点,也知道你的答案,但我不想在 excel 中执行任何操作,只是希望它保持我的格式。显然这是不可能的。
    • 抱歉,我已根据您的实际需求更改了答案
    猜你喜欢
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多