test_that("group columns", { # Grouping then setting widths updates hidden wb <- wb_workbook()$ add_worksheet("Sheet 1") wb$createCols("Sheet 1", 3) wb$group_cols("Sheet 1", 2:3) wb$set_col_widths("Sheet 1", 2, widths = "18", hidden = FALSE) exp <- c( "", "", "" ) got <- wb$worksheets[[1]]$cols_attr expect_equal(exp, got) # Setting column widths then grouping wb <- wb_workbook()$ add_worksheet("Sheet 1") wb$createCols("Sheet 1", 3) wb$ set_col_widths("Sheet 1", 2:3, widths = "18", hidden = FALSE)$ group_cols("Sheet 1", 1:2, collapsed = TRUE) exp <- c( "", "", "" ) got <- wb$worksheets[[1]]$cols_attr expect_equal(exp, got) }) test_that("group rows", { wb <- wb_workbook()$ add_worksheet("Sheet 1")$ add_data(x = cbind(rep(NA, 4)), na.strings = NULL, colNames = FALSE)$ group_rows("Sheet 1", 1:4) got <- wb$worksheets[[1]]$sheet_data$row_attr$outlineLevel expect_equal(got, c("1", "1", "1", "")) got <- wb$worksheets[[1]]$sheet_data$row_attr$r expect_equal(got, c("1", "2", "3", "4")) wb <- wb_workbook()$ add_worksheet("Sheet 1")$ add_data(x = cbind(rep(NA, 4)), na.strings = NULL, colNames = FALSE)$ group_rows("Sheet 1", 1:4, collapsed = TRUE) got <- wb$worksheets[[1]]$sheet_data$row_attr$collapsed expect_equal(got, c("1", "1", "1", "1")) got <- wb$worksheets[[1]]$sheet_data$row_attr$hidden expect_equal(got, c("1", "1", "1", "")) }) test_that("grouping levels", { # create matrix t1 <- AirPassengers t2 <- do.call(cbind, split(t1, cycle(t1))) dimnames(t2) <- dimnames(.preformat.ts(t1)) wb <- wb_workbook() wb$add_worksheet("AirPass") wb$add_data("AirPass", t2, row_names = TRUE) # lines used for grouping (here: species) grp_rows <- list( "1" = seq(2, 3), "2" = seq(4, 8), "3" = seq(9, 13) ) # lines used for grouping (here: quarter) grp_cols <- list( "1" = seq(2, 4), "2" = seq(5, 7), "3" = seq(8, 10), "4" = seq(11, 13) ) wb <- wb_workbook() wb$add_worksheet("AirPass") wb$add_data("AirPass", t2, row_names = TRUE) wb$createCols("AirPass", 13) wb$group_cols("AirPass", cols = grp_cols) wb$group_rows("AirPass", rows = grp_rows) exp <- c("", "1", "2", "3") got <- unique(wb$worksheets[[1]]$sheet_data$row_attr$outlineLevel) expect_equal(exp, got) exp <- c( "", "", "", "", "", "", "", "", "" ) got <- wb$worksheets[[1]]$cols_attr expect_equal(exp, got) }) test_that("ungroup columns", { # OutlineLevelCol is removed from SheetFormatPr when no # column groupings left wb <- wb_workbook() wb$add_worksheet("Sheet 1") wb$createCols("Sheet 1", 3) wb$set_col_widths("Sheet 1", 2, widths = "18", hidden = FALSE) wb$group_cols("Sheet 1", 1:3) wb$ungroup_cols("Sheet 1", 1:3) exp <- c( "", "", "" ) got <- wb$worksheets[[1]]$cols_attr expect_equal(exp, got) }) test_that("ungroup rows", { wb <- wb_workbook()$ add_worksheet("Sheet 1")$ add_data(x = cbind(rep(NA, 4)), na.strings = NULL, col_names = FALSE)$ group_rows("Sheet 1", 1:4)$ ungroup_rows("Sheet 1", 1:4) got <- wb$worksheets[[1]]$sheet_data$row_attr$outlineLevel expect_setequal(got, "") }) test_that("with outlinePr", { # create matrix t1 <- AirPassengers t2 <- do.call(cbind, split(t1, cycle(t1))) dimnames(t2) <- dimnames(.preformat.ts(t1)) wb <- wb_workbook() wb$add_worksheet("AirPass") wb$add_data("AirPass", t2, rowNames = TRUE) wb$worksheets[[1]]$sheetPr <- xml_node_create( "sheetPr", xml_children = c( xml_node_create( "outlinePr", xml_attributes = c( summaryBelow = "0", summaryRight = "0" ) ) )) # groups will always end on/show the last row. in the example 1950, 1955, and 1960 wb <- wb_group_rows(wb, "AirPass", 2:3, collapsed = TRUE) # group years < 1950 wb <- wb_group_rows(wb, "AirPass", 4:8, collapsed = TRUE) # group years 1951-1955 wb <- wb_group_rows(wb, "AirPass", 9:13) # group years 1956-1960 wb$createCols("AirPass", 13) wb <- wb_group_cols(wb, "AirPass", 2:4, collapsed = TRUE) wb <- wb_group_cols(wb, "AirPass", 5:7, collapsed = TRUE) wb <- wb_group_cols(wb, "AirPass", 8:10, collapsed = TRUE) wb <- wb_group_cols(wb, "AirPass", 11:13) exp <- c( "", "" ) got <- wb$worksheets[[1]]$cols_attr[2:3] expect_equal(exp, got) exp <- c("", "1") got <- wb$worksheets[[1]]$sheet_data$row_attr$outlineLevel[2:3] expect_equal(exp, got) ### with group levels grp_rows <- list( "1" = seq(2, 3), "2" = seq(4, 8), "3" = seq(9, 13) ) grp_cols <- list( "1" = seq(2, 4), "2" = seq(5, 7), "3" = seq(8, 10), "4" = seq(11, 13) ) wb <- wb_workbook() wb$add_worksheet("AirPass") wb$add_data("AirPass", t2, row_names = TRUE) wb$worksheets[[1]]$sheetPr <- xml_node_create( "sheetPr", xml_children = c( xml_node_create( "outlinePr", xml_attributes = c( summaryBelow = "0", summaryRight = "0" ) ) )) wb$createCols("AirPass", 13) wb$group_cols("AirPass", cols = grp_cols) wb$group_rows("AirPass", rows = grp_rows) exp <- c( "", "" ) got <- wb$worksheets[[1]]$cols_attr[2:3] expect_equal(exp, got) exp <- c("", "1") got <- wb$worksheets[[1]]$sheet_data$row_attr$outlineLevel[2:3] expect_equal(exp, got) }) test_that("hierarchical grouping works", { # create data testig <- data.frame( Var1 = c("A", "A", "A", "A", "A", "A", "A"), Var2 = c("B", "B", "B", "C", "C", "C", ""), Var3 = c("BA", "BB", "", "CA", "CB", "", ""), Var4 = c("BA", "BB", "", "CA", "CB", "", ""), Result = c(1, 2, 3, 4, 5, 9, 12), stringsAsFactors = FALSE ) wb <- wb_workbook()$ add_worksheet()$ add_data(x = testig) # group rows hierarchical grp_rows <- list( "1" = 2:8, "3" = list(2:4, 5:7) ) wb$group_rows(rows = grp_rows) wb$createCols(n = 5) # group cols hierarchical grp_cols <- list( "1" = 1:5, "3" = list(1:2, 3:4) ) wb$group_cols(cols = grp_cols) got <- wb$worksheets[[1]]$sheet_data$row_attr$outlineLevel exp <- c("", "3", "3", "1", "3", "3", "1", "") expect_equal(got, exp) exp <- c( "", "", "", "", "" ) expect_equal(wb$worksheets[[1]]$cols_attr, exp) })