【发布时间】:2017-02-24 19:08:39
【问题描述】:
你好闪亮的用户。
我遇到了一个问题,我似乎无法在各种论坛和网站上找到任何解决方案。 我将分享一个相对简单的可重现示例来说明我的问题。
我想做以下事情:上传一些数据,做一些处理和分析,然后把整堆输出放到一个 Excel 文件中,最后下载。 我在闪亮的服务器部分创建 Excel 并将数据框/表放入其中没有任何问题。但我无法将图像放入 Excel 文件中。
这是因为我使用的 xlsx 包中的 AddPicture 函数需要以下内容:
addPicture(file, sheet, scale=1, startRow=1, startColumn=1)
文件
图片文件的绝对路径。
片材
由 createSheet 或子集 getSheets 返回的工作表对象。图片将添加到此工作表的 startRow、startColumn 位置。
“图像文件的绝对路径”是问题所在。我不能有文件的绝对路径,就像我用 R 执行类似的脚本一样。或者我可以吗?
下面是一些显示错误的代码:
如果您按原样执行它,您将能够在第一张表中下载带有数据框的 Excel 文件,这没有问题。 (因为不需要绝对路径,只需要一个数据框对象) 服务器部分中带有# 的部分给我带来了问题。您可以取消注释以查看错误(错误:没有适用于 '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)
}
)
}
用户界面
library(shiny)
ui <- fluidPage(
titlePanel("Simple classification script with R/Shiny"),
sidebarLayout(
sidebarPanel(
downloadButton('download.Excel', 'Download')
),
mainPanel(p("Description of the results")
)
)
)
最好的问候,
乔尔
【问题讨论】:
-
你可以让
ggsave保存到绝对路径,或者使用getwd()获取当前工作目录并重建路径(ggsave保存到当前工作目录)跨度>
标签: shiny