检查R中是否存在数据表

时间:2016-10-18 09:11:36

标签: r excel shiny

我有一个闪亮的应用程序,用户可以在其中上传文件。根据此文件是否包含1个或2个数据表,功能应该不同。 我导入了一个read.xlsx数据表,其中data_in是路径:

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

所以这是文件的第一张。第二张纸当然可以以相同的方式导入。但是如果它没有第二张,我希望它通过例如粘贴警告或以不同的方式继续处理它。

那么,如何确定数据文件中是否存在第二张纸?

感谢您的帮助!

由于

4 个答案:

答案 0 :(得分:3)

有一种 existsSheet 方法可以检查 XLConnect 包中excel文件中是否存在工作表。

您可以尝试以下操作:

# 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")

请参阅Here is the result I get了解详情:

答案 1 :(得分:3)

您可以使用readxl包的excel_sheets功能,以便“列出Excel电子表格中的所有工作表”。

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

来自文档:

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

答案 2 :(得分:1)

上面的答案很好地指出了解决您具体问题的方法。我只想为这些问题添加一般解决方案:您可以查看tryCatch()。 这允许您定义在代码中出现错误或警告时应该发生的情况。

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

在您的示例中,您可以尝试在第二个工作表中读取并定义如果这会引发错误会发生什么。

答案 3 :(得分:1)

It worked for me with openxlsx

nfile <- "D:\\Temp\\NCLWKBOM.xlsx"
x <- ""
y<- ""

# check for file existance
if (file.exists(nfile)) {
  wb <- loadWorkbook(nfile)

#check sheet existance name(wb) gives name of sheet in wb
for (x in names(wb)){
    if (x == "NCLBOM") {
      y <- TRUE
    }
  }
  if (y != TRUE) {
    addWorksheet(wb, "NCLBOM")
  }

}else {
  wb <- createWorkbook()
  addWorksheet(wb, "NCLBOM")
}