运行R脚本的VBA代码:在Excel中输出图像问题

我正在与R和Excel的项目,使用包“xlsx”来打印输出,我有以下问题。

分析由名为“Model.R”的脚本执行。第二个脚本“Output.R”生成我的分析的输出(包括一些图表)。 我用命令从第一个脚本中调用它

source("Output.R") 

如果我从R Studio运行这两个脚本,没有问题,输出是正确的。

现在,我构build了一个Excel“界面”来运行该脚本,使用以下VBA代码为一个macros:

 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正确创build,但图像是一个空白框。

编辑2

感谢您的帮助,我成功地解决了这个问题。 我现在要做的是自动生成一个报告(Word格式,没有LaTex在这里可用)基于相同的脚本Model.R

为此,我使用Markdownfunction,并编写一个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,eg 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") 

为了确保代码与预期的结果一起工作,创build一个batch file,例如do.bat,并从控制台窗口执行它。

batch file可能是:

  "I:\Program Files\R\R-3.2.1\bin\i386\rscript" --verbose model.r 

它应该工作,并且excel充满了形象。

如果成功,您可以在Excel中调用batch file

我在Excel中使用下面的VBA脚本来调用do.bat:

  Sub RunShell() Dim currentPath As String currentPath = ActiveWorkbook.Path 'Debug.Print currentPath Call Shell(currentPath & "\do.bat ", vbNormalFocus) End Sub 

我已经testing了代码,它的工作和填写图像的优秀

这对我来说很好。

 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