From 8f0a330f9a8a90b8c82dc8cad07e02b57e378e81 Mon Sep 17 00:00:00 2001 From: chainsawriot Date: Mon, 15 Apr 2024 14:56:17 +0200 Subject: [PATCH] Fix #185 (#186) * Add potential test data files for #185 * Fix #185 --- DESCRIPTION | 2 +- NEWS.md | 6 ++++++ R/read_ods.R | 3 +++ tests/testdata/spaces_colnames.ods | Bin 0 -> 7919 bytes tests/testthat/test_read_ods.R | 5 +++++ 5 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 tests/testdata/spaces_colnames.ods diff --git a/DESCRIPTION b/DESCRIPTION index fe22703..abb0c9c 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: readODS Type: Package Title: Read and Write ODS Files -Version: 2.2.0 +Version: 2.2.0.999 Authors@R: c(person("Gerrit-Jan", "Schutten", role = c("aut"), email = "phonixor@gmail.com"), person("Chung-hong", "Chan", role = c("aut", "cre"), email = "chainsawtiney@gmail.com", comment = c(ORCID = "0000-0002-6232-7530")), diff --git a/NEWS.md b/NEWS.md index fe21d1d..7b6a774 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,9 @@ +# readODS 2.2.0.999 + +## Bug fixes + +* Fix #185 - `trim_ws` for `colnames` behaves the same as `readxl::read_xlsx()`. + # readODS 2.2.0 * Fix #151 - Now `read_ods()` and `list_ods_sheets()` can also be used to process flat ods files. `read_fods()` and `list_fods_sheets()` are still available, but not as the so-called "common interface." diff --git a/R/read_ods.R b/R/read_ods.R index 0eea24f..147bbe5 100644 --- a/R/read_ods.R +++ b/R/read_ods.R @@ -253,6 +253,9 @@ if (strings_as_factors) { res <- .convert_strings_to_factors(df = res) } + if (trim_ws && ncol(res) >= 1) { + colnames(res) <- stringi::stri_trim_both(colnames(res)) + } if (as_tibble) { res <- tibble::as_tibble(x = res, .name_repair = .name_repair) } diff --git a/tests/testdata/spaces_colnames.ods b/tests/testdata/spaces_colnames.ods new file mode 100644 index 0000000000000000000000000000000000000000..a924d162b6fb76b642b5f1fa9b0dfd376120733f GIT binary patch literal 7919 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