C#到Excel设置自定义date显示和值
给定某个date,我想设置一个DateTime对象的单元格的值 ,但没有“时间”信息。 例如,今天的价值将只是“29/06/2012”,而不是“2012年6月29日16:54:36” 。
关于展览,今天的date,我希望它是这样写的(这是法语,我不知道它是如何用英语): “29 juin”而不是“29/06/2012” 。
我怎样才能做到这一点?
编辑 :我只是看看显示格式我需要在Excel中,它是“jmmmmmm”(“ddmmmm”在C#中)。 但是,单元格虽然取值,但不包含格式。 这是一段代码:
cell.Value = string.Format("{0:dd/MM/yyyy}", DateTime.Now); cell.NumberFormat = "jj mmmm";
我也试过:
cell.Value = DateTime.Now; cell.NumberFormat = "jj mmmm";
在这种情况下,显示格式正常,但单元格值包含时间信息,这是不正确的。
只需将DateTime.Now
更改为DateTime.Date
,时间将被清零
看到这个 StackOverflow的问题,我的答案。 它将允许你直接在excel表格中设置单元格的自定义格式,从那里你只需要研究不同的date格式string是什么。
这只有在你使用Excel自动化时才有帮助。
否则,格式化DateTime.ToString输出会更好。 再次研究不同的DateStringFormatting选项将对您有所帮助。
最终选项。 直接更改模板,不使用自动化。 转到单元格并手动更改单元格格式,直到显示器成为您想要的。 这不会改变实际的数据,只是它的显示。
UPDATE
有两个具体的问题需要处理。
问题一是确保excel认识到这是一个date。 为此,请确保date数据本身的格式为en-US。 为什么,因为微软是愚蠢的,不承认国际date格式。
问题二是单元格的显示格式。 对于月份的三个字母的缩写,使用stringd mmm
。 如果您想要整个月份名称,请使用d-mmmm
。
我正在testing,并指出,Excel拒绝把29/06/2012 16:54:36作为一个date,但它接受2012年6月29日16:54:36没有问题。 正如我所说,微软是愚蠢的。
DateTime有一个名为ToShortDateString的方法
// Displays Fri 29 Aug Console.WriteLine(date1.ToString("ddd d MMM", CultureInfo.CreateSpecificCulture("fr-FR")));
这将是一个很好的资源: MSDN自定义date和时间格式string