diff --git a/NEWS.md b/NEWS.md index e12568570..82df94bb6 100644 --- a/NEWS.md +++ b/NEWS.md @@ -5,6 +5,12 @@ * Helper to read sensitivity labels from files and apply them to workbooks. [983](https://github.com/JanMarvin/openxlsx2/pull/983) +## Fixes + +* Allow writing data frames with zero rows. [987](https://github.com/JanMarvin/openxlsx2/pull/987) + + +*************************************************************************** # openxlsx2 1.5 diff --git a/R/write.R b/R/write.R index cb6edfff0..0104c95c3 100644 --- a/R/write.R +++ b/R/write.R @@ -277,6 +277,8 @@ write_data2 <- function( dc <- c(c("_rowNames_" = openxlsx2_celltype[["character"]]), dc) } + if (nrow(data) == 0) applyCellStyle <- FALSE + # add colnames if (colNames) { # its quicker to convert data to character and append the colnames diff --git a/inst/WORDLIST b/inst/WORDLIST index 00f06c39a..87acacdee 100644 --- a/inst/WORDLIST +++ b/inst/WORDLIST @@ -24,6 +24,7 @@ JOHAB Kaku LastModifiedBy Libreoffice +MIP OEM ORCID Openoffice @@ -34,6 +35,7 @@ RGBA RedToBlack RowStripe RowSubheading +Rprofile SHIFTJIS STDEV STDEVP @@ -159,6 +161,7 @@ mediumDashDot mediumDashed mediumGray minAxisType +mips mmm mmss mschart @@ -203,6 +206,7 @@ queryTables reimported rels rgb +richData rightToLeft rowColHeaders rowNames diff --git a/tests/testthat/test-write.R b/tests/testthat/test-write.R index 244cffbab..4d82766af 100644 --- a/tests/testthat/test-write.R +++ b/tests/testthat/test-write.R @@ -959,3 +959,30 @@ test_that("dims size warnings work", { ) }) + +test_that("writing zero row data frames works", { + + # write an empty data frame + dat <- data.frame() + expect_silent(wb <- wb_workbook()$add_worksheet()$add_data(x = dat)) + + exp <- NULL + expect_message(got <- wb_to_df(wb), "sheet found, but contains no data") + expect_equal(exp, got) + + # write a data frame containing an empty date vector + dat <- data.frame(date = base::as.Date(NULL)) + expect_silent(wb <- wb_workbook()$add_worksheet()$add_data(x = dat)) + + exp <- "date" + got <- names(wb_to_df(wb)) + expect_equal(exp, got) + + # try the same with write_xlsx() + expect_silent(wb <- write_xlsx(x = dat)) + + exp <- "date" + got <- names(wb_to_df(wb)) + expect_equal(exp, got) + +})