Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从shiny下载带有绘图和数据框的Excel文件。(不适用于地块)_Shiny - Fatal编程技术网

从shiny下载带有绘图和数据框的Excel文件。(不适用于地块)

从shiny下载带有绘图和数据框的Excel文件。(不适用于地块),shiny,Shiny,大家好,闪亮的用户们 我在各种论坛和网站上遇到了一个似乎找不到任何解决方案的问题。 我将分享一个相对简单的可重复的例子来说明我的问题 我想做以下工作:上传一些数据,做一些处理和分析,然后把所有的输出放到一个Excel文件中,最后下载。 在闪亮的服务器部件中创建Excel,并将数据帧/表放入其中,我没有任何问题。但我无法将图像放入Excel文件 这是因为我使用的xlsx包中的AddPicture函数需要以下内容: addPicture(文件、图纸、比例=1、startRow=1、startCol

大家好,闪亮的用户们

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

我想做以下工作:上传一些数据,做一些处理和分析,然后把所有的输出放到一个Excel文件中,最后下载。 在闪亮的服务器部件中创建Excel,并将数据帧/表放入其中,我没有任何问题。但我无法将图像放入Excel文件

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


addPicture(文件、图纸、比例=1、startRow=1、startColumn=1)

文件
图像文件的绝对路径

工作表
createSheet或子集getSheets返回的工作表对象。图片将添加到该表的startRow位置,startColumn

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


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

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

服务器

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)
  } 

)
}
库(闪亮)
图书馆(xlsx)
图书馆(GG2)

server这是一个正在工作的
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)
    } 

  )
}
库(闪亮)
图书馆(xlsx)
图书馆(GG2)

server这是一个正在工作的
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)
    } 

  )
}
库(闪亮)
图书馆(xlsx)
图书馆(GG2)

服务器您可以让
ggsave
保存到绝对路径,或者使用
getwd()
获取当前工作目录并重建路径(作为
ggsave
保存到当前工作目录),您可以让
ggsave
保存到绝对路径,或者使用
getwd()
获取当前工作目录并重建路径(如
ggsave
保存到当前工作目录),非常感谢您的回答。如果你对让emf发挥作用感兴趣,我认为有一个奇怪的小技巧可以做到这一点。如果你想发布这个技巧,这可能会在将来帮助其他人。如果答案有效,请将其标记为已接受。首先,使用ggsave(),我也无法使其工作。无论如何,它可能会工作。但我知道可以肯定的是,使用savePlot(),当将绘图保存为EMF时,我基本上成功了,至少在我只加载“xlsx”库时,将EMF文件导入Excel总是失败的。(例如png可以工作)但当我加载(按此顺序)“XLConnect”和“xlsx”时,它可以工作。尽管我只使用xlsx函数,但加载XLConnect似乎有助于导入EMF文件,原因我不知道。(他们都使用Java的东西,可能会发生冲突/交互,我真的不明白)你是对的!由于某些奇怪的原因,首先加载
XLConnect
将解决emf文件的问题。非常感谢您的回答。如果你对让emf发挥作用感兴趣,我认为有一个奇怪的小技巧可以做到这一点。如果你想发布这个技巧,这可能会在将来帮助其他人。如果答案有效,请将其标记为已接受。首先,使用ggsave(),我也无法使其工作。无论如何,它可能会工作。但我知道可以肯定的是,使用savePlot(),当将绘图保存为EMF时,我基本上成功了,至少在我只加载“xlsx”库时,将EMF文件导入Excel总是失败的。(例如png可以工作)但当我加载(按此顺序)“XLConnect”和“xlsx”时,它可以工作。尽管我只使用xlsx函数,但加载XLConnect似乎有助于导入EMF文件,原因我不知道。(他们都使用Java的东西,可能会发生冲突/交互,我真的不明白)你是对的!由于某些奇怪的原因,首先加载
XLConnect
将解决emf文件的问题。