【发布时间】:2019-03-27 17:58:29
【问题描述】:
我试图创建一个函数,它接受两个文件,比如 x 和 y,并返回一个 xls 书,该函数将创建许多具有从 x 文件中选择的名称的工作表,x 看起来像这样
sol
Orden
1 Z169
2 Z170
3 Z175
现在,创建工作表后,它将写入从第二个(y)文件中获取的数据,y 文件如下所示
base
Orden Dependencia
1 Z169 TRæNSITO
2 Z170 TRæNSITO
3 Z171 TRæNSITO
4 Z172 TRæNSITO
5 Z173 POLICIA
6 Z174 TRæNSITO
7 Z175 POLICIA
据我所知,我有这个代码(它是最小的、完整的、可验证的形式,还是不是?)
autoform <- function(x,y){
## create wordbook
wb <- createWorkbook()
## create work sheets
for (i in 1:length(x[,1])){
if(isTRUE(x[i,1] %in% y[,1])){
addWorksheet(wb, x[i,1])
##editing the sheet
writeData(wb, x[i,1], y[i,2], startCol = 8, startRow = 6,rowNames = TRUE )
}
}
## save file
saveWorkbook(wb, "marth/javi/supertest.xlsx", overwrite = TRUE)
}
当我尝试使用 autoform(x,y) 时出现此错误:
> autoform(sol, base)
Error in nchar(sheetName) : 'nchar()' requires a character vector
我希望有人能解释一下为什么这个错误以及如何解决它,请大家阅读
【问题讨论】:
-
看起来您在 writeData 函数调用中缺少工作表名称,所以可能是
writedata(wb, "sheetname", x[i,1]...)。请参阅rdocumentation.org/packages/openxlsx/versions/4.1.0/topics/… 中的示例 -
但是是for循环,名字应该是从x文件中选择的,我自己解释了吗?
-
我试试这一行而不是旧的 writedata "writeData(wb, sheet=x[i,1], y[i,2], startCol = 8, startRow = 6,rowNames = TRUE )"我也尝试 writeData(wb, "sheetname", x[i,1], y[i,2], startCol = 8, startRow = 6,rowNames = TRUE ) 都具有相同的效果和错误
-
好的,我看到你又问同样的问题了! stackoverflow.com/questions/55365666/… sheetname 应该出现在 addworksheet 和 writedata 中,请查看 rdocumentation.org/packages/openxlsx/versions/4.1.0/topics/… 中的第一个示例。 Sheetname 可以是任何您想为工作表命名的名称。
-
其实我已经解决了,抱歉重复发帖,我是菜鸟,我会努力让它变得更好