R将数据写入xlsm

LeG*_*sII 5 r xlsm xlconnect

一个数据表:例如

> aDT <- data.table(colA = "apple", colB = "banana", colC = "4")
> aDT
    colA   colB colC
1: apple banana    4
Run Code Online (Sandbox Code Playgroud)

需要将此表写入 xlsm 中的工作表(它有宏)。

尝试多种方法来连接到 xlsm。全部失败了。

# Method 1
require(XLConnect)
wb <- loadWorkbook(filename = "sample.xlsm", create = FALSE)
Error: OutOfMemoryError (Java): Java heap space

# Method 2
require(openxlsx)
wb <- loadWorkbook(xlsxFile = "sample.xlsm")
Error in grepl(target, commentsXML) : invalid 'pattern' argument

# Method 3
require(openxlsx)
wb <- loadWorkbook(file = "sample.xlsm")
Error in grepl(target, commentsXML) : invalid 'pattern' argument
Run Code Online (Sandbox Code Playgroud)

然后我尝试在另一个新的 xlsm 上使用相同的代码,它们起作用了。

我的“sample.xlsm”的一些问题(不确定它们与问题有何关系)

  1. 20MB
  2. 即使使用 Excel,也需要 1-2 分钟才能打开它
  3. 我要覆盖的工作表由其他工作表中的公式引用
  4. 每次 Excel 启动消息“.. 包含指向一个或多个...的链接可能不安全。如果您信任这些链接,请更新...”
  5. 已禁用消息栏上的安全警报

问题: 如何解决?或任何其他将数据写入 xlsm 的替代方法?

我还找到了其他一些帖子,但它们要么无法解决我的问题,要么已经过时了。提前致谢。

Err*_*ard 0

您的文件相当大,我可能会在 R 中进行更多分析并将更多现成数据导出到 Excel 或将数据加载到数据库中并将数据直接从数据库加载到 Excel 中。

也就是说,在方法 1 中,您需要在加载包之前指定为 rJava(XLConnect 所依赖的)提供多少内存。就这样:

options(java.parameters = "-Xmx22000m")
Run Code Online (Sandbox Code Playgroud)

您可能没有足够的可用内存,但这就是您收到此错误消息的原因。