如何使用R中的数据透视表更新多个单独的Excel文件?

时间:2017-09-07 20:18:27

标签: r excel vba

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

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

1 个答案:

答案 0 :(得分:1)

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

假设您的r会话中当前有一个data.frame在对象d下 并且您在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包。