excel openxlsx:为什么无法将样式应用于整个图纸/范围?

aydmsdu9  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(208)

根据本文的文档和众多答案,您需要对单个行和列索引应用样式,并将其作为列表传递给addStyle。
这似乎是真实的许多其他excel库。根据openpyxl,样式需要应用到个别单元格作为文件格式的限制。
以这种方式进行格式化会使具有大量空样式单元格的任何excel电子表格的文件大小膨胀。同时,使用ctrl+A将样式应用于excel应用程序中的整个工作表可有效地执行此样式。
有人知道这是怎么回事吗?为什么不可能实现这种看似支持的行为?
我在尝试使用openxlsx将前景色应用于工作表中的所有单元格时遇到了这个问题。我阅读了其他答案,这些答案表明,作为xlsx的限制,样式必须应用于单个单元格。在注意到生成的工作簿和通过桌面应用程序生成的文件之间的文件大小差异后,我发现自己对所得到的答案产生了质疑。

ljo96ir5

ljo96ir51#

您可以指定样式,但您所使用的程式库必须支援。在openxlsx2 0.3.1版中,您可以像this一样指定样式:

library(openxlsx2)
# Create the colors. It looks like every colored row must start with a cell in the requested
# color otherwise the A column is empty for this row.
# Colored rows do not share this restriction. All we need is a single row in a style
wb <- wb_workbook() %>% 
  wb_add_worksheet() %>% 
  wb_add_fill(dims = "D1", color = wb_colour("orange")) %>% 
  wb_add_fill(dims = "A4:A6", color = wb_colour("blue"))

# get the styles 1 and 2 in our case
wb %>% wb_get_cell_style(dims = "D1")
#> [1] "1"
wb %>% wb_get_cell_style(dims = "A4")
#> [1] "2"

# apply style 1 (simply assign the xml string)
wb$worksheets[[1]]$cols_attr <- "<col min=\"4\" max=\"6\" width=\"8.83203125\" style=\"1\"/>"

# apply style 2 (extract, modify and insert) 
rows <- wb$worksheets[[1]]$sheet_data$row_attr
rows$customFormat[rows$r %in% c(4:6)] <- "1"
rows$s[rows$r %in% c(4:6)] <- "2"
wb$worksheets[[1]]$sheet_data$row_attr <- rows

# check the final result
wb$open()

相关问题