【问题标题】:How do I update multiple individual Excel files with PivotTables in R?如何在 R 中使用数据透视表更新多个单独的 Excel 文件?
【发布时间】:2017-09-08 05:11:55
【问题描述】:

我构建了一个脚本,该脚本从数据仓库中提取数据并以某种格式清理数据,以便导出为 csv 文件。我将文件粘贴到一个 Excel 文件中,该文件已经在另一个选项卡上有一个带有切片器的数据透视表。问题是我正在使用 Excel 宏为每个销售代表创建自己的销售报告。我要将这份独特的报告发送给 300 位销售代表。现在,我使用 Excel VBA 宏来创建单独的报告并通过 Outlook 将它们发送给每个销售代表,这需要很长时间并且会降低我的笔记本电脑的速度。

有没有办法使用 R 自动更新每个销售代表数据的 Excel 文件并刷新数据透视表而无需单独打开它们?我还想发送一封自动发送的电子邮件,附上 Excel 文件并通过 Outlook 发送给每个销售代表。我已经通过 R 对文本和 csv 文件进行了处理,但不是以循环方式对 100 多名销售代表进行了处理。

【问题讨论】:

  • 如果您提供数据示例,以及您希望输出的内容,我相信这里有人可以帮助您在 R 中做到这一点。
  • 在 R 中,您可以汇总数据以创建等效的数据透视表,将汇总表写入 Excel 文件并通过电子邮件发送。这可以循环使用,使用lapplyfor 循环,为每个销售代表创建汇总表并通过电子邮件发送。
  • This SO answer 可能有助于弄清楚如何从 R 运行 VBA 脚本。
  • @eipi10 该报告包含数据透视切片器以深入查看数据透视表。有没有它的 R 等价物?
  • 我不确定。我没有尝试在 R 中创建数据透视表或其他动态 Excel 对象。尽管有一些方法可以使用 Shiny 在 R 中创建动态内容。您还可以查看 DT package,它是 DataTables Javascript 库的 R 接口,以及 rpivotTable package,它是 PivotTable Javascript 库的接口。您也可以将这两个包与 Shiny 一起使用。

标签: r excel vba


【解决方案1】:

为了将数据从 R 发送到 Excel,我使用 Gregory Demin 的 excel.link 包(我相信它是一个仅限 Windows 的包)。我发现它最有用。 https://cran.r-project.org/web/packages/excel.link/excel.link.pdf 这是 Windows 上的示例工作流程:

假设您当前在对象d 下的 r 会话中有一个 data.frame 并且您在c:\mybook.xlsb 下保存了一个 Excel 工作簿

# kill an existing Excel process running (if any)
shell("taskkill /im EXCEL.exe /f /t")

# open a workbook from 'c:\\mybook.xlsb'
xl.workbook.open("c:\\mybook.xlsb")
xl.workbook.activate("mybook.xlsb")
mybook = xl.get.excel()


# paste the data from dataframe object `d` to the active sheet in cell (1,1) which corresponds to cell A1
xl.write(d,row.names=FALSE,xl.rng=mybook[["Activesheet"]]$Cells(1,1))

# activate a different sheet named 'mysheet'
xl.sheet.activate("mysheet")

# do more stuff with 'mysheet' here...

# save your workbook to a different copy once done
xl.workbook.save("c:\mybook_current_version".xlsb"))

# kill Excel process again to quit Excel 
shell("taskkill /im EXCEL.exe /f /t")

查看文档以获取更多示例。

要发送带附件的电子邮件,请查看sendmailR 包。

【讨论】:

  • 更新 Excel 工作表后,如何使用 R 中的数据透视表刷新 Excel 文件?
  • 您可以通过运行如下宏命令来刷新:ActiveWorkbook.RefreshAll。但是您不需要这样做,因为通常所有数据透视表都会在用户下次打开工作簿时刷新。因此,如果您使用新数据保存工作簿,然后将其关闭并稍后重新打开,则应刷新所有数据透视表。
  • 谢谢。我找到了在 Excel 中自动刷新数据透视表的选项。我右键单击数据透视表并单击“数据透视表选项...”。我去了数据表并检查了“打开文件时刷新数据”。我必须确保我使用的是带有静态数据透视表的空白模板,否则在写入新数据后它将有旧数据。
猜你喜欢
  • 2023-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
  • 1970-01-01
  • 2017-12-08
相关资源
最近更新 更多