【发布时间】:2021-05-20 16:19:38
【问题描述】:
我想使用循环写入多张 Excel 表格。代码如下。
first_column <- c("value_1", "value_2")
second_column <- c("ve_1", "ve_2")
fir_column <- c("1", "2")
se_column <- c("a1", "va2")
df <- data.frame(first_column, second_column) #sheet A of df.xlsx
df1 <- data.frame(fir_column, se_column) #sheet B of df.xlsx
sheets<-openxlsx::getSheetNames('./Out/df.xlsx')
for(i in 1:length(sheets)){
df<-read_excel('./Out/df.xlsx',sheet = sheets[i])
write.xlsx(df, './Out/df1.xlsx', sheetName = i, append=TRUE)
}
只生成最后一张纸。
【问题讨论】:
-
这对我有用,除了
sheetName必须是字符串(例如as.character(i))。添加一些逻辑以删除输出的 Excel 工作簿(如果它已经存在(否则重写将引发错误)或在第一次迭代时使用append = F)可能是个好主意。 -
即使在添加
as.character(i)并删除附加后,仅生成最后一张表 -
你的
xlsx的包版本是多少?正如我提到的,这对我有用,但是您发布的代码不应运行,因为i是数字,sheetName必须是字符。因此,您发布的代码会引发错误。您是否尝试在运行此代码之前清除环境? -
xlsx package正在抛出一些 javaerror,所以我使用的是 openxlsx - 4.2.3 。 @LMc -
javaerror 是因为
i是数字或df是tibble。尝试使用xlsx::write.xlsx和参数sheetName = as.character(i)。此外,read_excel返回一个tibble。因此,如果您在使用xlsx时仍然遇到错误,请尝试使用as.data.frame(df)。openxlsx::write.xlsx没有append参数,并且具有用于编写多张工作表的不同语法。