2016-10-15 4 views
1

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

+0

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

Antwort

0

Hier ist eine Arbeits server.R Datei. Beachten Sie, dass das Format der EMF-Datei nicht funktioniert, aber jpeg funktioniert.

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

) 
} 
+0

Dank viel für die Antwort. Wenn Sie jemals daran interessiert sind, emf zur Arbeit zu bekommen, gibt es einen komischen kleinen Trick, der das macht, denke ich. –

+0

Wenn Sie den Trick posten möchten, könnte das anderen in Zukunft helfen. Bitte markieren Sie die Antwort auch als akzeptiert, wenn sie funktioniert. –

+0

Zunächst einmal, mit ggsave(), kann ich es auch nicht funktionieren. –