繁体   English   中英

使用deparse(substitute())将多个小对象导出到XLSX — sheetName问题

[英]Exporting multiple tibbles to XLSX — sheetName problem when using deparse(substitute())

我有15个要导出到单个XLSX工作簿的小标题,每个设置的sheetName与小标题对象的名称相同。 要导出单个小标题,这很好用:

library(xlsx)

    my_tibble1 %>% 
      write.xlsx("output_filename.xlsx", 
                 sheetName = "my_tibble1", 
                 append = TRUE)

但是,由于这些小标题足够多,因此将每个小标题全部写出来很费时间。 所以,我写了一个函数:

output_expediter <- function(df, output_filename) {
      write.xlsx(df, 
                 output_filename, 
                 sheetName = deparse(substitute(df)), 
                 append = TRUE)

此函数成功将小标题写入输出工作簿中的新工作表,但sheetName始终为单个句点(“。”)。

用于小标题的所有变量名都限制为小写字符和下划线,并且所有字符名的长度都不超过31个字符,因此我认为它们都不违反XLSX格式约定。 在R控制台中,运行:

deparse(substitute(my_tibble1))

如预期产生“ my_tibble1”。

为什么会这样? 除了输入每个工作表的名称以外,还有其他可能的解决方法吗?

一个选项是openxlsx

library(openxlsx)
library(tibble)
output_expediter <- function(df, output_filename) {
     nm1 <- deparse(substitute(df))
     wb <- createWorkbook()
     addWorksheet(wb, sheetName = nm1)
     writeData(wb, sheet= nm1, x = df)
     saveWorkbook(wb =wb, file = output_filename, overwrite = TRUE)
     }


file1 <- "hello.xlsx"
df1 <- tibble(col1 = 1:5, col2 = 6:10)
output_expediter(df1, file1)

-输出

在此处输入图片说明


如果我们需要写多个文件,

library(purrr)    
wb1 <- createWorkbook()
output_expediter <- function(df, wb, nm1, output_filename) {


     addWorksheet(wb, sheetName = nm1)
     writeData(wb, sheet= nm1, x = df)
     saveWorkbook(wb =wb, file = output_filename, overwrite = TRUE)
     }

lst1 <- lst(df1= df1, df2= df1)
iwalk(lst1, ~ output_expediter(.x, wb = wb1, .y, file))

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM