首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xlsx包的write.xlsx格式日期

xlsx包的write.xlsx格式日期
EN

Stack Overflow用户
提问于 2014-07-19 13:45:07
回答 1查看 7.1K关注 0票数 7

我试图使用xlsx包将带有日期列的数据框架导出到Excel。write.xlsx()的帮助文件说明了格式化日期列的方法。我试图在下面遵循该方法,但结果的Excel文件没有显示正确的格式。我可以手动将Excel中的单元格格式更改为自定义日期,但这是一个额外的步骤,使其不可复制。

代码语言:javascript
复制
library(lubridate)
library(xlsx)
dat <- data.frame(dates=c("2014-07-16 15:03:16", "2014-07-16 14:52:03", "2014-07-16 16:50:38", "2014-07-12 00:00:00", "2014-07-12 00:00:00"))
dat$dates <- ymd_hms(dat$dates)

wb <- createWorkbook()
saveWorkbook(wb, "output.xlsx")
oldOpt <- options()
options(xlsx.date.format="yyyy-mm-dd HH:mm:ss") # change date format
write.xlsx(dat, 
           "output.xlsx",
           sheetName="output")
options(oldOpt)      # revert back to defaults

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-19 14:30:40

由于dates列类型为POSIXct,所以应该使用xlsx.datetime.format而不是xlsx.date.format (仅对Date类型的列有效)。

但是,由于xlsx包中存在类检查错误,它仍然无法工作。实际上,在查看代码时,它执行以下检查:

代码语言:javascript
复制
indDT <- which(sapply(y, class) == "POSIXct")

这是失败的,因为POSIXct也继承了POSIXt。也许正确的检查应该是:

代码语言:javascript
复制
indDT <- which(sapply(y, FUN=function(x) any(class(x) == "POSIXct")))

无论如何,你可以通过这样做来解决这个问题:

代码语言:javascript
复制
dat$dates <- ymd_hms(dat$dates)
class(dat$dates) <- "POSIXct"

当然,设置xlsx.datetime.format而不是xlsx.date.format

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24841068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档