From 90f77c39086b1c2f5f70e2f5fbb1783cad234989 Mon Sep 17 00:00:00 2001 From: Dan Chaltiel Date: Mon, 11 Mar 2024 11:46:27 +0100 Subject: [PATCH 1/3] handle negative sheet number --- R/read_excel.R | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/R/read_excel.R b/R/read_excel.R index cf512248..9f716a9f 100644 --- a/R/read_excel.R +++ b/R/read_excel.R @@ -237,9 +237,10 @@ standardise_sheet <- function(sheet, range, sheet_names) { if (is.numeric(sheet)) { if (sheet < 1) { - stop("`sheet` must be positive", call. = FALSE) + length(sheet_names) + sheet + } else { + floor(sheet) - 1L } - floor(sheet) - 1L } else if (is.character(sheet)) { if (!(sheet %in% sheet_names)) { stop("Sheet '", sheet, "' not found", call. = FALSE) From d081c12630e45e27b0ef85e4b88d415e83823c31 Mon Sep 17 00:00:00 2001 From: Dan Chaltiel Date: Mon, 11 Mar 2024 11:46:35 +0100 Subject: [PATCH 2/3] handle infinite sheet number --- R/read_excel.R | 2 ++ 1 file changed, 2 insertions(+) diff --git a/R/read_excel.R b/R/read_excel.R index 9f716a9f..76ccd1f5 100644 --- a/R/read_excel.R +++ b/R/read_excel.R @@ -237,8 +237,10 @@ standardise_sheet <- function(sheet, range, sheet_names) { if (is.numeric(sheet)) { if (sheet < 1) { + if(is.infinite(sheet)) sheet <- -length(sheet_names) length(sheet_names) + sheet } else { + if(is.infinite(sheet)) sheet <- length(sheet_names) floor(sheet) - 1L } } else if (is.character(sheet)) { From 6e45b8440dfc108564359ae765f24c1629a0c545 Mon Sep 17 00:00:00 2001 From: Dan Chaltiel Date: Mon, 11 Mar 2024 11:58:08 +0100 Subject: [PATCH 3/3] Update NEWS.md --- NEWS.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/NEWS.md b/NEWS.md index 2729a45d..9336d77e 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,9 @@ # readxl (development version) +# readxl 1.5.0 + +* Sheet number in `read_excel()`, `read_xls()`, and `read_xlsx()` can now be negative or infinite to select the sheet counting from the last one (#742, @DanChaltiel). + # readxl 1.4.3 This release contains no user-facing changes.