test_that("reading xlsb works", { skip_online_checks() xlsxFile <- testfile_path("openxlsx2_example.xlsb") wb <- wb_load(xlsxFile) df_xlsb <- wb_to_df(wb) xlsx <- system.file("extdata", "openxlsx2_example.xlsx", package = "openxlsx2") df_xlsx <- wb_to_df(xlsx) expect_equal(df_xlsb, df_xlsx) df_xlsb <- wb_to_df(wb, show_formula = TRUE) df_xlsx <- wb_to_df(xlsx, show_formula = TRUE) expect_equal(df_xlsb, df_xlsx) }) test_that("reading complex xlsb works", { skip_online_checks() xlsxFile <- testfile_path("hyperlink.xlsb") expect_message( # larger workbook capture_output( # unhandled conditions wb <- wb_load(xlsxFile) ), "importing larger workbook. please wait a moment" ) # chartsheets exp <- c(TRUE, FALSE, FALSE, FALSE) got <- wb$is_chartsheet expect_equal(exp, got) # named regions exp <- c("Numbers", "characters", "_xlnm._FilterDatabase") got <- unique(wb$get_named_regions()$name) expect_equal(exp, got) # tables exp <- "Table1" got <- wb$get_tables(sheet = 2)$tab_name expect_equal(exp, got) # comments exp <- c( "Jan Marvin Garbuszus:", "\n", "A new note!" ) got <- wb$comments[[1]][[1]]$comment expect_equal(exp, got) # hyperlinks exp <- "Sheet1!E3" got <- xml_attr(wb$worksheets[[2]]$hyperlinks[[1]], "hyperlink")[[1]][["location"]] expect_equal(exp, got) }) test_that("worksheets with real world formulas", { skip_online_checks() xlsxFile <- testfile_path("nhs-core-standards-for-eprr-v6.1.xlsb") expect_message( # larger workbook capture_output( # unhandled conditions suppressWarnings(wb <- wb_load(xlsxFile)) ), "importing larger workbook. please wait a moment" ) exp <- c("Control", "EPRR Core Standards", "Deep dive", "Interoperable capabilities ", "Lookups", "Calculations") got <- wb$get_sheet_names() %>% names() expect_equal(exp, got) xlsxFile <- testfile_path("array_fml.xlsb") wb <- wb_load(xlsxFile) exp <- structure( list( A = c("1", "2", NA, "6", "#VALUE!"), B = c("2", "3", NA, "a", NA), C = c(3, 4, NA, NA, NA), D = c(4, 5, NA, NA, NA), E = c(5, 6, NA, NA, NA) ), row.names = c(NA, 5L), class = "data.frame" ) got <- wb_to_df(wb, col_names = FALSE) expect_equal(exp, got) exp <- structure( list( A = c("1", "A1+1", NA, "SUM({\"1\",\"2\",\"3\"})", "SUMIFS(A1:A2,'[1]foo'!B2:B3,{\"A\"})"), B = structure(c("A1+1", "B1+1", NA, "{\"a\"}", NA), class = c("character", "formula")), C = structure(c("B1+1", "C1+1", NA, NA, NA), class = c("character", "formula")), D = structure(c("C1+1", "D1+1", NA, NA, NA), class = c("character", "formula")), E = structure(c("D1+1", "E1+1", NA, NA, NA), class = c("character", "formula")) ), row.names = c(NA, 5L), class = "data.frame" ) got <- wb_to_df(wb, col_names = FALSE, show_formula = TRUE) expect_equal(exp, got) xlsxFile <- testfile_path("match_escape.xlsb") wb <- wb_load(xlsxFile) exp <- structure( "IF(ISNA(MATCH(G681,{\"Annual\",\"\"\"5\"\"\",\"\"\"1+4\"\"\"},0)),1,MATCH(G681,{\"Annual\",\"\"\"5\"\"\",\"\"\"1+4\"\"\"},0))", class = c("character", "formula") ) got <- wb_to_df(wb, col_names = FALSE, show_formula = TRUE)$A expect_equal(exp, got) }) test_that("xlsb formulas", { fl <- testfile_path("formula_checks.xlsb") wb <- wb_load(fl) exp <- c("", "D2:E2", "A1,B1", "A1 A2", "1+1", "1-1", "1*1", "1/1", "1%", "1^1", "1=1", "1>1", "1>=1", "1<1", "1<=1", "1<>1", "+A3", "-R2", "(1)", "SUM(1, )", "1", "2.500000", "\"a\"", "\"A\"&\"B\"", "Sheet2!B2", "'[1]Sheet3'!A2") got <- unique(wb$worksheets[[1]]$sheet_data$cc$f) expect_equal(exp, got) fl <- testfile_path("formula_checks.xlsx") xl <- wb_load(fl) expect_equal( xl$worksheets[[2]]$sheet_data$cc$f, wb$worksheets[[2]]$sheet_data$cc$f ) }) test_that("shared formulas are detected correctly", { xlsb <- testfile_path("formula_checks.xlsb") xlsx <- testfile_path("formula_checks.xlsx") wbb <- wb_load(xlsb) wbx <- wb_load(xlsx) expect_equal( wbb$worksheets[[4]]$sheet_data$cc, wbx$worksheets[[4]]$sheet_data$cc ) })