我试图创建一个包含多个电子表格的工作簿,我必须将三个数据框传递给每个工作表。但是,我在创建工作表时遇到问题,出现以下错误:
.jcall错误(wb," Lorg / apache / poi / ss / usermodel / Sheet;", " createSheet",:带签名的方法createSheet (d)Lorg /阿帕奇/ POI / SS /的usermodel /表;找不到
我使用的是xlsx包,相关的代码部分如下:
wb <- createWorkbook(type="xlsx")
saveWorkbook(wb, 'output.xlsx')
for (i in year)
{
sheet.1 <- createSheet(wb, sheetName = i)
data.filter <- realdata[realdata$year_ == i,]
data.filter <- data.filter[data.filter$month_ >= month[1],]
data.filter <- data.filter[data.filter$month_ <= month[4],]
ptable_data_usado <- cast(data.filter, mondat ~ BASE, value = "myidx")
correl_usado <- cor(ptable_data_usado)
addDataFrame(correl_usado, sheet = i, startRow = 0, startColumn = 0)
ptable_data_prx <- cast(data.filter, mondat ~ NearestBaseName, value = "myidx")
correl_prx <- cor(ptable_data_prx)
addDataFrame(correl_prx, sheet = i, startRow = 14, startColumn = 0)
}
答案 0 :(得分:4)
我遇到了类似的问题。我的解决方案是将表格名称强制转换为字符。
所以在你的情况下可能是
sheet.1 <- createSheet(wb, sheetName = as.character(i))
希望它会有所帮助。
答案 1 :(得分:0)
如果没有可重现的示例,则不能为正,但看起来问题是您拥有sheet = i
的两行。相反,它应该是sheet = sheet.1
。
此外,startRow
和startColumn
需要是大于零的整数,尽管这会产生一个超出允许范围的错误,而不是一个未找到的错误。
此外,saveWorkbook(wb, 'output.xlsx')
应该在循环之后。
答案 2 :(得分:0)
xlsx包使用rJava从APACHE POI项目调用JAVA中编写的函数来实现功能。 创建工作表的函数声明为:
public XSSFSheet createSheet(java.lang.String sheetname)
这意味着您需要将字符串传递给函数。返回R,工作表名称必须是字符向量。 @ Oleksii-Sh的回答是对的。
或者您可以使用:
sheet.1 <- createSheet(wb, sheetName = paste0("sheet", i))
如果你想将它命名为sheet1,sheet2 ......