我最近在函数
上尝试了各种格式化参数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(尤其是“日期”)的经验,那么分享一些想法或智慧将受到高度赞赏。
谢谢,沃尔特
答案 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)