如何从R中将Excel工作表范围导出到图片

Ant*_*ico 10 excel vba r xlsx excel-vba

我们正在尝试在R脚本中自动创建一些图片文件.

我们的Excel文件看起来就像我们想要的那样,但现在需要制作这些excel表的JPG或PNG图片副本,以便更容易发布网页.

我们一直在使用这个library(xlsx)包进行RExcel和Excel 之间的大多数交互,看起来我们应该能够通过类似的东西发送特定的java命令,?.jmethods但是我们不清楚我们将如何传递尽可能多的行.

在一个R会话中,这是一个可重复性最小的例子......

这是一个带有要打印范围的Excel文件示例

library(xlsx)
file <- system.file("tests", "test_import.xlsx", package = "xlsx")
file
Run Code Online (Sandbox Code Playgroud)

这是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
Run Code Online (Sandbox Code Playgroud)

任何有助于自动化的帮助将非常感谢!

Par*_*ait 10

考虑让R完全按照VBA在宏中执行操作:为Excel对象库创建COM接口.您可以使用该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()
Run Code Online (Sandbox Code Playgroud)

输出 (随机数据/图表)

数据和图表输出图像


Ian*_*ley 6

你可以用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")
Run Code Online (Sandbox Code Playgroud)