我正在尝试使用RDCOMClient包来动态打开数据帧到Excel.我有功能代码将数据框打开到Excel,但我遇到的问题是代码完成时rsession.exe没有释放从加载数据到Excel的内存资源.即使在关闭Excel应用程序后,内存资源也不会被释放.是否有我遗漏的东西,我可以用来从rsession.exe释放内存?我能够释放内存的唯一方法是关闭RStudio并再次打开它.
功能代码
in.xl <- function(data, headers = TRUE, rownames = FALSE) {
require(RDCOMClient)
# Attempt to coerce non dataframe data into a dataframe
if (!is.data.frame(data)) {
data <- as.data.frame(data)
}
# Set row range for data
if (headers == TRUE) {
d.row.start <- 2
d.row.end <- nrow(data) + 1
} else {
d.row.start <- 1
d.row.end <- nrow(data)
}
# Set column range for data
if (rownames == TRUE) {
d.col.start <- 2
d.col.end <- ncol(data) + 1
} else …Run Code Online (Sandbox Code Playgroud) library(RDCOMClient)
## create outlook object
OutApp <- COMCreate("Outlook.Application")
Run Code Online (Sandbox Code Playgroud)
我想从名为"AUX"的Outlook文件夹中检索今天的电子邮件.解析电子邮件的标题,如果符合某些条件,我想解析某些字符串的电子邮件内容.
我设法写了一封来自R的电子邮件并将其发送出去,但到目前为止还无法检索电子邮件.
刚刚学习R Markdown语言并想知道我是否可以通过Outlook的Outlook发送身体电子邮件中的输出(使用RDCOMClient;我的办公室不使用gmail)
谢谢
该RDCOMclient程序包可用于连接Windows上的COM对象。在MSDN参考中,存在许多对应于值的枚举(例如,wdColorBlue对于蓝色,请参见此处)。这些可以直接在VBA代码中使用。
如何使用RDCOMClient处理枚举对象?是否有例如从R内检索枚举的对应值的方法?有一个功能,EnumValue但我看不到如何用于此目的。
一个小例子
下面的代码创建一个新的Word文档并在其中写入一些文本。段落更改为右对齐。在此2使用与枚举对应的整数wdAlignParagraphRight。我希望能够使用例如字符串"wdAlignParagraphRight"代替value 2。有没有办法做到这一点RDCOMclient?
x <- COMCreate("Word.Application") # create application
x[["visible"]] <- TRUE
x[["Documents"]]$Add()
x[["Selection"]]$TypeText("hello")
p <- x[["ActiveDocument"]][["Paragraphs"]]$Item(1)
p[["Alignment"]] <- 2
Run Code Online (Sandbox Code Playgroud) 我正在运行每日分析,通过我的Outlook电子邮件发出我想发送的文件.我使用的代码在这里有特色,并且工作得非常好,但它的附件部分从未起作用......
library(RDCOMClient)
OutApp <- COMCreate("Outlook.Application")
outMail = OutApp$CreateItem(0)
outMail[["To"]] = "gkinne@horizonmedia.com"
outMail[["subject"]] = "Bruh"
outMail[["body"]] = "Tester"
outMail[["Attachments"]]$Add("L:/Document.csv")
outMail$Send()
Run Code Online (Sandbox Code Playgroud)
原文在这里:
代码工作到附件部分,电子邮件甚至发送,只是没有附件.它吐出这个错误:
<checkErrorInfo> 80020009
No support for InterfaceSupportsErrorInfo
checkErrorInfo -2147352567
Error: Exception occurred.
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
不久前,我创建了 RDCOMClient 包的一个分支,以使其与 R 3.6 ( https://github.com/dkyleward/RDCOMClient ) 一起工作。人们现在再次遇到问题,因为它不适用于 R 4.0。这个问题似乎不太容易解决,我希望得到一些帮助。
如果我将 Rstudio 翻转回 R 3.6(和 rtools35),我可以在使用devtools::install_github(). 当我尝试使用 R 4.0(和 rtools40)时,程序包构建,我可以通过 COM 连接到应用程序。下面的第一行代码有效,xl是一个 COM 指针;然而,试图用它做任何事情(比如将 Excel 设置为可见)都会使 R 崩溃。
xl <- RDCOMClient::COMCreate("Excel.Application")
xl[["Visible"]] <- TRUE
Run Code Online (Sandbox Code Playgroud)
同样,以上在 R 3.6 中有效。
有没有办法继续使用以前的 rtools 进行构建?我遇到了https://github.com/r-windows/rtools-backports#readme,它谈到使用 rtools35 继续构建包,所以我有希望,但我不明白如何实现。
或者,如果我可以对 R 或 cpp 代码进行细微的更改来解决我的问题,我会全力以赴。不过,我是 cpp 新手。
我每个星期天都收到一封电子邮件附件(一个压缩文件夹).电子邮件的主题永远不会改变.我想找到包含指定主题行的最新电子邮件并下载附件.我是新的R用户,到目前为止我只找到了一种基于主题打印电子邮件正文的方法(来自stackoverflow上的其他问题之一如何使用R RDCOMClient检索Outlook收件箱电子邮件?).理想情况下,我想在指定日期找到收到指定主题的电子邮件,然后下载附件.有人可以指出我正确的方向.任何帮助将不胜感激.谢谢.
我已经自动化了从R,使用Openxlsx和RDCOMClient包访问VBA宏的过程.以下是代码:
功能:
OpenExcel_5param <- function(directory,filename, MacroName, param1, param2,
param3,param4, param5)
{
# Open a specific workbook in Excel:
data <- paste(c(directory,'/',filename,'.xlsm'), collapse = '')
xlApp <- COMCreate("Excel.Application")
xlWbk <- xlApp$Workbooks()$Open(data)
# this line of code might be necessary if you want to see your spreadsheet:
xlApp[['Visible']] <- TRUE
xlApp$Run(MacroName,param1,param2, param3, param4, param5)
# Close the workbook and quit the app:
xlWbk$Close(FALSE)
xlApp$Quit()
# Release resources:
rm(xlWbk, xlApp)
gc()
}
Run Code Online (Sandbox Code Playgroud)
访问此功能的代码:
OpenExcel_5param(Common_folder,VBA_CodeFileName,"ConsumptionValidation.MARM",r_extracts,"1.UniqueUPC_Nielsen",10000,original_files,"MARM")
当我运行代码时,我收到以下错误:
80020009
.COM中的错误(x,名称,...):
当我第一次运行代码时,它工作正常.从第二次开始,它开始给我这个错误.相同的代码在另一台计算机上运行正常.在第三台计算机上,如果我保持excel文件打开,它可以正常工作,但在我的计算机上根本不工作.我尝试过不同版本的R,但没有帮助.
我已经在 R 中使用 RDCOMClient 包一年多了,没有出现任何问题。
现在突然给我一个错误:
<checkErrorInfo> 80070057
No support for InterfaceSupportsErrorInfo
checkErrorInfo -2147024809
Error: The parameter is incorrect.
Run Code Online (Sandbox Code Playgroud)
这是我的代码(出于隐私原因我已经清理了代码):
library(RDCOMClient)
library(lubridate)
rmarkdown::render("/report.Rmd", encoding = "UTF-8")
OutApp <- COMCreate("Outlook.Application")
outMail = OutApp$CreateItem(0)
text <- paste("Attached is the report")
path_to_attachment <- "W:\\Rwd\\report\\report_this_month\\report.pdf"
outMail[["to"]] = "user@xyz.is"
outMail[["subject"]] = "Monthly report"
outMail[["htmlbody"]] = text
outMail[["attachments"]]$Add(path_to_attachment)
outMail$Send()
rm(OutApp, outMail)
Run Code Online (Sandbox Code Playgroud)
我计划发送电子邮件的其他脚本很少。其中之一使用blastula包(也通过Outlook发送电子邮件),我在那里没有问题。
知道为什么我会收到此错误吗?
我想知道哪些函数可以与 RDCOMClient 对象一起使用。
例如,要创建电子邮件,我们可以使用
OutApp <- COMCreate("Outlook.Application")
# create an email
outMail = OutApp$CreateItem(0)
Run Code Online (Sandbox Code Playgroud)
与outMail[["subject"]],outMail[["HTMLbody"]]或outMail[["Attachments"]]$Add(filepath)
但我怎样才能获得一份全面的清单呢?
RDCOMClient 文档已过时,并且列出的功能(例如getFuncs()和 )getElements()在包中不再可用。尝试names()找出引擎盖下的内容没有给我任何结果,并且
install.packages("remotes")
remotes::install_github("omegahat/SWinTypeLibs")
Run Code Online (Sandbox Code Playgroud)
也给出一个错误。关于如何检查 Outlook 中的对象有什么想法吗?
r ×10
rdcomclient ×10
outlook ×4
email ×3
c++ ×1
com ×1
memory-leaks ×1
openxlsx ×1
outlook-vba ×1
r-markdown ×1
rtools ×1
vba ×1