【问题标题】:Using write.xlsx to replace an existing sheet with R package xlsx使用 write.xlsx 将现有工作表替换为 R 包 xlsx
【发布时间】:2015-03-19 03:27:31
【问题描述】:

我正在使用包xlsx 版本:0.5.7 日期:2014-08-01。在 R 版本 3.0.1 (2013-05-16) 中——“Good Sport”平台:i386-w64-mingw32/i386(32 位)。

我有一个至少有 2 张纸(比如 A 和 B)的 xlsx 文件。我需要从 A 读取数据,对其进行编辑并将它们保存在 B 中。这必须定期完成。

我可以使用read.xlsx 从 A 读取数据。编辑数据框后,我想将其保存在同一个 xlsx 文件中的现有工作表 B 中。

我试试这条线

write.xlsx(down, paste0(root,'/registration reports/registration complete_WK.xlsx'), sheet="data_final", col.names=T, row.names=F, append=T, showNA=F)

但它给了我这个错误:

Error in `.jcall(wb, "Lorg/apache/poi/ss/usermodel/Sheet;", "createSheet", ` : 
  java.lang.IllegalArgumentException: The workbook already contains a sheet of this name

我需要多次替换现有的工作表。我该怎么做?

【问题讨论】:

  • 这里是示例,转到文章底部:danganothererror.wordpress.com/2012/02/12/…
  • 我认为write.xlsx() 不会覆盖现有工作表。你能读入整个.xlsx 文件并重写所有工作表,包括你需要的任何新工作表吗?
  • 我们通常不支持在过时的 R 版本上“修复”问题。您有什么理由无法更新到 3.1.2 和匹配的包?
  • @CarlWitthoft 几个版本之后,“问题”仍然存在。这不是错误,而是阻止您覆盖工作表的理想行为

标签: java r excel overwrite r-xlsx


【解决方案1】:

如果要将新数据框保存在现有的 excel 文件中,首先必须加载 x​​lsx 文件:

wb <- loadWorkbook(file)

你有哪些床单,你会得到这样的:

sheets <- getSheets(wb)

您可以轻松地删除和添加(从而替换)工作表:

removeSheet(wb, sheetName="Sheet1")
yourSheet <- createSheet(wb, sheetName="Sheet1")

你可以用数据框填充工作表:

addDataFrame(yourDataFrame, yourSheet, <options>)
addDataFrame(anotherDataFrame, yourSheet, startRow=nrow(yourDataFrame)+2)

最后一步是将整个工作簿保存为 .xlsx:

saveWorkbook(wb, file)

顺便说一句:xlsx-package 的文档非常好,对此类问题很有帮助:) http://cran.r-project.org/web/packages/xlsx/xlsx.pdf

【讨论】:

  • 使用 openxlsx 会不会更容易,因为它提供了编辑现有工作表的功能?
【解决方案2】:

可能是您计算机上安装的 Java 与 xlsx 库不兼容。以下线程讨论了关于同一包的类似问题: enter link description here

或者,您的问题可能会通过其他与 Excel 相关的软件包(例如 XLConnect)来解决。看到这个帖子: enter link description here

【讨论】:

  • 请考虑在您的帖子中添加更多详细信息。如果您的链接更改或不可用,您的回答将无济于事。
猜你喜欢
  • 2014-01-31
  • 2016-03-17
  • 1970-01-01
  • 2020-08-19
  • 2018-04-24
  • 1970-01-01
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
相关资源
最近更新 更多