UPDATE 2: Example that is producing problem.
Example Excel File: is a blank .xlsx with a sheet name Sheet1.
Example R Code:
library(chron) library(rJava) library(xlsxjars) library(xlsx) library(XLConnect) setwd("C:/") Day<-as.Date('2014-01-01') Data<-as.data.frame(rep(Day,35)) name<-paste("Example.xls") Master<-loadWorkbook(name, create=TRUE) writeWorksheet(object=Master, data=Data,sheet="Sheet1", startRow=2, startCol=1,header=FALSE) saveWorkbook(Master)
The numeric value in the data frame for “12/31/2013” is 16070. The last date is “3/25/2014” with a value of 16154.
This is expected. However, when I look at the numbers written to the sheet, “12/31/2013” is 41638.75 and should be 41639. “3/25/2014” is 41722.79 and should be 41723.
Am I missing something about how an R data frame interprets a whole date? Does the Java Routine subtract a certain fraction of a whole number?
I am attempting to export many data frames to different sheets of an .xlsx file. My data frame has date only data information in a data frame. (i.e. “2013-12-31” )
I use the following code to export it to my excel file.
Temp<-data name<-paste("Master.xlsx") Master<-loadWorkbook(name, create=TRUE) writeWorksheet(object=Master,data=Temp,sheet="Ft. Wayne",startRow = 2, startCol = 1, header=FALSE) saveWorkbook(Master)
When I open the .xlsx file, the date comes in as:
How do I get to to export with the format
And maintain “date” cell number formatting the.xlsx file?
FYI: If I change the format in the dataframe, it exports as a “general” value.
Reason for this behavior is that objects of class
Date are converted internally to
POSIXct and are assumed to represent a date at midnight UTC. US CST is UTC – 6 hours so that’s why you experience an offset. I would suggest you use
POSIXct directly. If you want to display dates without time components in Excel, you can use cell styles and data formats.
library(XLConnect) data = data.frame(Day = rep(as.POSIXct('2014-01-01'), 35)) wb = loadWorkbook("example.xls", create = TRUE) setStyleAction(wb, XLC$"STYLE_ACTION.DATATYPE") cs = createCellStyle(wb, name = "myDateStyle") setDataFormat(cs, format = "yyyy-mm-dd") setCellStyleForType(wb, style = cs, type = XLC$"DATA_TYPE.DATETIME") createSheet(wb, name = "test") writeWorksheet(wb, data = data, sheet = "test", startRow = 2, startCol = 1, header = FALSE) saveWorkbook(wb)
One thing I did that is a significantly less amount of code which might work for you, is converting your date column to a character before exporting it to Excel.
I am working with data in R and want to export it with the XLConnect package so what I did before exporting the data frame is simply change the date column from a date format to a character and it looks much cleaner upon opening in Excel.
Instead of getting this in Excel:
I get : “12/31/2013”