【问题标题】:C# to Excel set custom date display and valueC# 到 Excel 设置自定义日期显示和值
【发布时间】:2012-07-01 02:51:08
【问题描述】:

给定某个日期,我想用 DateTime 对象设置单元格的 ,但没有“时间”信息。例如,今天的值只是 "29/06/2012" 而不是 "29/06/2012 16:54:36"

关于显示,对于今天的日期,我希望它是这样写的(它是法文,我不知道它会是英文):“29 juin”而不是“2012 年 6 月 29 日”

我怎样才能做到这一点?

编辑 :我只是看了一下我在 Excel 中需要的显示格式,它是“jj mmmm”(C# 中的“dd mmmm”)。但是单元格虽然采用值,但不采用格式。下面是一段代码:

                 cell.Value = string.Format("{0:dd/MM/yyyy}", DateTime.Now);
                 cell.NumberFormat = "jj mmmm";

我也试过了:

                 cell.Value = DateTime.Now;
                 cell.NumberFormat = "jj mmmm";

在这种情况下,显示格式可以,但是单元格值包含时间信息,这是不可以的。

【问题讨论】:

  • 那么,您想将某个单元格设置为某一天,并将显示格式设置为“dd MMM”或“dd MMMM”,文化为“fr-FR”?
  • @Jodrell 简单来说,我希望值是“dd/MM/YYYY”,在法国文化中显示为“dd MMMM”(甚至是英语,这可能会有所帮助)跨度>
  • @GianT971 - 只需将“DateTime.Now”更改为“DateTime.Date”,时间就会归零。
  • @ChrisGessler 将此作为答案发布
  • @GianT971 - 帮我(我们)一个忙。下次当您提出问题时,请在您的问题中显示您的代码。我的印象是您想摆脱所有 DateTime 对象附带的“00:00:00”时间部分,并且只能通过格式化来删除。

标签: c# excel datetime date datetime-format


【解决方案1】:

请参阅this StackOverflow 问题和我的回答。它将允许您直接在 Excel 工作表中设置单元格的自定义格式,从那里您只需要研究不同的日期格式字符串是什么。

这仅在您使用 excel 自动化时才有用。

否则,格式化 DateTime.ToString 输出会更好。再一次,研究不同的 DateStringFormatting 选项将对您有所帮助。

最后的选择。直接更改模板,不使用自动化。转到单元格并手动更改单元格格式,直到显示是您想要的。这不会改变实际数据,只会改变它的显示。

更新

有两个具体问题需要处理。

问题之一是确保 excel 识别这是一个日期。为此,请确保日期数据本身采用 en-US 格式。为什么,因为 Microsoft 很笨,而且不识别国际日期格式。

问题二是单元格的显示格式。对于月份的 3 个字母缩写,请使用字符串 d mmm。如果您想要完整的月份名称,请使用d-mmmm

我正在测试并注意到 excel 拒绝将 29/06/2012 16:54:36 视为日期,但它接受了 06/29/2012 16:54:36 没有问题。正如我所说,微软是愚蠢的。

【讨论】:

  • 我从一开始就一直在修改单元格的 NumberFormat 属性,但似乎不起作用。我不知道为什么
  • Excel 很傻,不会轻易识别国际日期格式。 Windows,如果您的区域设置正确,可能会。
  • 确实,当 Excel 将数据识别为日期时,NumberFormat 工作并且显示正常(为此 +1)。但是我怎样才能摆脱时间信息呢?这实际上是主要问题
  • 好吧,如果你想要那里的数据,但不显示... NumberFormat 实际上是正确使用的字段。我在那里的答案中列出了格式。如果这对您不起作用...然后检查问题 1,确保 excel 将其识别为日期。
【解决方案2】:

只需将DateTime.Now 更改为DateTime.Date,时间就会归零

【讨论】:

    【解决方案3】:

    DateTime 有一个名为 ToShortDateString 的方法

    【讨论】:

    • 我知道,但这仅适用于单元格的值。我还需要自定义的显示格式
    【解决方案4】:
    // Displays Fri 29 Aug
    Console.WriteLine(date1.ToString("ddd d MMM", CultureInfo.CreateSpecificCulture("fr-FR")));
    

    这对你来说是一个很好的资源:@​​987654321@

    【讨论】:

    • 感谢链接,但问题不是日期时间格式,而是Excel中单元格的值和格式之间的差异
    • @GianT971 明白了,在我看来就像手动更改 excel 文件中列的模板然后(?)祝你好运,对不起 Excel 是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多