You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用openxlsx将数据写入带自定义解析名称的Excel多工作表

解决openxlsx生成自定义工作表名的多页Excel问题

因为机构Java环境限制,只能用openxlsx库处理Excel文件。目前通过以下代码读取txt文件生成数据框列表data_list,但列表元素默认命名为1、2、3:

file_list <- list.files(path = mypath, pattern = "*.txt")
# 读取数据到数据框列表
data_list <- lapply(file_list, read.delim,quote = "", header = FALSE, col.names = c("Count", "TaxID", "Organism Name"))

data_list结构示例:

> data_list
$`1`
  Count TaxID        Organism.Name
1     1   644 Aeromonas hydrophila

$`2`
   Count TaxID          Organism.Name
1 151263   624        Shigella sonnei
2  97868   644   Aeromonas hydrophila
3  91121  1639 Listeria monocytogenes
4   8352 43767     Rhodococcus hoagii

$`3`
  Count TaxID          Organism.Name
1 92975   644   Aeromonas hydrophila
2 16989   624        Shigella sonnei
3    35  1639 Listeria monocytogenes

遇到的问题:

  • 循环创建自定义名称工作表时,无法写入数据:
library(openxlsx)
wb <- createWorkbook()
for (i in seq_along(data_list)) {
  mysheetname <- strsplit(file_list[i], "_")[[1]][1:4]
  mysheetname <- paste(mysheetname, collapse = "_")
  addWorksheet(wb, sheetName = mysheetname)
}
saveWorkbook(wb, "plate2_organismAbundance.xlsx")
  • 用write.xlsx(data_list, file = "plate2_organismAbundance.xlsx")能写入数据,但工作表名是默认的1、2、3,不是解析后的自定义名称(比如"H-T14_Cond_1_T"这类)

方案一:循环中结合文件名解析与数据写入

在循环里创建工作表后,直接用writeData()把对应的数据框写入工作表:

library(openxlsx)
wb <- createWorkbook()
for (i in seq_along(data_list)) {
  # 解析生成自定义工作表名
  mysheetname <- strsplit(file_list[i], "_")[[1]][1:4]
  mysheetname <- paste(mysheetname, collapse = "_")
  # 添加工作表
  addWorksheet(wb, sheetName = mysheetname)
  # 将对应数据框写入工作表
  writeData(wb, sheet = mysheetname, x = data_list[[i]])
}
# 保存工作簿(overwrite参数用于覆盖已存在的同名文件)
saveWorkbook(wb, "plate2_organismAbundance.xlsx", overwrite = TRUE)

方案二:重命名data_list元素后用write.xlsx

先批量修改data_list的元素名称为解析后的文件名,再直接调用write.xlsx:

library(openxlsx)
# 生成所有自定义工作表名
sheet_names <- sapply(file_list, function(x) {
  paste(strsplit(x, "_")[[1]][1:4], collapse = "_")
})
# 重命名data_list的元素
names(data_list) <- sheet_names
# 写入Excel,此时工作表名会自动使用列表元素名称
write.xlsx(data_list, file = "plate2_organismAbundance.xlsx", overwrite = TRUE)

内容的提问来源于stack exchange,提问作者aminards

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 05:38:19