在R中将多个表导出到xlsx

问题描述 投票:0回答:1

我正在尝试将一组表格导出到 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 ) }

如果有任何不清楚的地方,我们深表歉意

r export openxlsx
1个回答
0
投票

下次请提供一些样本数据。

您可以在每个代码块中包含一个名为

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 文件:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.