【问题标题】:saveWorkbook function saves without macrossaveWorkbook 函数在没有宏的情况下保存
【发布时间】:2019-08-29 20:06:43
【问题描述】:

我正在尝试使用 VBA 宏调用 R 脚本,以根据 excel 工作簿中的变量清理数据。我无法将清理后的数据粘贴回 Excel 工作簿。我可以使用 saveWorkbook 将其保存为 .xlsm 文件,但是一旦打开文件,我所有预设的宏都消失了,只是消失了。有没有办法从 R 中保存 xlsm 以保持宏完整?

作为另一个说明,有没有办法写这个并更新它,以便不需要关闭和重新打开文件?有没有办法让它以与宏相同的方式运行?

wb <- loadWorkbook(file.xlsm) 
writeData(wb, sheet = "DataSet", data, startCol = 1, startRow = 2, colNames = FALSE) 
saveWorkbook(wb, file = file.xlsm, overwrite = TRUE)  

它运行良好,但所有的宏都消失了。文件大小从 806KB 到 27KB

【问题讨论】:

  • 指定启用宏的 Excel 工作簿文件格​​式?我不知道 R 等效项是什么,但在 Excel 类型库中,您想要的是 Workbook.SaveAs 并将 FileFormat 参数设置为 xlOpenXMLWorkbookMacroEnabled(int 值为 52)
  • 当我使用函数 saveWorkbook 保存工作簿时,我将其保存为 .xlsm 文件,因此启用了宏。根据网站,此功能只有 3 个输入:rdocumentation.org/packages/openxlsx/versions/4.1.0.1/topics/…,我已经在使用它们了
  • 不,它保存为 .xlsm 文件,所以您指定的文件扩展名应该是 - 这并不意味着以正确格式序列化的实际内容。此 API 不提供保存启用宏的工作簿的方法并非不可能。

标签: r excel vba


【解决方案1】:

另一种解决方案是使用 VBA 从另一个 Excel 文件运行您的 R 脚本,而不是您的 R 脚本写入的那个文件。

然后,您可以使用 shell 命令等待脚本完成,然后再继续执行其余的 VBA 代码(参见this question 示例)。

当 R 脚本返回时,您的代码可以对 R 脚本导出的数据执行剩余操作。如果您绝对需要在新生成的文件中包含 VBA 代码,您还可以在文件中添加 VBA 代码模块(参见this question 示例)并将其保存为 xlsm 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-16
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 2014-10-15
    • 2023-03-18
    • 2011-09-10
    相关资源
    最近更新 更多