使用XLConnect将数据写入Excel模板给出空单元格错误

我正在使用R包XLConnect将数据框写入现有的工作簿中的现有的Excel工作表。 excel工作簿有一个原始数据的工作表,我在R中使用writeWorksheet()填充工作表,另一个工作表是格式化数据的工作表,它引用原始数据工作表并执行计算。 但是,当我将数据写入R中的原始数据工作表时,格式化的数据工作表不会更新,并提供“公式指向空单元格”的错误,即使这些单元格中包含数据。 我不确定这个错误是由于R和XLConnect或我的工作簿中的东西。 当我简单地将我的数据直接复制并粘贴到原始数据导入工作表中的单元格中时,我不会收到错误。 请参阅下面的示例,并感谢您的帮助:

在R:

 library(XLConnect) # Creating first data frame L3 <- LETTERS[1:3] fac <- sample(L3, 10, replace = TRUE) (d <- data.frame(x = 1, y = 1:10, fac = fac)) df.1<-data.frame(1, 1:10, sample(L3, 10, replace = TRUE)) # Creating second data frame L4 <- LETTERS[4:7] fac <- sample(L4, 10, replace = TRUE) (d <- data.frame(x = 1, y = 1:10, fac = fac)) df.2<-data.frame(1, 1:10, sample(L4, 10, replace = TRUE)) # Reading in workbook wb <- loadWorkbook(xlname) wbnames <- as.vector(getSheets(wb)) # where wbnames is of length two [1] "Raw Data Import" [2] "Formatted Data" # Writing df.1 and df.2 to specific locations in Raw Data Import worksheet writeWorksheet(wb,df.1,sheet=wbnames[1],startRow=3,header=F) writeWorksheet(wb,df.2,sheet=wbnames[1],startRow=15,header=F) # Saving workbook saveWorkbook(wb) 

您可以使用XLConnect函数setForceFormulaRecalculation() 。 这会强制Excel在打开工作表时重新计算公式值。 第二个参数允许您指定要重新计算的工作表。 如果它设置为“*”,它将重新计算工作簿中的所有公式。

 wb <- loadWorkbook(xlname) wbnames <- as.vector(getSheets(wb)) writeWorksheet(wb,df.1,sheet=wbnames[1],startRow=3,header=F) writeWorksheet(wb,df.2,sheet=wbnames[1],startRow=15,header=F) setForceFormulaRecalculation(wb,"*",TRUE) saveWorkbook(wb,'~/test.xls') 

我没有成功,直到我为每个工作表添加了一个createSheet操作。 如果您想使用现有的工作表信息,请查看getSheets?getSheetPos

 > wb <- loadWorkbook('~/test.xls') > wbnames <- as.vector(getSheets(wb)) > createSheet(wb, "test1"); createSheet(wb, 'test2') > writeWorksheet(wb,df.1,sheet='test1',startRow=3,header=F) > writeWorksheet(wb,df.2,sheet='test2',startRow=15,header=F) > saveWorkbook(wb,'~/test.xls') 

当我以后运行你的代码时,我看到两个dataframe都被写入Sheet1 。 如果我插入saveWorkbook的操作,我得到了不同的工作表上的数据:

 > writeWorksheet(wb,df.1,sheet='Sheet1',startRow=3,header=F); saveWorkbook(wb,'~/test.xls') > writeWorksheet(wb,df.2,sheet='Sheet2',startRow=15,header=F) > saveWorkbook(wb,'~/test.xls') 

XLConnect是一个准商业产品,我不认为他们鼓励提问,所以你可能要联系Mirai Solutions,GMBH。