VBA 运行 R 脚本的代码:Excel 中的输出图像问题
VBA code to run R script: output image issue in Excel
我正在使用 R 和 Excel 开发一个项目,使用包 "xlsx" 来打印输出,但我遇到了以下问题。
分析由一个名为 "Model.R" 的脚本执行。另一个名为 "Output.R" 的脚本生成我的分析的输出(包括一些图表)。我使用命令
从第一个脚本调用它
source("Output.R")
如果我 运行 来自 R Studio 的脚本,没问题,输出是正确的。
现在,我构建了一个 Excel "interface" 到 运行 脚本,使用以下 VBA 宏代码:
Sub Run_script()
Dim cmdLine As String
cmdLine="C:\Program Files\R\R-3.3.1\bin\Rscript C:\...\Model.R"
shell cmdLine
End Sub
现在一切正常,输出正确打印在新的 Excel 文件中,部分原因是现在所有图表都是空白框,里面什么也没有。
有没有人知道如何解决这个问题?例如,可以是从 Excel.
运行 脚本的另一种方式
谢谢
编辑
下面是生成并保存其中一个图表的 R 代码,例如:
hist(P1,probability=FALSE,main = "",breaks = 20)
title("CE Anno -1")
dev.copy(png,filename="CE1.png");
dev.off ()
因此图像在同一工作目录中保存为 png 文件。然后,要在 Excel 中打印它,我使用 xlsx 包和以下代码:
outwb <- createWorkbook()
SummaryCE <- createSheet(outwb, sheetName = "Summary CE")
addPicture("CE1.png", SummaryCE, scale = 0.5, startRow = 11, startColumn = 1)
saveWorkbook(outwb, "Risultati RO.xlsx")
正如我所说,如果我从 R Studio 运行 这段代码工作正常。使用前面的 VBA 代码从命令行调用它,正确创建了 Excel 但图像是一个空白框。
编辑 2
感谢您的帮助,我成功解决了问题。我现在要做的是根据相同的脚本自动生成报告(Word 格式,这里没有可用的 LaTex)Model.R
为此,我使用了 Markdown 功能并编写了一个 R Markdown 文件 "Report.Rmd"。在这里,我基本上加载了 Model.R 执行
产生的工作空间
load("Mywork.RData")
然后添加一些表格、图表和评论。然后,我使用 "Model.R" 脚本
中的以下行生成 Word 文档
render("Report.Rmd")
同样,我遇到了与以前类似的问题。如果我从 R Studio 运行 它,一切都很好。如果我使用以前的Excel界面,Word输出不会出现在文件夹中。
有谁知道可能导致此问题的原因吗?
谢谢你,很抱歉提出几个问题,我对 R 很满意,但这是我第一次使用 VBA。
dev.copy 在非交互模式下工作不正常(shell 命令)。按照以下脚本修改代码:
require(xlsx)
fname <- "CE1.png"
#add this device. you can use other device,e.g. jpg /bmp/tiff devices
png(fname) # you can define width /height as needed
hist(P1,probability=FALSE,main = "",breaks = 20)
title("CE Anno -1")
#dev.copy(png,filename="CE1.png"); #remove this line
dev.off ()
# the following code used as is
outwb <- createWorkbook()
SummaryCE <- createSheet(outwb, sheetName = "Summary CE")
addPicture("CE1.png", SummaryCE, scale = 0.5, startRow = 11, startColumn = 1)
saveWorkbook(outwb, "Risultati RO.xlsx")
为确保代码运行预期结果,请创建一个批处理文件,例如 do.bat 并从控制台 window 执行它。
批处理文件可能是:
"I:\Program Files\R\R-3.2.1\bin\i386\rscript" --verbose model.r
它应该可以正常工作,excel 已填充图像。
如果成功完成,您可以调用 excel
中的批处理文件
我在 excel 中使用以下 VBA 脚本调用 do.bat:
Sub RunShell()
Dim currentPath As String
currentPath = ActiveWorkbook.Path
'Debug.Print currentPath
Call Shell(currentPath & "\do.bat ", vbNormalFocus)
End Sub
我已经测试了代码并且它正在运行并用图像 excel 填充
这对我来说很好。
Sub RunRscript1()
Dim shell As Object
Set shell = VBA.CreateObject("WScript.Shell")
Dim waitTillComplete As Boolean: waitTillComplete = True
Dim style As Integer: style = 1
Dim errorCode As Integer
Dim path As String
' http://shashiasrblog.blogspot.com/2013/10/vba-front-end-for-r.html
path = "C:\Users\your_path\Documents\R\R-3.2.5\bin\x64\R.exe CMD BATCH --vanilla --slave C:\Users\your_path\Documents\R\Download.r"
'path = """C:\Users\your_path\Documents\R\R-3.2.5\bin\i386"" C:\Users\your_path\Documents\R\Download.R"
errorCode = shell.Run(path, style, waitTillComplete)
End Sub
我正在使用 R 和 Excel 开发一个项目,使用包 "xlsx" 来打印输出,但我遇到了以下问题。
分析由一个名为 "Model.R" 的脚本执行。另一个名为 "Output.R" 的脚本生成我的分析的输出(包括一些图表)。我使用命令
从第一个脚本调用它source("Output.R")
如果我 运行 来自 R Studio 的脚本,没问题,输出是正确的。
现在,我构建了一个 Excel "interface" 到 运行 脚本,使用以下 VBA 宏代码:
Sub Run_script()
Dim cmdLine As String
cmdLine="C:\Program Files\R\R-3.3.1\bin\Rscript C:\...\Model.R"
shell cmdLine
End Sub
现在一切正常,输出正确打印在新的 Excel 文件中,部分原因是现在所有图表都是空白框,里面什么也没有。
有没有人知道如何解决这个问题?例如,可以是从 Excel.
运行 脚本的另一种方式谢谢
编辑
下面是生成并保存其中一个图表的 R 代码,例如:
hist(P1,probability=FALSE,main = "",breaks = 20)
title("CE Anno -1")
dev.copy(png,filename="CE1.png");
dev.off ()
因此图像在同一工作目录中保存为 png 文件。然后,要在 Excel 中打印它,我使用 xlsx 包和以下代码:
outwb <- createWorkbook()
SummaryCE <- createSheet(outwb, sheetName = "Summary CE")
addPicture("CE1.png", SummaryCE, scale = 0.5, startRow = 11, startColumn = 1)
saveWorkbook(outwb, "Risultati RO.xlsx")
正如我所说,如果我从 R Studio 运行 这段代码工作正常。使用前面的 VBA 代码从命令行调用它,正确创建了 Excel 但图像是一个空白框。
编辑 2
感谢您的帮助,我成功解决了问题。我现在要做的是根据相同的脚本自动生成报告(Word 格式,这里没有可用的 LaTex)Model.R
为此,我使用了 Markdown 功能并编写了一个 R Markdown 文件 "Report.Rmd"。在这里,我基本上加载了 Model.R 执行
产生的工作空间load("Mywork.RData")
然后添加一些表格、图表和评论。然后,我使用 "Model.R" 脚本
中的以下行生成 Word 文档render("Report.Rmd")
同样,我遇到了与以前类似的问题。如果我从 R Studio 运行 它,一切都很好。如果我使用以前的Excel界面,Word输出不会出现在文件夹中。
有谁知道可能导致此问题的原因吗?
谢谢你,很抱歉提出几个问题,我对 R 很满意,但这是我第一次使用 VBA。
dev.copy 在非交互模式下工作不正常(shell 命令)。按照以下脚本修改代码:
require(xlsx)
fname <- "CE1.png"
#add this device. you can use other device,e.g. jpg /bmp/tiff devices
png(fname) # you can define width /height as needed
hist(P1,probability=FALSE,main = "",breaks = 20)
title("CE Anno -1")
#dev.copy(png,filename="CE1.png"); #remove this line
dev.off ()
# the following code used as is
outwb <- createWorkbook()
SummaryCE <- createSheet(outwb, sheetName = "Summary CE")
addPicture("CE1.png", SummaryCE, scale = 0.5, startRow = 11, startColumn = 1)
saveWorkbook(outwb, "Risultati RO.xlsx")
为确保代码运行预期结果,请创建一个批处理文件,例如 do.bat 并从控制台 window 执行它。
批处理文件可能是:
"I:\Program Files\R\R-3.2.1\bin\i386\rscript" --verbose model.r
它应该可以正常工作,excel 已填充图像。
如果成功完成,您可以调用 excel
中的批处理文件我在 excel 中使用以下 VBA 脚本调用 do.bat:
Sub RunShell()
Dim currentPath As String
currentPath = ActiveWorkbook.Path
'Debug.Print currentPath
Call Shell(currentPath & "\do.bat ", vbNormalFocus)
End Sub
我已经测试了代码并且它正在运行并用图像 excel 填充
这对我来说很好。
Sub RunRscript1()
Dim shell As Object
Set shell = VBA.CreateObject("WScript.Shell")
Dim waitTillComplete As Boolean: waitTillComplete = True
Dim style As Integer: style = 1
Dim errorCode As Integer
Dim path As String
' http://shashiasrblog.blogspot.com/2013/10/vba-front-end-for-r.html
path = "C:\Users\your_path\Documents\R\R-3.2.5\bin\x64\R.exe CMD BATCH --vanilla --slave C:\Users\your_path\Documents\R\Download.r"
'path = """C:\Users\your_path\Documents\R\R-3.2.5\bin\i386"" C:\Users\your_path\Documents\R\Download.R"
errorCode = shell.Run(path, style, waitTillComplete)
End Sub