2016-10-18 18 views
2

Ich habe eine glänzende Anwendung, in der der Benutzer eine Datei hochladen kann. Abhängig davon, ob diese Datei 1 oder 2 Datenblätter enthält, sollte die Funktionalität unterschiedlich sein. ich importieren Sie ein Datenblatt mit read.xlsx, wo Daten_Ein der Pfad:Überprüfen, ob ein Datenblatt existiert in R

data <-read.xlsx(data_in,1,1,colNames=TRUE) 

So dies das erste Blatt der Datei ist. Das zweite Blatt kann natürlich auf die gleiche Weise importiert werden. Aber wenn es kein zweites Blatt hat, will ich, dass es damit klarkommt, indem es zum Beispiel eine Warnung einfügt oder auf eine andere Art und Weise weitermacht.

So, wie zu bestimmen, ob ein zweites Blatt in der Datendatei vorhanden ist?

Schätzen Sie Ihre Hilfe!

Dank

Antwort

1

Die Antworten oben schön Lösungen für Ihr spezielles Problem hinweisen. Ich möchte nur eine allgemeine Lösung für solche Probleme hinzufügen: Sie könnten einen Blick auf tryCatch() werfen. Damit können Sie definieren, was passieren soll, wenn in Ihrem Code ein Fehler oder eine Warnung auftritt.

result <- tryCatch({ 
     # The code you want run 
    }, warning = function(war) { 
     # Is executed if warning encountered 
    }, error = function(err) { 
     # Is executed if error encountered 
    }) 

In Ihrem Beispiel könnten Sie versuchen, in der zweiten Platte zu lesen und definieren, was passieren soll, wenn dies auf einen Fehler wirft.

+0

Ich mag diesen ja auch wirklich. Die Idee, von einem Fehler auszugehen, war mir nicht bekannt, also versuche ich es zu vermeiden. Stattdessen denke ich, dass dies das Problem eher im Kern löst. Vielen Dank. – Piet93

3

Es gibt eine Methode existsSheet die Existenz von Blättern in Excel-Dateien in XLConnect Paket zu prüfen.

können Sie Folgendes versuchen:

# mtcars xlsx file from demoFiles subfolder of package XLConnect 
demoExcelFile <- system.file("demoFiles/mtcars.xlsx", package = "XLConnect") 

# Load workbook 
wb <- loadWorkbook(demoExcelFile) 

# Check for existence of a worksheet called 'mtcars' 
existsSheet(wb, "mtcars") 

Bitte beachten this für weitere Informationen:

+0

Dank @Nishu Tayal für die Antwort. Es ist eine nützliche Methode, aber für diesen Fall nicht die beste, die ich denke, weil Sie den Namen des Arbeitsblattes wissen müssen. Ich definiere nicht, wie der Benutzer seine Arbeitsblätter aufrufen soll und ich beabsichtige nicht, dies zu tun, da dies nur zu mehr Fehlern führen kann. – Piet93

3

Sie die excel_sheets Funktion des readxl Paket, um „alle Blätter in einer Excel-Tabelle Liste“ verwenden könnte.

library(readxl) 
excel_sheets("path/to/excel/file") 

Aus dem Text & Tabellen:

# To load all sheets in a workbook, use lapply 
path <- system.file("extdata/datasets.xls", package = "readxl") 
lapply(excel_sheets(path), read_excel, path = path)