我正在尝试将一组表格导出到 Excel 工作表。但是,我使用 for 循环来创建不同的工作表,这意味着在某些情况下并非所有表都存在。有谁知道如何导出它,以便当表格存在时,它们一个接一个地打印在 Excel 工作表上?
目前,这就是我的代码,但问题是,如果例如
pnt_h
、mid_h
、lc3_h
不存在,那么 rc3_h
会打印在第 27 行,这会在第 27 行留下很大的空间第 1 行,其中打印 res_h
。理想情况下,我会从第 1 行打印 res_h
,然后将 rc3_h
打印在 res_h
下面 1 行,具体取决于 res_h
有多少行(请注意,对于每次迭代,res_h
将具有不同的行数)循环)。
addWorksheet(OUT, "Summary")
writeData(OUT, sheet = "Summary", x = home_matchups, startCol = 1, startRow = 1)
if(exists("res_h")){ writeData(OUT, sheet = "Summary", x = res_h, startCol = 1, startRow = 1) }
if(exists("pnt_h")){ writeData(OUT, sheet = "Summary", x = pnt_h, startCol = 1, startRow = 5) }
if(exists("mid_h")){ writeData(OUT, sheet = "Summary", x = mid_h, startCol = 1, startRow = 9) }
if(exists("lc3_h")){ writeData(OUT, sheet = "Summary", x = lc3_h, startCol = 1, startRow = 13) }
if(exists("rc3_h")){ writeData(OUT, sheet = "Summary", x = rc3_h, startCol = 1, startRow = 27) }
注意我已经简化了这段代码,因此更容易阅读,因此上面的内容不会显得好像我正在使用循环,但我确实在使用循环。 此外,由于不能保证“res_h”存在,我无法将以下内容作为第二行执行
if(exists("pnt_h")){ writeData(OUT, sheet = "Summary", x = pnt_h, startCol = 1, startRow = nrow(res_h) + 3 ) }
如果有任何不清楚的地方,我们深表歉意
下次请提供一些样本数据。
您可以在每个代码块中包含一个名为
start_row
的参数,如果表存在,该参数就会更新。然后将其用于以下 startRow
参数。例如,
library(openxlsx)
OUT <- createWorkbook()
addWorksheet(OUT, "Summary")
writeData(OUT, sheet = "Summary", x=NULL, startCol = 1, startRow = 1)
set.seed(1)
res_h <- data.frame(matrix(rnorm(20), 4, 5))
mid_h <- data.frame(matrix(rnorm(20), 4, 5))
if(exists("res_h")){
writeData(OUT, sheet = "Summary", x = res_h, startCol = 1, startRow = 1)
start_row <- nrow(res_h) + 1
}
if(exists("pnt_h")){
writeData(OUT, sheet = "Summary", x = pnt_h, startCol = 1, startRow = start_row)
start_row <- start_row + nrow(pnt_h) + 1
}
if(exists("mid_h")){
writeData(OUT, sheet = "Summary", x = mid_h, startCol = 1, startRow = start_row)
start_row <- start_row + nrow(mid_h) + 1
}
saveWorkbook(OUT, "writeDataExample.xlsx", overwrite = TRUE)
将创建以下 Excel 文件: