Hallo Kollegen glänzend Benutzer.Herunterladen einer Excel-Datei mit Plots und Datenrahmen von glänzend. (Nicht für Plots arbeiten)
Ich stolperte über ein Problem, für das ich auf den verschiedenen Foren und Websites keine Lösung finden kann. Ich werde ein relativ einfaches reproduzierbares Beispiel teilen, das mein Problem darstellt.
Ich möchte Folgendes tun: Einige Daten hochladen, einige Verarbeitung und Analyse, dann die ganze Reihe von Ausgaben in eine Excel-Datei und schließlich herunterladen. Ich habe keine Probleme damit, Excel im glänzenden Serverteil zu erstellen und Datenrahmen/Tabellen darin einzufügen. Aber ich kann keine Bilder in die Excel-Datei einfügen.
Es ist, weil die AddPicture Funktion aus dem xlsx Paket ich folgende Dinge verwenden erfordert:
AddPicture (Datei, Blatt, Maßstab = 1, startRow = 1, startcolumn = 1)
Datei
der absolute Pfad zur Bilddatei.
Blatt
ein Worksheet-Objekt, wie es von createSheet zurückgegeben wird oder getSheets subsetting. Das Bild wird auf diesem Blatt an der Position startRow, startColumn hinzugefügt.
"Der absolute Pfad zu der Image-Datei" ist das Problem. Ich kann keinen absoluten Pfad zu der Datei haben, wie wenn ich ein ähnliches Skript mit R ausführe. Oder kann ich?
Hier ist ein Code, der den Fehler zeigt:
Wenn Sie es ausführen, wie es steht, werden Sie kein Problem eine Excel-Datei mit einem Datenrahmen in dem ersten Blatt herunterladen können. (Da kein absoluter Pfad benötigt wird, nur ein Datenrahmenobjekt) Der Teil mit # im Server Teil bringt mir Probleme. Sie können es auskommentieren, um den Fehler zu sehen (Fehler: keine anwendbare Methode für 'grid.draw' angewendet auf ein Objekt der Klasse 'NULL'). Hat jemand eine Idee, wie man das löst?
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")
)
)
)
Mit freundlichen Grüßen,
Joël
können Sie entweder 'haben ggsave' in einen absoluten Pfad zu speichern, oder verwenden Sie' getwd() 'das aktuelle Arbeitsverzeichnis zu gelangen und den Pfad zu rekonstruieren (wie' ggsave' zum aktuellen Arbeitsverzeichnis speichert) –