2016-09-01 7 views
3

RとExcelのプロジェクトで作業していますが、出力を印刷するには "xlsx"パッケージを使用しています。Rスクリプトを実行するVBAコード:Excelでの出力イメージの問題

"Model.R"と呼ばれるスクリプトによって分析が実行されます。 "Output.R"という2番目のスクリプトは、分析の出力(いくつかのグラフを含む)を生成します。

source("Output.R") 

R Studioから両方のスクリプトを実行すると問題はなく、出力は正しいです。

は今、私はマクロのために、次のVBAコードを使用して、スクリプトを実行するために、Excel「インターフェース」を建て:

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からスクリプトを実行する別の方法かもしれません。

hist(P1,probability=FALSE,main = "",breaks = 20) 
title("CE Anno -1") 
dev.copy(png,filename="CE1.png"); 
dev.off() 

ので、画像はPNGファイルとして保存されます。

EDITここ

がチャートの1を生産し、節約Rコードは一例として、あるありがとう同じ作業ディレクトリにあります。

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から、それを実行した場合、このコードは正常に動作します:次に、Excelでそれを印刷するために、私はのxlsxパッケージと、次のコードを使用します。以前のVBAコードを使用してコマンドラインから呼び出すと、Excelは正しく作成されますが、イメージは空白のボックスになります。あなたの助けに

EDIT 2

おかげで、私は正常に問題を解決しました。私が今しようとしているのは、同じスクリプトモデルに基づいてレポート(Word形式、ここではLaTexはありません)を自動的に生成することです。これは、Markdown機能を使用して、R Markdownファイル"Report.Rmd"。ここで私は基本的には、その後いくつかのテーブル、チャート、コメントを追加しModel.R実行

load("Mywork.RData") 

から生じたワークスペースをロードします。次に、 "Model.R"スクリプトの次の行を使用してWord文書を作成します。

render("Report.Rmd") 

また、以前と同様の問題があります。 R Studioからそれを実行すると、すべて正常です。以前のExcelインターフェイスを使用すると、Word出力はフォルダに表示されません。

誰でもこの問題の原因を知ることができますか?

ありがとうございました。いくつかの質問で申し訳ありませんが、私はRには満足ですが、VBAを初めて使用します。

+3

あなたは*画像*、*グラフ*と*出力*を参照保つ –

+0

VBAまたはコマンドラインでバックスラッシュをエスケープする必要はありませんが、我々は唯一のコマンドライン呼び出しは何も実行中のコードを参照してくださいません。あなたの完全なプロセスを見ることができるようにRコードを投稿できますか? Rスクリプトは、Excelがレンダリングするチャートイメージを生成しますか? – Parfait

+0

グラフは別のウィンドウに描画され、Excelではシェルがキャプチャできません。ディスク上のRスクリプト内からpng/jpgにグラフを保存し、vbaスクリプトを使用してこれらの画像ファイルをExcelにロードしてみてください。 –

答えて

1

dev.copyは非対話モード(シェルコマンド)では正常に動作していません。次のスクリプト内のようにコードを変更します。

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バッチファイルを作成し、コンソールウィンドウから、それを実行します。

バッチファイルは次のようになります。

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

それは作業とイメージで満たされている優れべきです。それが正常に行われた場合

、あなたはエクセル

私はdo.bat呼び出すためにExcelで、次のVBAスクリプトを使用してバッチファイルを呼び出すことができます。

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

私は、コードをテストしているし、それはです作業と塗りつぶしは、画像とExcelで

+0

ご協力いただきありがとうございます。コードは正しく動作しており、Excel出力で画像が表示されます。 – Jise7

+0

もう少し小さな問題がありました。私の質問のEDIT 2部分に説明されています。少し時間があるなら、それを見ることができれば素晴らしいだろう。申し訳ありませんが、私が言ったように私はVBAで新しいです、そして、私はまだいくつかの基本的な概念を欠場しています。ありがとう! – Jise7

+0

解決するには:1)レンダリングに必要な "pandoc"のパスを指す環境変数{RSTUDIO_PANDOC}を作成します。それは私のマシンの "G:¥Program Files¥RStudio¥bin¥pandoc"にあります。 2)あなたのrスクリプトにこの行を追加してください:library(rmarkdown)。それは私のために働いています。それがあなたのために働いているかどうか私に教えてください。 –

0

これは私にとってうまく動作します。

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 
関連する問題