[英]How to export an Excel sheet range to a picture, from within R
我們正在嘗試在R
腳本中自動創建一些圖片文件。
我們的Excel文件看起來就像我們想要的那樣,但是現在需要制作這些excel表的JPG或PNG圖片副本,以便更容易發布網頁。
我們一直在使用library(xlsx)
包進行R
和Excel之間的大多數交互,看起來我們應該能夠通過類似?.jmethods
類的方式發送特定的java命令但是我們不知道如何傳遞盡可能多的行我們需要。
在R
會話中,這是一個可重復性最小的例子......
這是一個帶有要打印范圍的Excel文件示例
library(xlsx)
file <- system.file("tests", "test_import.xlsx", package = "xlsx")
file
這是Excel宏將Excel范圍導出到圖片文件
Sub Tester()
Worksheets("deletedFields").Range("A8:J36").CopyPicture xlScreen, xlBitmap
Application.DisplayAlerts = False
Set oCht = Charts.Add
With oCht
.Paste
.Export Filename:="C:\temp\SavedRange.jpg", Filtername:="JPG"
.Delete
End With
End Sub
任何有助於自動化的幫助將非常感謝!
考慮讓R完全按照VBA在宏中執行操作:為Excel對象庫創建COM接口。 您可以使用RDCOMClient
包執行此RDCOMClient
,在R語法中保留與宏幾乎相同的代碼。
library(RDCOMClient)
xlApp <- COMCreate("Excel.Application")
xlWbk <- xlApp$Workbooks()$Open("C:\\Path\\To\\test_import.xlsx")
xlScreen = 1
xlBitmap = 2
xlWbk$Worksheets("deletedFields")$Range("A8:J36")$CopyPicture(xlScreen, xlBitmap)
xlApp[['DisplayAlerts']] <- FALSE
oCht <- xlApp[['Charts']]$Add()
oCht$Paste()
oCht$Export("C:\\Temp\\SavedRange.jpg", "JPG")
oCht$Delete()
# CLOSE WORKBOOK AND APP
xlWbk$Close(FALSE)
xlApp$Quit()
# RELEASE RESOURCES
oCht <- xlWbk <- xlApp <- NULL
rm(oCht, xlWbk, xlApp)
gc()
輸出 (隨機數據/圖表)
你可以用vbs做到這一點。 大多數vbs與vba相同,因此您可以編寫動態vbs腳本,其中包含宏作為文本,然后使用shell調用它。
這是一個工作示例:
fileConn<-file("c:/rworking/test/test.vbs")
writeLines(c("Dim xlApp, xlBook, xlSht",
"Dim filename",
"filename = \"c:\\Rworking\\test\\test_import.xlsx\"",
"Set xlApp = CreateObject(\"Excel.Application\")",
"xlApp.Visible = True",
"set xlBook = xlApp.WorkBooks.Open(filename)",
"set xlSht = xlApp.Worksheets(1)",
"set rng = xlSht.Range(\"A8:J36\")",
"rng.CopyPicture",
"Set oCht = xlApp.Charts",
"oCht.Add() ",
"Set oCht = oCht(1)",
"oCht.paste",
"oCht.Export \"C:\\rworking\\test\\Test.jpg\", \"JPG\""),
fileConn)
close(fileConn)
shell.exec("c:/rworking/test/test.vbs")
嗯,不確定發布,也許它通過伊恩的帖子多余。 它更通用,但我也可以刪除它。
library(xlsx)
OutputPicFileName <- "Chart.jpg"
ScriptFileName <- "Chart.vbs"
xclFileName <- "test_import.xlsx"
xclRng <- "A8:J36"
file <- system.file("tests", xclFileName, package = "xlsx")
fileDirec <- unlist(strsplit(file, xclFileName))
CreateChart <- function(fileDirec, OutputPicFileName, ScriptFileName, xclRng){
setwd(fileDirec)
filePath <- file(paste0(fileDirec, ScriptFileName))
writeLines(
c(
"Dim App, WBook, Sht, Rng, FileName, ChartObj, Chart",
paste0("FileName = \"", gsub("/", "\\\\", fileDirec), xclFileName ,"\""),
"Set App = CreateObject(\"Excel.Application\")",
"Set WBook = App.WorkBooks.Open(FileName)",
"Set Sht = App.Worksheets(1)",
paste0("Set Rng = Sht.Range(\"", xclRng,"\")"),
"Rng.CopyPicture",
"Set ChartObj = App.Charts",
"Set Chart = ChartObj.Add() ",
"Chart.paste",
paste0("Chart.Export \"", gsub("/", "\\\\", fileDirec) , OutputPicFileName ,"\", \"JPG\"")
),
filePath
)
close(filePath)
shell.exec(ScriptFileName)
}
CreateChart(fileDirec, OutputPicFileName, ScriptFileName, xclRng)
# Result in: fileDirec
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.