r - excel.link R 包强制 Excel 自动计算

标签 r excel vba

我有一个 R 脚本,除其他外,它循环遍历 Excel 二进制文件列表(*.xlsb,里面有很多预定义的内容,计算设置为手动)并将 data.frame 粘贴到特定范围内,然后更改不同工作表中某些其他单元格的值。

由于文件是 *.xlsb,我已经使用 excel.link 包实现了一个解决方案。
该程序包本身运行良好,但有一个主要问题:一旦将某些内容写入打开的工作簿,它就会将该工作簿的计算更改为自动。

这是一个很大的问题,因为电子表格本身非常大,发生了许多计算和工作表。重新计算工作簿需要 15 到 45 秒。更糟糕的是,每次 R(通过 excel.link)将数据写入工作簿时,工作簿都会重新计算。就我而言,对于每个工作簿,我在 3 个不同的地方打印数据。所以这让我慢了很多。

理想情况下,我希望能够控制这方面,即仅在保存文件之前将计算设置为自动,以便工作簿只计算一次。 -- 类似于 XLConnect 包 setForceFormulaRecalculation,但不支持 *.xlsb。

否则,任何形式的解决方法都会受到欢迎。

我粘贴了几行代码,但我不认为它非常相关。

xl.workbook.open(paste0(bs_path,"\\UAT Results Summary_Wave1.xlsb"))
xl.sheet.activate("Input - Subtotals Liab")
xls = xl.get.excel()
rng1 = xls[["Activesheet"]]$Cells(free_cell,11)
wrt=xl.write(Smmry,rng1,row.names = FALSE,col.names = FALSE)
xl.sheet.activate("Instructions")
xlrc[a13]=as.numeric(jobstep)
xlrc[b13]=as.numeric(jobstep)
xl.workbook.save(paste0(dest_path,"\\UAT Results Summary_",fund_short,"_",jobstep), file.format=xl.constants$xlExcel12)
xl.workbook.close()

如果您想查看更多代码,请告诉我。

请注意,我目前不考虑转换为 xlsx 并返回 xlsb。速度对于这个脚本来说至关重要。
另请注意,至少目前我无法使用 RExcel 或任何其他 Excel 插件。
预先感谢您的帮助。

最佳答案

对于速度excel.link在每次输出到 Excel 之前禁用自动重新计算,并在输出后将计算设置为自动。我在下一个版本中修复了这个行为。重新计算状态将恢复到以前的状态,而不是自动重新计算。
现在,您可以尝试在每次数据交换后设置手动重新计算,如下例所示:

app = xl() 
xl[a1] = 42
app[["Calculation"]] = xl.constants$xlCalculationManual

2018.07.09 更新:
另一种方法是实时修补包代码。试试下面的片段。这个对我有用。
library(excel.link)
set_excel_state = function(app){
    app[["Statusbar"]] = ""
    app[["Screenupdating"]] = TRUE
    app[["Calculation"]] = xl.constants$xlCalculationManual
    invisible(NULL)    
}

assignInNamespace("make.me.slow", set_excel_state, ns = "excel.link")

关于r - excel.link R 包强制 Excel 自动计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51215409/

相关文章:

vba - 无需剪贴板即可在工作簿之间复制/粘贴变量数据集

vba - 使用多个变量重复 IF 语句

R ggplot2 与 shapefile 和 csv 数据合并以填充多边形 - 特定

r - 想要在 R 中一次分配虚拟变量的值

oracle - PL/SQL 将查询结果分配给 CLOB

sql - 在 SQL Server Management Studio 中保存带标题的结果

excel - 强制 Excel 2007 将列中的所有值视为文本

excel - 如何使用用户表单在 session 之间产生相等的时间间隔

r - 找不到函数 plot.gam

r - 如何将 Unicode 输出写入 .csv 以在 Excel 中使用?