setDataFormatForType()是否适用于XLConnect中的日期?

时间:2013-11-08 18:20:53

标签: r apache-poi xlconnect

我最近在函数

上尝试了各种格式化参数
setDataFormatForType(wb, type=XLC$DATA_TYPE.DATETIME, format="d/m/yy")

例如format =“d / m / yy”,如上所示,除了许多其他之外。

然后是

setStyleAction(wb, XLC$"STYLE_ACTION.DATA_FORMAT_ONLY")

然后我写了一个工作表并保存了workook。 没有形式的格式调整似乎工作。 一旦我弄乱了setDataFormatForType命令中的任何格式,结果就是数字时间值显示在我稍后保存的Excel工作簿的日期列中 即2013年11月6日= 41584。 如果我不干扰任何DataFormats,那么标准(POSIX)格式会被保存,但当你在生成的Excel中查看它时,它会分配一些自定义“XLConnect格式”,因此它显示为“错误”:-( - 这意味着美国符号(领先的月份和日期),但我想要的是Eurepean(领先的一天,然后是月份)。

如果有人在XLConnect中设置这些DataFormats(尤其是“日期”)的经验,那么分享一些想法或智慧将受到高度赞赏。

谢谢,沃尔特

2 个答案:

答案 0 :(得分:4)

https://github.com/miraisolutions/xlconnect的github提供的XLConnect版本中有一个新的样式操作XLC$"STYLE_ACTION.DATATYPE"。 “数据类型”样式操作可用于使用可使用setCellStyleForType设置的特定单元格样式设置特定类型的单元格的样式。请参阅以下示例:

require(XLConnect)
wb = loadWorkbook("test.xlsx", create = TRUE)
setStyleAction(wb, XLC$"STYLE_ACTION.DATATYPE")
cs = createCellStyle(wb, name = "mystyle")
setDataFormat(cs, format = "d/m/yy")
setCellStyleForType(wb, style = cs, type = XLC$"DATA_TYPE.DATETIME")
data = data.frame(A = 1:10, B = Sys.time() + 1:10)
createSheet(wb, "data")
writeWorksheet(wb, data = data, sheet = "data")
saveWorkbook(wb)

答案 1 :(得分:2)

您需要有一个名为“Dates”的命名区域。我用这样的区域保存了template2.xslx文件的副本。对我有用的唯一想法是用format.Date函数写出来:

Dates=seq(from=as.Date("2001-01-01"), to=as.Date("2013-01-01"), by=365)
file.copy(system.file("demoFiles/template2.xlsx", 
                      package = "XLConnect"),
          "dataformat.xlsx", overwrite = TRUE)
wb <- loadWorkbook("dataformat.xlsx")
setDataFormatForType(wb, type = XLC$"DATA_TYPE.DATETIME", 
                     format = "dd/mm/yyyy")
setStyleAction(wb, XLC$"STYLE_ACTION.DATA_FORMAT_ONLY")
createName(wb, name = "Dates", formula = "mtcars!$A$1")
writeNamedRegion(wb, format(Dates, "%d.%m.%Y"), name = "Dates")
saveWorkbook(wb)