使用闪亮的图表和数据框下载Excel文件。 (不适用于情节)

时间:2016-10-15 11:44:52

标签: shiny

你好同事闪亮的用户。

我正在遇到一个问题,我似乎无法在各种论坛和网站上找到任何解决方案。 我将分享一个相对简单的可重现的例子来说明我的问题。

我想要执行以下操作:上传一些数据,进行一些处理和分析,然后将整组输出放入Excel文件中,最后下载。 我可以毫不费力地在闪亮的服务器部分创建Excel,并将数据帧/表放入其中。但是我无法将图像放在Excel文件中。

这是因为我使用的xlsx包中的AddPicture函数需要以下内容:

addPicture(file,sheet,scale = 1,startRow = 1,startColumn = 1)

文件
图像文件的绝对路径。


由createSheet返回的工作表对象或通过子集化getSheets。图片将添加到此工作表的startRow,startColumn。

位置

“图像文件的绝对路径”是问题所在。我不能拥有文件的绝对路径,就像我用R执行类似的脚本一样。或者我可以吗?

以下是一些显示错误的代码:

如果按原样执行,您将能够在第一张表中下载带有数据框的Excel文件,没问题。 (因为不需要绝对路径,只需要一个数据框对象) 服务器部分中带#的部分给我带来了问题。您可以取消注释以查看错误(错误:'grid.draw'的适用方法不适用于类“NULL”的对象)。有没有人知道如何解决这个问题?

SERVER

library(shiny)
library(xlsx)
library(ggplot2)

server <- function(input, output) {

output$download.Excel <- downloadHandler(

  filename = function() { paste("Excelfile.xlsx")},

  content = function(file){
       example_plot=plot(1:10,1:10)
       Results_Workbook <- createWorkbook(type='xlsx')
       A=as.data.frame(matrix(2,2,2))
       sheet.1 <- createSheet(Results_Workbook, sheetName = "Data frame")
       addDataFrame(A, sheet=sheet.1, startRow=4, 
       startColumn=2,row.names=FALSE)
       setColumnWidth(sheet.1,colIndex=c(1:100),colWidth=30)
       sheet.2 <- createSheet(Results_Workbook, sheetName = "Plot")
       # ggsave("plot",example_plot, device="emf")
       # addImage(file = "plot.emf", sheet = sheet.2, scale = 55,
       #          startRow = 4, startColumn = 4)
       saveWorkbook(Results_Workbook,file)
  } 

)
}

UI

library(shiny)

ui <- fluidPage(
   titlePanel("Simple classification script with R/Shiny"),
      sidebarLayout(
          sidebarPanel(
             downloadButton('download.Excel', 'Download')

             ),
          mainPanel(p("Description of the results")
          )
     )
)

致以最诚挚的问候,

若埃尔

1 个答案:

答案 0 :(得分:0)

这是一个有效的server.R文件。请注意,我无法使用emf文件格式,但jpeg可以正常工作。

library(shiny)
library(xlsx)
library(ggplot2)

server <- function(input, output) {

  output$download.Excel <- downloadHandler(

    filename = function() { paste("Excelfile.xlsx")},

    content = function(file){
      example_plot=qplot(1:10,1:10)
      Results_Workbook <- createWorkbook(type='xlsx')
      A=as.data.frame(matrix(2,2,2))
      sheet.1 <- createSheet(Results_Workbook, sheetName = "Data frame")
      addDataFrame(A, sheet=sheet.1, startRow=4, 
                   startColumn=2,row.names=FALSE)
      setColumnWidth(sheet.1,colIndex=c(1:100),colWidth=30)
      sheet.2 <- createSheet(Results_Workbook, sheetName = "Plot")
      ggsave("plot.jpeg",example_plot, device="jpeg")
      addPicture(file = paste0(getwd(), "/plot.jpeg"), sheet = sheet.2, scale = 1,startRow = 4, startColumn = 4)
      saveWorkbook(Results_Workbook,file)
    } 

  )
}