programing

R 내에서 Excel 시트 범위를 사진으로 내보내는 방법

powerit 2023. 8. 26. 12:26
반응형

R 내에서 Excel 시트 범위를 사진으로 내보내는 방법

스크립트 내에서 일부 사진 파일을 자동으로 생성하려고 합니다.

우리는 엑셀 파일을 우리가 원하는 방식으로 가지고 있지만, 이제 더 쉬운 웹 게시를 위해 그 엑셀 테이블들의 JPG나 PNG 그림 복사본을 만들어야 합니다.

우리는 그것을 사용해 왔습니다.library(xlsx)와 Excel 사이의 대부분의 상호 작용을 위한 패키지, 그리고 우리가 특정 자바 명령을 보낼 수 있어야 하는 것처럼 보입니다.?.jmethods하지만 필요한 만큼의 선을 어떻게 통과할 수 있을지는 불분명합니다.

세션에서, 여기 재현 가능한 최소한의 예가 있습니다...

다음은 인쇄 범위가 포함된 Excel 파일의 예입니다.

library(xlsx)
file <- system.file("tests", "test_import.xlsx", package = "xlsx")
file

그리고 여기 엑셀 범위를 사진 파일로 내보내는 엑셀 매크로가 있습니다.

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패키지, 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()

산출량 (데이터/차트 포함)

Data and Chart Output Image

VBS로 할 수 있어요.대부분의 vbs는 vba와 동일하므로 매크로를 텍스트로 포함하는 동적 vbs 스크립트를 작성한 다음 셸과 함께 호출할 수 있습니다.

다음은 작동 예입니다.

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

Chart.jpg

언급URL : https://stackoverflow.com/questions/43095645/how-to-export-an-excel-sheet-range-to-a-picture-from-within-r

반응형