使用R打印/保存Excel(.xlsx)表格为PDF

我想打印一个Excel文件后,处理它的pdf文件。 对于我使用的.xlsx包的工作正常。 有一个函数printSetup但我找不到一个函数来开始打印。 有这个解决scheme吗?

 library(xlsx) file <- "test.xlsx" wb <- loadWorkbook(file) sheets <- getSheets(wb) # get all sheets sheet <- sheets[[1]] # get first sheet # HERE: MAGIC TO SAVE THIS SHEET TO PDF 

这可能是一个通过RDCOMClient包使用DCOM的解决scheme,但我更喜欢使用平台独立的解决scheme(例如使用xlsx ),因为我在MacOS上工作。 有任何想法吗?

一个开放源代码和跨平台的方式来做到这一点将与libreoffice如此:

 library("XLConnect") x <- rnorm(1:100) y <- x ^ 2 writeWorksheetToFile("test.xlsx", data.frame(x = x, y = y), "Data") tmpDir <- file.path(tempdir(), "LOConv") system2("libreoffice", c(paste0("-env:UserInstallation=file://", tmpDir), "--headless", "--convert-to pdf", "--outdir", getwd(), file.path(getwd(),"test.xlsx"))) 

理想情况下,您可以删除由tmpDir引用的文件夹,但这将是平台特定的。

请注意,假定libreoffice在你的path中。 如果不是,那么该命令将需要更改以包含libreoffice可执行文件的完整path。

env位的原因是,无头libreoffice只会做任何事情,否则,如果它尚未在GUI模式下运行。 有关更多信息,请参阅http://ask.libreoffice.org/zh/question/1686/how-to-not-connect-to-a-running-instance/

在通过RDCOMClient使用DCOM接口的解决scheme下面。 这不是我的首选解决scheme,因为它只能在Windows上运行。 平台独立的解决scheme仍然将不胜感激。

 library(RDCOMClient) library(R.utils) file <- "file.xlsx" # relative path to Excel file ex <- COMCreate("Excel.Application") # create COM object file <- getAbsolutePath(file) # convert to absolute path book <- ex$workbooks()$Open(file) # open Excel file sheet <- book$Worksheets()$Item(1) # pointer to first worksheet sheet$Select() # select first worksheet ex[["ActiveSheet"]]$ExportAsFixedFormat(Type=0, # export as PDF Filename="my.pdf", IgnorePrintAreas=FALSE) ex[["ActiveWorkbook"]]$Save() # save workbook ex$Quit() # close Excel 

你可以使用pdffunction:
pdf(file =“myfile.pdf”,width = 8.5,height = 11)
打印(firstsheet)
grid.newpage()
打印(secondsheet)
grid.newpage()
打印(thirdsheet)
dev.off()