Как разрешить фильтрацию по году, месяцу, дате в XLSX, сгенерированном openxlsx

Я начал генерировать файлы XLSX вместо CSV с помощью openxlsx. Однако я испытываю другое поведение в отношении фильтрации даты.

Я сгенерировал следующий фиктивный код:

library(openxlsx)

df <- data.frame(ID=c(1,2,3,4,5,6), Date=c("1900-01-12","2010-12-29","1934-03-17", "1989-09-19","1978-11-27","2010-01-13"))

write.csv(df, "dateTestCSV.csv")

# Create the workbook
wb = createWorkbook()

hs <- createStyle(fontColour = "#ffffff", fgFill = "#4F80BD",
                  halign = "center", valign = "center", textDecoration = "bold", 
                  border = "TopBottomLeftRight")

addWorksheet(wb=wb, sheetName = "Test", gridLines=T, zoom=70)

writeData(
  wb,     
  sheet = "Test",
  x = df,
  withFilter=T,
  borders="all",
  borderStyle="thin",
  headerStyle=hs
)       

setColWidths(wb, sheet = "Test", cols=1:ncol(df), widths = "auto")

openxlsx::saveWorkbook(wb, "dateTestXLSX.xlsx", overwrite=T)

Первый созданный файл, dateTestCSV.csv, представляет собой файл со значениями, разделенными запятыми. И выглядит это следующим образом:

Просмотр файла CSV

Если я добавлю фильтр в столбец Дата, он будет выглядеть следующим образом:

Столбец даты CSV с фильтром

Однако, когда я создаю файл XSLX с фильтрами, такой фильтр выглядит следующим образом:

Столбец даты XLSX с фильтром

Видно, что Excel фильтрует по абсолютным значениям и не группирует даты по годам, месяцам и/или дням.

Что я делаю неправильно?


person asuka    schedule 18.03.2019    source источник


Ответы (1)


Вам нужно внести 2 изменения в свой код, как показано ниже, и фильтры должны работать нормально:

df <- data.frame(ID=c(1,2,3,4,5,6), 
   Date=c("1900-01-12","2010-12-29","1934-03-17", "1989-09-19","1978-11-27","2010-01-13"),
   stringsAsFactors = F) # Ensure your dates are initially strings and not factors

# Actually convert the character dates to Date before writing them to excel
df$Date <- as.Date(df$Date) 
person Rohit    schedule 18.03.2019