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

时间:2015-06-19 16:26:22

标签: r excel xlsx dcom

我希望在操作后将Excel文件打印到pdf文件。对于操作,我使用.xlsx包工作正常。有一个函数printSetup,但我找不到启动打印的功能。这有解决方案吗?

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

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

3 个答案:

答案 0 :(得分:1)

通过DCOM使用RDCOMClient界面的解决方案下方。这不是我的首选解决方案,因为它只适用于Windows。一个平台独立的解决方案仍然会受到赞赏。

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

答案 1 :(得分:1)

这样做的开源和跨平台方式将与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在您的路径中。如果不是,则需要更改该命令以包含libreoffice可执行文件的完整路径。

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

答案 2 :(得分:-3)

您可以使用pdf函数:
pdf(file =&#34; myfile.pdf&#34;,width = 8.5,height = 11)
  打印(firstsheet)
  grid.newpage()
  打印(secondsheet)
  grid.newpage()
  打印(thirdsheet)
dev.off()