无法通过我的R脚本将工作表添加到Excel文件中

时间:2016-03-29 17:28:06

标签: java r excel

我试图创建一个包含多个电子表格的工作簿,我必须将三个数据框传递给每个工作表。但是,我在创建工作表时遇到问题,出现以下错误:

  

.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)

}

3 个答案:

答案 0 :(得分:4)

我遇到了类似的问题。我的解决方案是将表格名称强制转换为字符。

所以在你的情况下可能是

sheet.1 <- createSheet(wb, sheetName = as.character(i))

希望它会有所帮助。

答案 1 :(得分:0)

如果没有可重现的示例,则不能为正,但看起来问题是您拥有sheet = i的两行。相反,它应该是sheet = sheet.1

此外,startRowstartColumn需要是大于零的整数,尽管这会产生一个超出允许范围的错误,而不是一个未找到的错误。

此外,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 ......