R / openxlsx / 在 Excel 文件中查找第一个非空单元格
R / openxlsx / Finding the first non-empty cell in Excel file
我正在尝试将数据从 R 写入现有 Excel 文件,同时保留格式。我能够按照这个问题的答案 (Write from R into template in excel while preserving formatting) 这样做,除了我的文件在开头包含空列,所以我不能只在单元格 A1 中开始写入数据。
作为解决方案,我希望能够找到第一个非空单元格,然后从那里开始写作。如果我 运行 read.xlsx(file="myfile.xlsx")
使用 openxlsx
包,空列和行会自动删除,只剩下数据,所以这对我不起作用。
所以我想我会首先使用 wb <- loadWorkbook("file.xlsx")
加载工作表,这样我就可以访问 getStyles(wb)
(有效)。但是,随后的命令 getTables
returns character(0)
和 wb$tables
returns NULL
。我想不通这是为什么?这些变量会告诉我第一个非空单元格,我说得对吗?
我尝试直接在 Excel 文件中手动删除数据前面的空列和行,但这并没有改变。我走在正确的道路上还是有不同的解决方案?
根据 Stéphane Laurent 的建议,包 tidyxl
提供了完美的解决方案。
例如,我现在可以在 Excel 文件中搜索字符值,例如我感兴趣的变量名称("Item"、"Score" 和 "Mean",对应于 data.frame
的 names()
我想写入我的 Excel 文件):
require(tidyxl)
colnames <- c("Item","Score","Mean")
excelfile <- "FormattedSheet.xlsx"
x <- xlsx_cells(excelfile)
# Find all cells with character values: return their address (i.e., Cell) and character (i.e., Value)
chars <- x[x$data_type == "character", c("address", "character")]
starting.positions <- unlist(
chars[which(chars$character %in% colnames), "address"]
)
# returns: c(C6, D6, E6)
我正在尝试将数据从 R 写入现有 Excel 文件,同时保留格式。我能够按照这个问题的答案 (Write from R into template in excel while preserving formatting) 这样做,除了我的文件在开头包含空列,所以我不能只在单元格 A1 中开始写入数据。
作为解决方案,我希望能够找到第一个非空单元格,然后从那里开始写作。如果我 运行 read.xlsx(file="myfile.xlsx")
使用 openxlsx
包,空列和行会自动删除,只剩下数据,所以这对我不起作用。
所以我想我会首先使用 wb <- loadWorkbook("file.xlsx")
加载工作表,这样我就可以访问 getStyles(wb)
(有效)。但是,随后的命令 getTables
returns character(0)
和 wb$tables
returns NULL
。我想不通这是为什么?这些变量会告诉我第一个非空单元格,我说得对吗?
我尝试直接在 Excel 文件中手动删除数据前面的空列和行,但这并没有改变。我走在正确的道路上还是有不同的解决方案?
根据 Stéphane Laurent 的建议,包 tidyxl
提供了完美的解决方案。
例如,我现在可以在 Excel 文件中搜索字符值,例如我感兴趣的变量名称("Item"、"Score" 和 "Mean",对应于 data.frame
的 names()
我想写入我的 Excel 文件):
require(tidyxl)
colnames <- c("Item","Score","Mean")
excelfile <- "FormattedSheet.xlsx"
x <- xlsx_cells(excelfile)
# Find all cells with character values: return their address (i.e., Cell) and character (i.e., Value)
chars <- x[x$data_type == "character", c("address", "character")]
starting.positions <- unlist(
chars[which(chars$character %in% colnames), "address"]
)
# returns: c(C6, D6, E6)