test_that("test return values for wb_save", {
tempFile <- temp_xlsx()
wb <- wb_add_worksheet(wb_workbook(), "name")
expect_identical(tempFile, wb_save(wb, tempFile)$path)
expect_error(wb_save(wb, tempFile), NA)
expect_error(wb_save(wb, tempFile, overwrite = FALSE))
expect_identical(tempFile, wb_save(wb, tempFile)$path)
file.remove(tempFile)
})
# regression test for a typo
test_that("regression test for #248", {
# Basic data frame
df <- data.frame(number = 1:3, percent = 4:6 / 100)
tempFile <- temp_xlsx()
# no formatting
expect_silent(write_xlsx(df, tempFile, overwrite = TRUE))
# Change column class to percentage
class(df$percent) <- "percentage"
expect_silent(write_xlsx(df, tempFile, overwrite = TRUE))
})
# test for hyperrefs
test_that("creating hyperlinks", {
# prepare a file
tempFile <- temp_xlsx()
sheet <- "test"
wb <- wb_add_worksheet(wb_workbook(), sheet)
img <- "D:/somepath/somepicture.png"
# warning: col and row provided, but not required
expect_warning(
linkString <- create_hyperlink(col = 1, row = 4,
text = "test.png", file = img))
linkString2 <- create_hyperlink(text = "test.png", file = img)
# col and row not needed
expect_equal(linkString, linkString2)
# write file without errors
write_formula(wb, sheet, x = linkString, startCol = 1, startRow = 1)
expect_silent(wb_save(wb, tempFile, overwrite = TRUE))
# TODO: add a check that the written xlsx file contains linkString
})
test_that("write_data2", {
# create a workbook and add some sheets
wb <- wb_workbook()
wb$add_worksheet("sheet1")
write_data2(wb, "sheet1", mtcars, colNames = TRUE, rowNames = TRUE)
wb$add_worksheet("sheet2")
write_data2(wb, "sheet2", cars, colNames = FALSE)
wb$add_worksheet("sheet3")
write_data2(wb, "sheet3", letters)
wb$add_worksheet("sheet4")
write_data2(wb, "sheet4", as.data.frame(Titanic), startRow = 2, startCol = 2)
file <- tempfile(fileext = ".xlsx")
wb_save(wb, file)
wb1 <- wb_load(file)
expect_equal(
mtcars,
wb_to_df(wb1, "sheet1", rowNames = TRUE),
ignore_attr = TRUE
)
expect_equal(cars, wb_to_df(wb1, "sheet2", colNames = FALSE), ignore_attr = TRUE)
expect_equal(
letters,
as.character(wb_to_df(wb1, "sheet3", colNames = FALSE))
)
expect_equal(
wb_to_df(wb1, "sheet4"),
as.data.frame(Titanic, stringsAsFactors = FALSE),
ignore_attr = TRUE
)
file.remove(file)
})
test_that("write xlsx", {
tmp <- temp_xlsx()
df <- data.frame(a = 1:26, b = letters)
expect_silent(write_xlsx(df, tmp, tabColour = "#4F81BD"))
expect_error(write_xlsx(df, tmp, asTable = "YES"))
expect_error(write_xlsx(df, tmp, sheetName = paste0(letters, letters, collapse = "")))
expect_error(write_xlsx(df, tmp, zoom = "FULL"))
expect_silent(write_xlsx(df, tmp, zoom = 200))
expect_silent(write_xlsx(x = list("S1" = df, "S2" = df), tmp, sheetName = c("Sheet1", "Sheet2")))
expect_silent(write_xlsx(x = list("S1" = df, "S2" = df), file = tmp))
expect_silent(write_xlsx(x = list("S1" = df, "S2" = df), tmp, tabColour = "#4F81BD"))
l <- list(letters)
names(l) <- paste0(letters, letters, collapse = "")
expect_warning(write_xlsx(l, tmp))
expect_error(write_xlsx(df, tmp, gridLines = "YES"))
expect_silent(write_xlsx(df, tmp, gridLines = FALSE))
expect_error(write_xlsx(df, tmp, overwrite = FALSE))
expect_error(write_xlsx(df, tmp, overwrite = "NO"))
expect_silent(write_xlsx(df, tmp, withFilter = FALSE))
expect_silent(write_xlsx(df, tmp, withFilter = TRUE))
expect_error(write_xlsx(df, tmp, withFilter = "NO"))
expect_silent(write_xlsx(df, tmp, startRow = 2))
expect_error(write_xlsx(df, tmp, startRow = -1))
expect_silent(write_xlsx(df, tmp, startCol = "A"))
expect_silent(write_xlsx(df, tmp, startCol = "2"))
expect_silent(write_xlsx(df, tmp, startCol = 2))
expect_error(write_xlsx(df, tmp, startCol = -1))
expect_error(write_xlsx(df, tmp, col.names = "NO"))
expect_silent(write_xlsx(df, tmp, col.names = TRUE))
expect_error(write_xlsx(df, tmp, colNames = "NO"))
expect_silent(write_xlsx(df, tmp, colNames = TRUE))
expect_error(write_xlsx(df, tmp, row.names = "NO"))
expect_silent(write_xlsx(df, tmp, row.names = TRUE))
expect_error(write_xlsx(df, tmp, rowNames = "NO"))
expect_silent(write_xlsx(df, tmp, rowNames = TRUE))
expect_silent(write_xlsx(df, tmp, colWidths = "auto"))
expect_silent(write_xlsx(list(df, df), tmp, firstActiveCol = 2, firstActiveRow = 2))
expect_silent(write_xlsx(list(df, df), tmp, firstCol = FALSE, firstRow = FALSE))
expect_silent(write_xlsx(list(df, df), tmp, firstCol = TRUE, firstRow = TRUE))
expect_silent(write_xlsx(df, tmp, asTable = TRUE, tableStyle = "TableStyleLight9"))
})
test_that("example", {
tmp <- temp_xlsx()
# write to working directory
expect_silent(write_xlsx(iris, file = tmp, colNames = TRUE))
expect_silent(
write_xlsx(iris,
file = tmp,
colNames = TRUE
)
)
## Lists elements are written to individual worksheets, using list names as sheet names if available
l <- list("IRIS" = iris, "MTCATS" = mtcars, matrix(runif(1000), ncol = 5))
write_xlsx(l, tmp, colWidths = c(NA, "auto", "auto"))
expect_silent(write_xlsx(l, tmp,
startCol = c(1, 2, 3), startRow = 2,
asTable = c(TRUE, TRUE, FALSE), withFilter = c(TRUE, FALSE, FALSE)
))
# specify column widths for multiple sheets
expect_silent(write_xlsx(l, tmp, colWidths = 20))
expect_silent(write_xlsx(l, tmp, colWidths = list(100, 200, 300)))
expect_silent(write_xlsx(l, tmp, colWidths = list(rep(10, 5), rep(8, 11), rep(5, 5))))
})
test_that("writing NA, NaN and Inf", {
tmp <- temp_xlsx()
wb <- wb_workbook()
x <- data.frame(x = c(NA, Inf, -Inf, NaN))
wb$add_worksheet("Test1")$add_data(x = x)$save(tmp)
# we wont get the same input back
exp <- c(NA_character_, "#NUM!", "#NUM!", "#VALUE!")
got <- unname(unlist(wb_to_df(tmp)))
expect_equal(exp, got)
wb$clone_worksheet(old = "Test1", new = "Clone1")$add_data(x = x)$save(tmp)
got <- unname(unlist(wb_to_df(tmp, "Clone1")))
expect_equal(exp, got)
# distinguish between "NA" and NA_character_
x <- data.frame(x = c(NA, "NA"))
wb$add_worksheet("Test2")$add_data(x = x)$save(tmp)
exp <- c(NA_character_, "NA")
got <- unname(unlist(wb_to_df(tmp, "Test2")))
expect_equal(exp, got)
wb$clone_worksheet(old = "Test2", new = "Clone2")$add_data(x = x)$save(tmp)
got <- unname(unlist(wb_to_df(tmp, "Clone2")))
expect_equal(exp, got)
})
test_that("writing NA, NaN and Inf", {
tmp <- temp_xlsx()
wb <- wb_workbook()
x <- data.frame(x = c(NA, Inf, -Inf, NaN))
wb$add_worksheet("Test1")$add_data(x = x, na.strings = NULL)$save(tmp)
wb$add_worksheet("Test2")$add_data_table(x = x, na.strings = "N/A")$save(tmp)
wb$add_worksheet("Test3")$add_data(x = x, na.strings = "N/A")$save(tmp)
exp <- c(NA, "s", "s", "s")
got <- unname(unlist(attr(wb_to_df(tmp, "Test1", keep_attributes = TRUE), "tt")))
expect_equal(exp, got)
exp <- c("N/A", "#NUM!", "#NUM!", "#VALUE!")
got <- unname(unlist(wb_to_df(tmp, "Test2", keep_attributes = TRUE)))
expect_equal(exp, got)
wb$clone_worksheet("Test1", "Clone1")$add_data(x = x, na.strings = NULL)$save(tmp)
wb$clone_worksheet("Test3", "Clone3")$add_data(x = x, na.strings = "N/A")$save(tmp)
exp <- c(NA, "s", "s", "s")
got <- unname(unlist(attr(wb_to_df(tmp, "Test1", keep_attributes = TRUE), "tt")))
expect_equal(exp, got)
exp <- c("N/A", "#NUM!", "#NUM!", "#VALUE!")
got <- unname(unlist(wb_to_df(tmp, "Test2")))
expect_equal(exp, got)
})
test_that("write cells without data", {
temp <- temp_xlsx()
tmp_dir <- temp_dir()
dat <- as.data.frame(matrix(NA, 2, 2))
wb <- wb_workbook()$
add_worksheet()$
add_data(x = dat, startRow = 2, startCol = 2, na.strings = NULL, colNames = FALSE)
wb$worksheets[[1]]$sheet_data$cc$c_t <- ""
# # created an empty canvas that can be styled
# wb$add_fill(dims = "B2:C3", color = wb_colour(hex = "FFFFFF00"))
# wb$add_border(dims = "B2:C3")
wb$save(temp)
unzip(temp, exdir = tmp_dir)
exp <- structure(
list(
r = c("B2", "C2", "B3", "C3"),
row_r = c("2", "2", "3", "3"),
c_r = c("B", "C", "B", "C"),
c_s = c("", "", "", ""),
c_t = c("", "", "", ""),
c_cm = c("", "", "", ""),
c_ph = c("", "", "", ""),
c_vm = c("", "", "", ""),
v = c("", "", "", ""),
f = c("", "", "", ""),
f_t = c("", "", "", ""),
f_ref = c("", "", "", ""),
f_ca = c("", "", "", ""),
f_si = c("", "", "", ""),
is = c("", "", "", ""),
typ = c("3", "3", "3", "3")
),
row.names = c(NA, 4L),
class = "data.frame")
got <- wb$worksheets[[1]]$sheet_data$cc
expect_equal(exp, got)
sheet <- paste0(tmp_dir, "/xl/worksheets/sheet1.xml")
exp <- "|
"
got <- xml_node(sheet, "worksheet", "sheetData")
expect_equal(exp, got)
})
test_that("write_xlsx with na.strings", {
df <- data.frame(
num = c(1, -99, 3, NA_real_),
char = c("hello", "99", "3", NA_character_)
)
test <- temp_xlsx()
write_xlsx(df, file = test)
exp <- df
got <- read_xlsx(test)
expect_equal(exp, got, ignore_attr = TRUE)
write_xlsx(df, file = test, na.strings = "N/A")
got <- read_xlsx(test, na.strings = "N/A")
expect_equal(exp, got, ignore_attr = TRUE)
exp$num[exp$num == -99] <- NA
got <- read_xlsx(test, na.strings = "N/A", na.numbers = -99)
expect_equal(exp, got, ignore_attr = TRUE)
})
test_that("write & load file with chartsheet", {
fl <- testfile_path("mtcars_chart.xlsx")
wb <- wb_load(fl)
wb$worksheets[[1]]$sheetPr <- xml_node_create(
"sheetPr",
xml_children = xml_node_create(
"tabColor",
xml_attributes = c(rgb = "FF00FF00")))
temp <- temp_xlsx()
expect_silent(wb$save(temp))
expect_silent(wb2 <- wb_load(temp))
})
test_that("escaping of inlinestrings works", {
temp <- temp_xlsx()
wb <- wb_workbook()$
add_worksheet("Test")$
add_data(dims = "A1", x = "A & B")$
save(temp)
exp <- "A & B"
got <- wb_to_df(wb, colNames = FALSE)$A
expect_equal(exp, got)
got <- wb_to_df(temp, colNames = FALSE)$A
expect_equal(exp, got)
wb2 <- wb_load(temp)
got <- wb_to_df(wb2, colNames = FALSE)$A
expect_equal(exp, got)
})
test_that("write_xlsx() works", {
tmp <- temp_xlsx()
write_xlsx(mtcars, tmp, sheet_name = "test")
exp <- c(test = "test")
got <- wb_load(tmp)$get_sheet_names()
expect_equal(exp, got)
})
test_that("write_xlsx() freezing rows works", {
tmp <- temp_xlsx()
wb <- write_xlsx(list(mtcars, mtcars), tmp, firstRow = TRUE, firstCol = TRUE, tab_color = wb_color("green"))
# tabColor
exp <- c(
"",
""
)
got <- c(
wb$worksheets[[1]]$sheetPr,
wb$worksheets[[2]]$sheetPr
)
expect_equal(exp, got)
# firstCol/firstRow
exp <- c(
"",
""
)
got <- c(
wb$worksheets[[1]]$freezePane,
wb$worksheets[[2]]$freezePane
)
expect_equal(exp, got)
wb <- write_xlsx(list(mtcars, mtcars), tmp, firstActiveRow = 4, firstActiveCol = 3)
# firstActiveCol/firstActiveRow
exp <- c(
"",
""
)
got <- c(
wb$worksheets[[1]]$freezePane,
wb$worksheets[[2]]$freezePane
)
expect_equal(exp, got)
})
test_that("write_xlsx works with colour", {
tmp <- temp_xlsx()
wb <- write_xlsx(mtcars, tmp, tabColour = "green")
exp <- ""
got <- wb$worksheets[[1]]$sheetPr
expect_equal(exp, got)
})