From 22869b860e3424b4aa81efdcb5ea2b7cd361fbcf Mon Sep 17 00:00:00 2001 From: nacnudus Date: Sun, 29 Oct 2023 00:10:37 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20nacnudus?= =?UTF-8?q?/tidyxl@4991ec152d5c726bcf136785694be2552cbab20a=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- articles/data-validation-rules.html | 2 +- articles/smells.html | 2 +- articles/tidyxl.html | 4 +- index.html | 130 ++++++++++++++-------------- pkgdown.yml | 2 +- search.json | 2 +- 6 files changed, 71 insertions(+), 71 deletions(-) diff --git a/articles/data-validation-rules.html b/articles/data-validation-rules.html index 0b2c212..65fceeb 100644 --- a/articles/data-validation-rules.html +++ b/articles/data-validation-rules.html @@ -79,7 +79,7 @@

Duncan Garmonsway

-

2023-10-28

+

2023-10-29

Source: vignettes/data-validation-rules.Rmd
data-validation-rules.Rmd
diff --git a/articles/smells.html b/articles/smells.html index 96673ef..ad87b57 100644 --- a/articles/smells.html +++ b/articles/smells.html @@ -79,7 +79,7 @@

Duncan Garmonsway

-

2023-10-28

+

2023-10-29

Source: vignettes/smells.Rmd
smells.Rmd
diff --git a/articles/tidyxl.html b/articles/tidyxl.html index fb3ca25..6bd2e89 100644 --- a/articles/tidyxl.html +++ b/articles/tidyxl.html @@ -79,7 +79,7 @@

Duncan Garmonsway

-

2023-10-28

+

2023-10-29

Source: vignettes/tidyxl.Rmd
tidyxl.Rmd
@@ -103,7 +103,7 @@

tidyxl position, formatting and comments in a tidy structure for further manipulation, especially by the unpivotr package. It supports the xml-based file formats ‘.xlsx’ and ‘.xlsm’ via the embedded -RapidXML C++ library. It +RapidXML C++ library. It does not support the binary file formats ‘.xlsb’ or ‘.xls’.

It also provides a function xlex() for tokenizing formulas. See the vignette diff --git a/index.html b/index.html index 3c2030e..a475bba 100644 --- a/index.html +++ b/index.html @@ -8,7 +8,7 @@ Read Untidy Excel Files • tidyxl @@ -19,7 +19,7 @@ -

tidyxl imports non-tabular data from Excel files into R. It exposes cell content, position, formatting and comments in a tidy structure for further manipulation, especially by the unpivotr package. It supports the xml-based file formats ‘.xlsx’ and ‘.xlsm’ via the embedded RapidXML C++ library. It does not support the binary file formats ‘.xlsb’ or ‘.xls’.

+

tidyxl imports non-tabular data from Excel files into R. It exposes cell content, position, formatting and comments in a tidy structure for further manipulation, especially by the unpivotr package. It supports the xml-based file formats ‘.xlsx’ and ‘.xlsm’ via the embedded RapidXML C++ library. It does not support the binary file formats ‘.xlsb’ or ‘.xls’.

It also provides a function xlex() for tokenizing formulas. See the vignette for details. It is useful for detecting ‘spreadsheet smells’ (poor practice such as embedding constants in formulas, or using deep levels of nesting), and for understanding the dependency structures within spreadsheets.

Make cells tidy @@ -118,9 +118,9 @@

ExamplesThe package includes a spreadsheet, ‘titanic.xlsx’, which contains the following pivot table:

tidyxl doesn’t coerce the pivot table into a data frame. Instead, it represents each cell in its own row, where it describes the cell’s address, value and other properties.

@@ -187,17 +187,17 @@ 

Examplesx[x$data_type == "character", c("address", "character")] #> # A tibble: 22 × 2 #> address character -#> <chr> <chr> -#> 1 C1 Age -#> 2 D1 Child -#> 3 F1 Adult -#> 4 C2 Survived -#> 5 D2 No -#> 6 E2 Yes -#> 7 F2 No -#> 8 G2 Yes -#> 9 A3 Class -#> 10 B3 Sex +#> <chr> <chr> +#> 1 C1 Age +#> 2 D1 Child +#> 3 F1 Adult +#> 4 C2 Survived +#> 5 D2 No +#> 6 E2 Yes +#> 7 F2 No +#> 8 G2 Yes +#> 9 A3 Class +#> 10 B3 Sex #> # … with 12 more rows x[x$row == 4, c("address", "character", "numeric")] #> # A tibble: 6 × 3 @@ -227,10 +227,10 @@

Formattingc("address", "character")] #> # A tibble: 4 × 2 #> address character -#> <chr> <chr> -#> 1 C1 Age -#> 2 C2 Survived -#> 3 A3 Class +#> <chr> <chr> +#> 1 C1 Age +#> 2 C2 Survived +#> 3 A3 Class #> 4 B3 Sex # Yellow fill @@ -247,17 +247,17 @@

Formatting# Styles by name formats$style$font$name["Normal"] -#> Normal +#> Normal #> "Calibri" head(x[x$style_format == "Normal", c("address", "character")]) #> # A tibble: 6 × 2 #> address character -#> <chr> <chr> -#> 1 C1 Age -#> 2 D1 Child -#> 3 E1 <NA> -#> 4 F1 Adult -#> 5 G1 <NA> +#> <chr> <chr> +#> 1 C1 Age +#> 2 D1 Child +#> 3 E1 <NA> +#> 4 F1 Adult +#> 5 G1 <NA> #> 6 C2 Survived # In-cell formatting is available in the `character_formatted` column as a data @@ -296,8 +296,8 @@

Comments
 x[!is.na(x$comment), c("address", "comment")]
 #> # A tibble: 1 × 2
-#>   address comment                                                    
-#>   <chr>   <chr>                                                      
+#>   address comment
+#>   <chr>   <chr>
 #> 1 G11     All women in the crew worked in the victualling department.

@@ -311,18 +311,18 @@

Formulas c("address", "formula", "is_array", "formula_ref", "formula_group", "error", "logical", "numeric", "date", "character")] #> # A tibble: 32 × 10 -#> address formula is_array formula_ref formula_group error logical numeric date character -#> <chr> <chr> <lgl> <chr> <int> <chr> <lgl> <dbl> <dttm> <chr> -#> 1 A1 "1/0" FALSE <NA> NA #DIV/0! NA NA NA <NA> -#> 2 A14 "1=1" FALSE <NA> NA <NA> TRUE NA NA <NA> -#> 3 A15 "A4+1" FALSE <NA> NA <NA> NA 1338 NA <NA> -#> 4 A16 "DATE(2017,1,18)" FALSE <NA> NA <NA> NA NA 2017-01-18 00:00:00 <NA> +#> address formula is_array formula_ref formula_group error logical numeric date character +#> <chr> <chr> <lgl> <chr> <int> <chr> <lgl> <dbl> <dttm> <chr> +#> 1 A1 "1/0" FALSE <NA> NA #DIV/0! NA NA NA <NA> +#> 2 A14 "1=1" FALSE <NA> NA <NA> TRUE NA NA <NA> +#> 3 A15 "A4+1" FALSE <NA> NA <NA> NA 1338 NA <NA> +#> 4 A16 "DATE(2017,1,18)" FALSE <NA> NA <NA> NA NA 2017-01-18 00:00:00 <NA> #> 5 A17 "\"Hello, World!\"" FALSE <NA> NA <NA> NA NA NA Hello, Wo… -#> 6 A19 "$A$18+1" FALSE <NA> NA <NA> NA 2 NA <NA> -#> 7 B19 "A18+2" FALSE <NA> NA <NA> NA 3 NA <NA> -#> 8 A20 "$A$18+1" FALSE A20:A21 0 <NA> NA 2 NA <NA> -#> 9 B20 "A19+2" FALSE B20:B21 1 <NA> NA 4 NA <NA> -#> 10 A21 "$A$18+1" FALSE <NA> 0 <NA> NA 2 NA <NA> +#> 6 A19 "$A$18+1" FALSE <NA> NA <NA> NA 2 NA <NA> +#> 7 B19 "A18+2" FALSE <NA> NA <NA> NA 3 NA <NA> +#> 8 A20 "$A$18+1" FALSE A20:A21 0 <NA> NA 2 NA <NA> +#> 9 B20 "A19+2" FALSE B20:B21 1 <NA> NA 4 NA <NA> +#> 10 A21 "$A$18+1" FALSE <NA> 0 <NA> NA 2 NA <NA> #> # … with 22 more rows

The top five cells show that the results of formulas are available as usual in the columns error, logical, numeric, date, and character.

@@ -351,7 +351,7 @@

Tokenizing formulas
 x <- xlex("MIN(3,MAX(2,A1))")
 x
-#> root            
+#> root
 #> ¦-- MIN         function
 #> °-- (           fun_open
 #>     ¦-- 3       number
@@ -388,21 +388,21 @@ 

Data validation rulesxlsx_validation(examples) #> # A tibble: 15 × 14 #> sheet ref type opera…¹ formu…² formu…³ allow…⁴ show_…⁵ promp…⁶ promp…⁷ show_…⁸ error…⁹ error…˟ error…˟ -#> <chr> <chr> <chr> <chr> <chr> <chr> <lgl> <lgl> <chr> <chr> <lgl> <chr> <chr> <chr> -#> 1 Sheet1 A106 whole between 0 9 TRUE TRUE messag… messag… TRUE error … error … stop +#> <chr> <chr> <chr> <chr> <chr> <chr> <lgl> <lgl> <chr> <chr> <lgl> <chr> <chr> <chr> +#> 1 Sheet1 A106 whole between 0 9 TRUE TRUE messag… messag… TRUE error … error … stop #> 2 Sheet1 A108 list <NA> $B$108 <NA> TRUE TRUE <NA> <NA> TRUE <NA> <NA> warning -#> 3 Sheet1 A110 date between 2017-0… 2017-0… TRUE TRUE <NA> <NA> TRUE <NA> <NA> stop -#> 4 Sheet1 A111 time between 00:00:… 09:00:… TRUE TRUE <NA> <NA> TRUE <NA> <NA> stop -#> 5 Sheet1 A112 textLe… between 0 9 TRUE TRUE <NA> <NA> TRUE <NA> <NA> stop -#> 6 Sheet1 A114 whole notBet… 0 9 TRUE TRUE <NA> <NA> TRUE <NA> <NA> stop -#> 7 Sheet1 A115,A121:A122 whole equal 0 <NA> TRUE TRUE <NA> <NA> TRUE <NA> <NA> stop -#> 8 Sheet1 A116 whole notEqu… 0 <NA> TRUE TRUE <NA> <NA> TRUE <NA> <NA> stop -#> 9 Sheet1 A117 whole greate… 0 <NA> TRUE TRUE <NA> <NA> TRUE <NA> <NA> stop -#> 10 Sheet1 A119 whole greate… 0 <NA> TRUE TRUE <NA> <NA> TRUE <NA> <NA> stop -#> 11 Sheet1 A120 whole lessTh… 0 <NA> TRUE TRUE <NA> <NA> TRUE <NA> <NA> stop -#> 12 Sheet1 A118 whole lessTh… 0 <NA> TRUE TRUE <NA> <NA> TRUE <NA> <NA> stop -#> 13 Sheet1 A107 decimal notBet… 0 9 FALSE FALSE <NA> <NA> FALSE <NA> <NA> stop -#> 14 Sheet1 A113 custom <NA> A113<=… <NA> TRUE TRUE <NA> <NA> TRUE <NA> <NA> stop +#> 3 Sheet1 A110 date between 2017-0… 2017-0… TRUE TRUE <NA> <NA> TRUE <NA> <NA> stop +#> 4 Sheet1 A111 time between 00:00:… 09:00:… TRUE TRUE <NA> <NA> TRUE <NA> <NA> stop +#> 5 Sheet1 A112 textLe… between 0 9 TRUE TRUE <NA> <NA> TRUE <NA> <NA> stop +#> 6 Sheet1 A114 whole notBet… 0 9 TRUE TRUE <NA> <NA> TRUE <NA> <NA> stop +#> 7 Sheet1 A115,A121:A122 whole equal 0 <NA> TRUE TRUE <NA> <NA> TRUE <NA> <NA> stop +#> 8 Sheet1 A116 whole notEqu… 0 <NA> TRUE TRUE <NA> <NA> TRUE <NA> <NA> stop +#> 9 Sheet1 A117 whole greate… 0 <NA> TRUE TRUE <NA> <NA> TRUE <NA> <NA> stop +#> 10 Sheet1 A119 whole greate… 0 <NA> TRUE TRUE <NA> <NA> TRUE <NA> <NA> stop +#> 11 Sheet1 A120 whole lessTh… 0 <NA> TRUE TRUE <NA> <NA> TRUE <NA> <NA> stop +#> 12 Sheet1 A118 whole lessTh… 0 <NA> TRUE TRUE <NA> <NA> TRUE <NA> <NA> stop +#> 13 Sheet1 A107 decimal notBet… 0 9 FALSE FALSE <NA> <NA> FALSE <NA> <NA> stop +#> 14 Sheet1 A113 custom <NA> A113<=… <NA> TRUE TRUE <NA> <NA> TRUE <NA> <NA> stop #> 15 Sheet1 A109 list <NA> $B$108 <NA> TRUE TRUE <NA> <NA> TRUE <NA> <NA> inform… #> # … with abbreviated variable names ¹​operator, ²​formula1, ³​formula2, ⁴​allow_blank, ⁵​show_input_message, ⁶​prompt_title, #> # ⁷​prompt_body, ⁸​show_error_message, ⁹​error_title, ˟​error_body, ˟​error_symbol

diff --git a/pkgdown.yml b/pkgdown.yml index 54006e7..5752193 100644 --- a/pkgdown.yml +++ b/pkgdown.yml @@ -5,7 +5,7 @@ articles: data-validation-rules: data-validation-rules.html smells: smells.html tidyxl: tidyxl.html -last_built: 2023-10-28T23:46Z +last_built: 2023-10-29T00:10Z urls: reference: https://nacnudus.github.io/tidyxl/reference article: https://nacnudus.github.io/tidyxl/articles diff --git a/search.json b/search.json index 8af42da..cc07351 100644 --- a/search.json +++ b/search.json @@ -1 +1 @@ -[{"path":"https://nacnudus.github.io/tidyxl/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"MIT License","title":"MIT License","text":"Copyright (c) 2020 Duncan Garmonsway Permission hereby granted, free charge, person obtaining copy software associated documentation files (“Software”), deal Software without restriction, including without limitation rights use, copy, modify, merge, publish, distribute, sublicense, /sell copies Software, permit persons Software furnished , subject following conditions: copyright notice permission notice shall included copies substantial portions Software. SOFTWARE PROVIDED “”, WITHOUT WARRANTY KIND, EXPRESS IMPLIED, INCLUDING LIMITED WARRANTIES MERCHANTABILITY, FITNESS PARTICULAR PURPOSE NONINFRINGEMENT. EVENT SHALL AUTHORS COPYRIGHT HOLDERS LIABLE CLAIM, DAMAGES LIABILITY, WHETHER ACTION CONTRACT, TORT OTHERWISE, ARISING , CONNECTION SOFTWARE USE DEALINGS SOFTWARE.","code":""},{"path":"https://nacnudus.github.io/tidyxl/articles/data-validation-rules.html","id":"what-data-validation-rules-are","dir":"Articles","previous_headings":"","what":"What data validation rules are","title":"Data Validation Rules","text":"Data validation rules control constants can entered cell, e.g. whole number 0 9, one several values another part spreadsheet. ‘xlsx_validation()’ returns data validation rules xlsx file, ranges cells rule applies. rule restricts input integers 0 9 inclusive, value (blank). value attempted, error message displayed imaginative title “message title”, informative body text “message body”, “stop” symbol. gamut possible rules given examples xlsx_validation().","code":"library(tidyxl) library(dplyr) #> #> Attaching package: 'dplyr' #> The following objects are masked from 'package:stats': #> #> filter, lag #> The following objects are masked from 'package:base': #> #> intersect, setdiff, setequal, union library(tidyr) examples <- system.file(\"extdata/examples.xlsx\", package = \"tidyxl\") glimpse(xlsx_validation(examples)[1, ]) #> Rows: 1 #> Columns: 14 #> $ sheet \"Sheet1\" #> $ ref \"A106\" #> $ type \"whole\" #> $ operator \"between\" #> $ formula1 \"0\" #> $ formula2 \"9\" #> $ allow_blank TRUE #> $ show_input_message TRUE #> $ prompt_title \"message title\" #> $ prompt_body \"message body\" #> $ show_error_message TRUE #> $ error_title \"error title\" #> $ error_body \"error body\" #> $ error_symbol \"stop\" as.data.frame(xlsx_validation(examples)) #> sheet ref type operator formula1 #> 1 Sheet1 A106 whole between 0 #> 2 Sheet1 A108 list $B$108 #> 3 Sheet1 A110 date between 2017-01-01 00:00:00 #> 4 Sheet1 A111 time between 00:00:00 #> 5 Sheet1 A112 textLength between 0 #> 6 Sheet1 A114 whole notBetween 0 #> 7 Sheet1 A115,A121:A122 whole equal 0 #> 8 Sheet1 A116 whole notEqual 0 #> 9 Sheet1 A117 whole greaterThan 0 #> 10 Sheet1 A119 whole greaterThanOrEqual 0 #> 11 Sheet1 A120 whole lessThanOrEqual 0 #> 12 Sheet1 A118 whole lessThan 0 #> 13 Sheet1 A107 decimal notBetween 0 #> 14 Sheet1 A113 custom A113<=LEN(B113) #> 15 Sheet1 A109 list $B$108 #> formula2 allow_blank show_input_message prompt_title #> 1 9 TRUE TRUE message title #> 2 TRUE TRUE #> 3 2017-01-09 09:00:00 TRUE TRUE #> 4 09:00:00 TRUE TRUE #> 5 9 TRUE TRUE #> 6 9 TRUE TRUE #> 7 TRUE TRUE #> 8 TRUE TRUE #> 9 TRUE TRUE #> 10 TRUE TRUE #> 11 TRUE TRUE #> 12 TRUE TRUE #> 13 9 FALSE FALSE #> 14 TRUE TRUE #> 15 TRUE TRUE #> prompt_body show_error_message error_title error_body error_symbol #> 1 message body TRUE error title error body stop #> 2 TRUE warning #> 3 TRUE stop #> 4 TRUE stop #> 5 TRUE stop #> 6 TRUE stop #> 7 TRUE stop #> 8 TRUE stop #> 9 TRUE stop #> 10 TRUE stop #> 11 TRUE stop #> 12 TRUE stop #> 13 FALSE stop #> 14 TRUE stop #> 15 TRUE information"},{"path":"https://nacnudus.github.io/tidyxl/articles/data-validation-rules.html","id":"joining-rules-to-cells","dir":"Articles","previous_headings":"","what":"Joining rules to cells","title":"Data Validation Rules","text":"built-functions joining ranges like A1:D5,G8 single cells like B3. now, use snippets section. future might develop dplyr-like join function (hard currently dplyr doesn’t yet join arbitrary functions, even standard inequalities like >=). Help advice gratefully accepted! join rules cells, naive method use sheet ref columns match sheet address columns output xlsx_cells(). Notice 9 cells joined, even though 15 rules defined. Surely least 15 cells joined? reason cells 6 rules don’t exist – rules can defined cells value, cells value returned xlsx_cells(), otherwise 17179869184 cells worksheet must returned. subtle reason certain cells joined successfully ref column rules sometimes refers one cell, can even refer several, non-contiguous ranges cells. Specifically, seventh rule’s ref column A115,A121:A122. Special treatment needed . Ideally, kind join function defined can compare indidual cells ranges. haven’t written one, follows workaround. First, two ranges cells must unnested A115 A121:122. range A121:122 must ‘unranged’ A121 A122. unnest_ref() function can also defined whole data frames, unnesting column references. Finally new data frame rules can joined data frame cells usual ways, via sheet ref columns. Problems approach occur rules defined large ranges cells: ‘unnesting’ ranges results long vectors individual cell addresses, (worse) huge data frames rules. cases commonplace, rules often defined entire columns spreadsheet, column 1048576 rows.","code":"rules <- xlsx_validation(examples) cells <- filter(xlsx_cells(examples), row >= 106, col == 1) rules #> # A tibble: 15 × 14 #> sheet ref type operator formula1 formula2 allow_blank show_input_message #> #> 1 Sheet1 A106 whole between 0 9 TRUE TRUE #> 2 Sheet1 A108 list NA $B$108 NA TRUE TRUE #> 3 Sheet1 A110 date between 2017-01… 2017-01… TRUE TRUE #> 4 Sheet1 A111 time between 00:00:00 09:00:00 TRUE TRUE #> 5 Sheet1 A112 text… between 0 9 TRUE TRUE #> 6 Sheet1 A114 whole notBetw… 0 9 TRUE TRUE #> 7 Sheet1 A115,… whole equal 0 NA TRUE TRUE #> 8 Sheet1 A116 whole notEqual 0 NA TRUE TRUE #> 9 Sheet1 A117 whole greater… 0 NA TRUE TRUE #> 10 Sheet1 A119 whole greater… 0 NA TRUE TRUE #> 11 Sheet1 A120 whole lessTha… 0 NA TRUE TRUE #> 12 Sheet1 A118 whole lessThan 0 NA TRUE TRUE #> 13 Sheet1 A107 deci… notBetw… 0 9 FALSE FALSE #> 14 Sheet1 A113 cust… NA A113<=L… NA TRUE TRUE #> 15 Sheet1 A109 list NA $B$108 NA TRUE TRUE #> # ℹ 6 more variables: prompt_title , prompt_body , #> # show_error_message , error_title , error_body , #> # error_symbol cells #> # A tibble: 93 × 24 #> sheet address row col is_blank content data_type error logical numeric #> #> 1 Sheet1 A106 106 1 FALSE 0 numeric NA NA 0 #> 2 Sheet1 A107 107 1 FALSE 0.1 numeric NA NA 0.1 #> 3 Sheet1 A108 108 1 FALSE 137 character NA NA NA #> 4 Sheet1 A109 109 1 FALSE 137 character NA NA NA #> 5 Sheet1 A110 110 1 FALSE 42736 date NA NA NA #> 6 Sheet1 A111 111 1 FALSE 0.354166… date NA NA NA #> 7 Sheet1 A112 112 1 FALSE 149 character NA NA NA #> 8 Sheet1 A113 113 1 FALSE 10 numeric NA NA 10 #> 9 Sheet1 A114 114 1 FALSE -1 numeric NA NA -1 #> 10 Sheet1 A115 115 1 FALSE 0 numeric NA NA 0 #> # ℹ 83 more rows #> # ℹ 14 more variables: date , character , #> # character_formatted , formula , is_array , #> # formula_ref , formula_group , comment , height , #> # width , row_outline_level , col_outline_level , #> # style_format , local_format_id inner_join(rules, cells, by = c(\"sheet\" = \"sheet\", \"ref\" = \"address\")) #> # A tibble: 9 × 36 #> sheet ref type operator formula1 formula2 allow_blank show_input_message #> #> 1 Sheet1 A106 whole between 0 9 TRUE TRUE #> 2 Sheet1 A108 list NA $B$108 NA TRUE TRUE #> 3 Sheet1 A110 date between 2017-01… 2017-01… TRUE TRUE #> 4 Sheet1 A111 time between 00:00:00 09:00:00 TRUE TRUE #> 5 Sheet1 A112 textLe… between 0 9 TRUE TRUE #> 6 Sheet1 A114 whole notBetw… 0 9 TRUE TRUE #> 7 Sheet1 A107 decimal notBetw… 0 9 FALSE FALSE #> 8 Sheet1 A113 custom NA A113<=L… NA TRUE TRUE #> 9 Sheet1 A109 list NA $B$108 NA TRUE TRUE #> # ℹ 28 more variables: prompt_title , prompt_body , #> # show_error_message , error_title , error_body , #> # error_symbol , row , col , is_blank , content , #> # data_type , error , logical , numeric , date , #> # character , character_formatted , formula , is_array , #> # formula_ref , formula_group , comment , height , #> # width , row_outline_level , col_outline_level , … unrange <- function(x) { limits <- cellranger::as.cell_limits(x) rows <- seq(limits$ul[1], limits$lr[1]) cols <- seq(limits$ul[2], limits$lr[2]) rowcol <- expand.grid(rows, cols) cell_addrs <- cellranger::cell_addr(rowcol[[1]], rowcol[[2]]) cellranger::to_string(cell_addrs, fo = \"A1\", strict = FALSE) } unnest_ref <- function(x, ref) { UseMethod(\"unnest_ref\") } unnest_ref.default <- function(x, ref_col = ref) { stopifnot(is.character(x), length(x) == 1L) refs <- unlist(strsplit(x, \",\", fixed = TRUE)) unlist(lapply(refs, unrange)) } unrange(\"A121:A122\") #> [1] \"A121\" \"A122\" unnest_ref(\"A115,A121:A122\") #> [1] \"A115\" \"A121\" \"A122\" unnest_ref.data.frame <- function(x, ref_col) { ref <- rlang::enquo(ref_col) x[[rlang::quo_name(ref)]] <- lapply(x[[rlang::quo_name(ref)]], unnest_ref) tidyr::unnest(x, rlang::UQ(ref)) } (nested_rule <- slice(rules, 7)) #> # A tibble: 1 × 14 #> sheet ref type operator formula1 formula2 allow_blank show_input_message #> #> 1 Sheet1 A115,A… whole equal 0 NA TRUE TRUE #> # ℹ 6 more variables: prompt_title , prompt_body , #> # show_error_message , error_title , error_body , #> # error_symbol unnest_ref(nested_rule, ref) #> Warning: Prefixing `UQ()` with the rlang namespace is deprecated as of rlang 0.3.0. #> Please use the non-prefixed form or `!!` instead. #> #> # Bad: rlang::expr(mean(rlang::UQ(var) * 100)) #> #> # Ok: rlang::expr(mean(UQ(var) * 100)) #> #> # Good: rlang::expr(mean(!!var * 100)) #> This warning is displayed once every 8 hours. #> # A tibble: 3 × 14 #> sheet ref type operator formula1 formula2 allow_blank show_input_message #> #> 1 Sheet1 A115 whole equal 0 NA TRUE TRUE #> 2 Sheet1 A121 whole equal 0 NA TRUE TRUE #> 3 Sheet1 A122 whole equal 0 NA TRUE TRUE #> # ℹ 6 more variables: prompt_title , prompt_body , #> # show_error_message , error_title , error_body , #> # error_symbol "},{"path":"https://nacnudus.github.io/tidyxl/articles/smells.html","id":"inspecting-the-parse-tree","dir":"Articles","previous_headings":"","what":"Inspecting the parse tree","title":"Detecting Spreadsheet Smells with xlex()","text":"’s example simple formula MIN(3,MAX(2,A1)) (= symbol beginning formula implied, Excel doesn’t write file).","code":"library(tidyxl) x <- xlex(\"MIN(3,MAX(2,A1))\") x ## root ## ¦-- MIN function ## °-- ( fun_open ## ¦-- 3 number ## ¦-- , separator ## ¦-- MAX function ## °-- ( fun_open ## ¦-- 2 number ## ¦-- , separator ## °-- A1 ref ## °-- ) fun_close ## °-- ) fun_close"},{"path":"https://nacnudus.github.io/tidyxl/articles/smells.html","id":"detecting-constants-inside-formulas","dir":"Articles","previous_headings":"","what":"Detecting constants inside formulas","title":"Detecting Spreadsheet Smells with xlex()","text":"smelly spreadsheet distributed tidyxl package. comes famous Enron subpoena, made available Felienne Hermans. look glance? ’s screenshot part one sheet, showing formulas rather cell values. ’s financial plan, using formulas forecast rest year, plan following year. want see whether formulas embedded constants; ones hidden attention, driving forecasts. read formula, one one, lot easier visualise ones containing constants. can xlex() graph plotting library like ggplot2. first step, importing spreadsheet, tokenize formulas, using xlsx(). Let’s tokenize one formula see looks like.","code":""},{"path":"https://nacnudus.github.io/tidyxl/articles/smells.html","id":"one-formula","dir":"Articles","previous_headings":"Detecting constants inside formulas","what":"One formula","title":"Detecting Spreadsheet Smells with xlex()","text":"formula (C8/7)*12-48000, xlex() separates components. parentheses, operators (division, multiplication, subtraction), reference another cell (C8), numeric constants: 7, 12, 48000. ? 7 probably 7th month, July, column header “July YTD”. year--date figure divided 7, multiplied 12 forecast year-end figure. 48000 mysterious – perhaps future payment expected. Embedding constants inside formula bad practice. Better practice put constants cells, annotated meaning, perhaps even named. formulas refer , name, e.g.","code":"library(dplyr) ## ## Attaching package: 'dplyr' ## The following objects are masked from 'package:stats': ## ## filter, lag ## The following objects are masked from 'package:base': ## ## intersect, setdiff, setequal, union library(tidyr) library(purrr) library(ggplot2) # The original filename was \"barry_tycholiz__848__2002 Plan Worksheet CC107322.xlsx\" sheet <- tidy_xlsx(system.file(\"extdata/enron-constants.xlsx\", package = \"tidyxl\"), \"Detail Breakdown\")$data[[1]] ## Warning: 'tidy_xlsx()' is deprecated. ## Use 'xlsx_cells()' or 'xlsx_formats()' instead. sheet$formula[22] ## [1] \"(C8/7)*12-48000\" xlex(sheet$formula[22]) ## root ## °-- ( paren_open ## ¦-- C8 ref ## ¦-- / operator ## °-- 7 number ## ¦-- ) paren_close ## ¦-- * operator ## ¦-- 12 number ## ¦-- - operator ## °-- 48000 number (Compensation/MonthsToDate)*12Months-FuturePayments"},{"path":"https://nacnudus.github.io/tidyxl/articles/smells.html","id":"many-formulas","dir":"Articles","previous_headings":"Detecting constants inside formulas","what":"Many formulas","title":"Detecting Spreadsheet Smells with xlex()","text":"xlex() function isn’t vectorized (returns data frame), map formulas create ‘nest’ column individual data frames. can unnest data frames filter tokens constants, find cells constants formulas. constants common? Unsurprisingly, 12 7 almost equally abundant, also lots 6s 9s – two- three-quarterly figures? 150000s familiar 48000s, followed fractions look like percentages, several one-offs.","code":"tokens <- sheet %>% filter(!is.na(formula)) %>% select(row, col, formula) %>% mutate(tokens = map(formula, xlex)) %>% select(-formula) tokens ## # A tibble: 154 × 3 ## row col tokens ## ## 1 8 4 ## 2 9 4 ## 3 10 4 ## 4 12 4 ## 5 13 4 ## 6 14 3 ## 7 14 4 ## 8 14 5 ## 9 14 6 ## 10 17 4 ## # ℹ 144 more rows constants <- tokens %>% unnest(tokens) %>% filter(type %in% c(\"error\", \"bool\", \"number\", \"text\")) constants ## # A tibble: 201 × 5 ## row col level type token ## ## 1 8 4 1 number 7 ## 2 8 4 0 number 12 ## 3 8 4 0 number 48000 ## 4 9 4 1 number 7 ## 5 9 4 0 number 12 ## 6 10 4 1 number 7 ## 7 10 4 0 number 12 ## 8 12 4 1 number 7 ## 9 12 4 0 number 12 ## 10 13 4 1 number 7 ## # ℹ 191 more rows constants %>% count(token, sort = TRUE) %>% print(n = Inf) ## # A tibble: 24 × 2 ## token n ## ## 1 12 59 ## 2 7 58 ## 3 6 30 ## 4 9 30 ## 5 150000 4 ## 6 48000 2 ## 7 0.05 1 ## 8 0.1 1 ## 9 0.35 1 ## 10 0.5 1 ## 11 1.05 1 ## 12 10 1 ## 13 10000 1 ## 14 12000 1 ## 15 13000 1 ## 16 15000 1 ## 17 2000 1 ## 18 25000 1 ## 19 5000 1 ## 20 5320 1 ## 21 7314 1 ## 22 7800 1 ## 23 866 1 ## 24 95000 1"},{"path":"https://nacnudus.github.io/tidyxl/articles/smells.html","id":"visualising-constants","dir":"Articles","previous_headings":"Detecting constants inside formulas","what":"Visualising constants","title":"Detecting Spreadsheet Smells with xlex()","text":"final step visualize spreadsheet, highlighting cells hide constants formulas. already data frame cells constants, join back full dataset, pass result ggplot. time doesn’t seem particular pattern, perhaps suspicious .","code":"has_constants <- constants %>% distinct(row, col) %>% mutate(has_constant = TRUE) %>% right_join(sheet, by = c(\"row\", \"col\")) %>% filter(!is_blank) %>% select(row, col, has_constant) %>% replace_na(list(has_constant = FALSE)) has_constants ## # A tibble: 412 × 3 ## row col has_constant ## ## 1 8 4 TRUE ## 2 9 4 TRUE ## 3 10 4 TRUE ## 4 12 4 TRUE ## 5 13 4 TRUE ## 6 17 4 TRUE ## 7 17 6 TRUE ## 8 18 4 TRUE ## 9 19 4 TRUE ## 10 20 4 TRUE ## # ℹ 402 more rows has_constants %>% # filter(row <= 28) %>% ggplot(aes(col, row, fill = has_constant)) + geom_tile() + scale_y_reverse() + theme(legend.position = \"top\")"},{"path":"https://nacnudus.github.io/tidyxl/articles/smells.html","id":"detecting-deeply-nested-formulas","dir":"Articles","previous_headings":"","what":"Detecting deeply nested formulas","title":"Detecting Spreadsheet Smells with xlex()","text":"Using techniques detecting constants, map xlex() formulas spreadsheet, unnest result, filter tokens particular properties. case, interested level token, tells deeply token nested functions expressions. time, use another spreadsheet Enron corpus. First, illustration. Notice inside first function, level increases 1. Inside second function, level increases 2. Now let’s apply test formulas sheet. deepest level nesting turns 7, seen cells row 171. wonder formulas look like?","code":"xlex(\"MAX(3,MIN(2,4))\") ## root ## ¦-- MAX function ## °-- ( fun_open ## ¦-- 3 number ## ¦-- , separator ## ¦-- MIN function ## °-- ( fun_open ## ¦-- 2 number ## ¦-- , separator ## °-- 4 number ## °-- ) fun_close ## °-- ) fun_close # The original filename was \"albert_meyers__1__1-25act.xlsx\" sheet <- tidy_xlsx(system.file(\"extdata/enron-nested.xlsx\", package = \"tidyxl\"), \"Preschedule\")$data[[1]] ## Warning: 'tidy_xlsx()' is deprecated. ## Use 'xlsx_cells()' or 'xlsx_formats()' instead. deepest <- sheet %>% filter(!is.na(formula)) %>% mutate(tokens = map(formula, xlex)) %>% select(row, col, tokens) %>% unnest(tokens) %>% filter(level == max(level)) %>% distinct(row, col, level) deepest ## # A tibble: 48 × 3 ## row col level ## ## 1 171 2 7 ## 2 171 3 7 ## 3 171 4 7 ## 4 171 5 7 ## 5 171 6 7 ## 6 171 7 7 ## 7 171 8 7 ## 8 171 9 7 ## 9 171 10 7 ## 10 171 11 7 ## # ℹ 38 more rows sheet %>% filter(row == 171, col == 2) %>% pull(formula) # Aaaaaaaaaaarghhhhhhhh! ## [1] \"((IF((103-B$89)=103,0,(103-B$89)))+(IF((200-B$95)=200,0,(200-B$95)))+(IF((196-B$98)=196,0,(196-B$98)))+(IF((200-B$101)=200,0,(200-B$101)))+(IF((70-B$104)=70,0,(MIN(40,(70-B$104))))+(IF((78-B$109)=78,0,(MIN(50,(78-B$109)))))+(IF((103-B$114)=103,0,(MIN(66,(103-B$114)))))+(IF((195-B$119-B$124-B$129-B$134-B$139)=195,0,(MIN(70,(195-B$119-B$124-B$129-B$134-B$139)))))+(IF((64-B$144)=64,0,(MIN(50,(64-B$144)))))+(IF((48-B$149)=48,0,(MIN(20,(48-B$149)))))+(IF((44-B$154)=44,0,(MIN(20,(44-B$154)))))+(IF((130-B$159)=130,0,(MIN(20,(130-B$159)))))))\""},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"tidyxl","dir":"Articles","previous_headings":"","what":"tidyxl","title":"Tidyxl","text":"tidyxl imports non-tabular data Excel files R. exposes cell content, position, formatting comments tidy structure manipulation, especially unpivotr package. supports xml-based file formats ‘.xlsx’ ‘.xlsm’ via embedded RapidXML C++ library. support binary file formats ‘.xlsb’ ‘.xls’. also provides function xlex() tokenizing formulas. See vignette details. useful detecting ‘spreadsheet smells’ (poor practice embedding constants formulas, using deep levels nesting), understanding dependency structures within spreadsheets.","code":""},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"mailing-list","dir":"Articles","previous_headings":"tidyxl","what":"Mailing list","title":"Tidyxl","text":"bugs /issues, create new issue GitHub questions comments, please subscribe tidyxl-devel mailing list. must member post messages, anyone can read archived discussions.","code":""},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"installation","dir":"Articles","previous_headings":"tidyxl","what":"Installation","title":"Tidyxl","text":"","code":"devtools::install_github(\"nacnudus/tidyxl\")"},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"examples","dir":"Articles","previous_headings":"tidyxl","what":"Examples","title":"Tidyxl","text":"package includes spreadsheet, ‘titanic.xlsx’, contains following pivot table: multi-row column headers make difficult import. popular package importing spreadsheets coerces pivot table dataframe. treats second header row though observations. tidyxl doesn’t coerce pivot table data frame. Instead, represents cell row, describes cell’s address, value properties. structure, cells can found filtering. Specific sheets can requested using xlsx_cells(file, sheet), names sheets file given xlsx_sheet_names().","code":"ftable(Titanic, row.vars = 1:2) #> Age Child Adult #> Survived No Yes No Yes #> Class Sex #> 1st Male 0 5 118 57 #> Female 0 1 4 140 #> 2nd Male 0 11 154 14 #> Female 0 13 13 80 #> 3rd Male 35 13 387 75 #> Female 17 14 89 76 #> Crew Male 0 0 670 192 #> Female 0 0 3 20 titanic <- system.file(\"extdata/titanic.xlsx\", package = \"tidyxl\") readxl::read_excel(titanic) #> New names: #> • `` -> `...1` #> • `` -> `...2` #> • `` -> `...5` #> • `` -> `...7` #> # A tibble: 10 × 7 #> ...1 ...2 Age Child ...5 Adult ...7 #> #> 1 NA NA Survived No Yes No Yes #> 2 Class Sex NA NA NA NA NA #> 3 1st Male NA 0 5 118 57 #> 4 NA Female NA 0 1 4 140 #> 5 2nd Male NA 0 11 154 14 #> 6 NA Female NA 0 13 13 80 #> 7 3rd Male NA 35 13 387 75 #> 8 NA Female NA 17 14 89 76 #> 9 Crew Male NA 0 0 670 192 #> 10 NA Female NA 0 0 3 20 library(tidyxl) x <- xlsx_cells(titanic) dplyr::glimpse(x) #> Rows: 60 #> Columns: 24 #> $ sheet \"Sheet1\", \"Sheet1\", \"Sheet1\", \"Sheet1\", \"Sheet1\", … #> $ address \"C1\", \"D1\", \"E1\", \"F1\", \"G1\", \"C2\", \"D2\", \"E2\", \"F… #> $ row 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 4, 4, 4, 4, 4,… #> $ col 3, 4, 5, 6, 7, 3, 4, 5, 6, 7, 1, 2, 1, 2, 4, 5, 6,… #> $ is_blank FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, FAL… #> $ content \"0\", \"1\", NA, \"2\", NA, \"3\", \"4\", \"5\", \"4\", \"5\", \"6… #> $ data_type \"character\", \"character\", \"blank\", \"character\", \"b… #> $ error NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ logical NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ numeric NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ date NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N… #> $ character \"Age\", \"Child\", NA, \"Adult\", NA, \"Survived\", \"No\",… #> $ character_formatted [], [], , [… #> $ formula NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ is_array FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, F… #> $ formula_ref NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ formula_group NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ comment NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ height 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15… #> $ width 8.38, 8.38, 8.38, 8.38, 8.38, 8.38, 8.38, 8.38, 8.… #> $ row_outline_level 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,… #> $ col_outline_level 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,… #> $ style_format \"Normal\", \"Normal\", \"Normal\", \"Normal\", \"Normal\", … #> $ local_format_id 2, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 2, 3, 3, 1, 1, 1,… x[x$data_type == \"character\", c(\"address\", \"character\")] #> # A tibble: 22 × 2 #> address character #> #> 1 C1 Age #> 2 D1 Child #> 3 F1 Adult #> 4 C2 Survived #> 5 D2 No #> 6 E2 Yes #> 7 F2 No #> 8 G2 Yes #> 9 A3 Class #> 10 B3 Sex #> # ℹ 12 more rows x[x$row == 4, c(\"address\", \"character\", \"numeric\")] #> # A tibble: 6 × 3 #> address character numeric #> #> 1 A4 1st NA #> 2 B4 Male NA #> 3 D4 NA 0 #> 4 E4 NA 5 #> 5 F4 NA 118 #> 6 G4 NA 57"},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"formatting","dir":"Articles","previous_headings":"tidyxl > Examples","what":"Formatting","title":"Tidyxl","text":"original spreadsheet formatting applied cells. can also retrieved using tidyxl, xlsx_formats() function. Formatting available using columns local_format_id style_format indexes separate list--lists structure. ‘Local’ formatting common kind, applied individual cells. ‘Style’ formatting usually applied blocks cells, defines several formats . screenshot styles buttons Excel. Formatting can looked follows. see available kinds formats, use str(formats).","code":"# Bold formats <- xlsx_formats(titanic) formats$local$font$bold #> [1] FALSE TRUE FALSE FALSE x[x$local_format_id %in% which(formats$local$font$bold), c(\"address\", \"character\")] #> # A tibble: 4 × 2 #> address character #> #> 1 C1 Age #> 2 C2 Survived #> 3 A3 Class #> 4 B3 Sex # Yellow fill formats$local$fill$patternFill$fgColor$rgb #> [1] NA NA NA \"FFFFFF00\" x[x$local_format_id %in% which(formats$local$fill$patternFill$fgColor$rgb == \"FFFFFF00\"), c(\"address\", \"numeric\")] #> # A tibble: 2 × 2 #> address numeric #> #> 1 F11 3 #> 2 G11 20 # Styles by name formats$style$font$name[\"Normal\"] #> Normal #> \"Calibri\" head(x[x$style_format == \"Normal\", c(\"address\", \"character\")]) #> # A tibble: 6 × 2 #> address character #> #> 1 C1 Age #> 2 D1 Child #> 3 E1 NA #> 4 F1 Adult #> 5 G1 NA #> 6 C2 Survived # In-cell formatting is available in the `character_formatted` column as a data # frame, one row per substring. examples <- system.file(\"/extdata/examples.xlsx\", package = \"tidyxl\") xlsx_cells(examples)$character_formatted[77] #> [[1]] #> # A tibble: 16 × 14 #> character bold italic underline strike vertAlign size color_rgb color_theme #> #> 1 \"in-cell\" FALSE FALSE NA FALSE NA 0 NA NA #> 2 \"bold\" TRUE FALSE NA FALSE NA 0 FF000000 2 #> 3 \"italic\" FALSE TRUE NA FALSE NA 0 FF000000 2 #> 4 \"underli… FALSE FALSE single FALSE NA 0 FF000000 2 #> 5 \"underli… FALSE FALSE double FALSE NA 0 FF000000 2 #> 6 \"singlea… FALSE FALSE singleAc… FALSE NA 0 FF000000 2 #> 7 \"doublea… FALSE FALSE doubleAc… FALSE NA 0 FF000000 2 #> 8 \"striket… FALSE FALSE NA TRUE NA 0 FF000000 2 #> 9 \"subscri… FALSE FALSE NA FALSE subscript 0 FF000000 2 #> 10 \"supersc… FALSE FALSE NA FALSE superscr… 0 FF000000 2 #> 11 \"red\" FALSE FALSE NA FALSE NA 0 FFFF0000 NA #> 12 \"theme\" FALSE FALSE NA FALSE NA 0 FFC0504D 6 #> 13 \"tint\" FALSE FALSE NA FALSE NA 0 FFC0504D 6 #> 14 \"size\" FALSE FALSE NA FALSE NA 0 FFFF0000 NA #> 15 \"arial\" FALSE FALSE NA FALSE NA 0 FFFF0000 NA #> 16 \"UTF8Sté… FALSE FALSE NA FALSE NA 0 FFFF0000 NA #> # ℹ 5 more variables: color_indexed , color_tint , font , #> # family , scheme "},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"comments","dir":"Articles","previous_headings":"tidyxl > Examples","what":"Comments","title":"Tidyxl","text":"Comments available alongside cell values.","code":"x[!is.na(x$comment), c(\"address\", \"comment\")] #> # A tibble: 1 × 2 #> address comment #> #> 1 G11 All women in the crew worked in the victualling department."},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"formulas","dir":"Articles","previous_headings":"tidyxl > Examples","what":"Formulas","title":"Tidyxl","text":"Formulas available, quirks. top five cells show results formulas available usual columns error, logical, numeric, date, character.","code":"options(width = 120) y <- xlsx_cells(examples, \"Sheet1\") y[!is.na(y$formula), c(\"address\", \"formula\", \"is_array\", \"formula_ref\", \"formula_group\", \"error\", \"logical\", \"numeric\", \"date\", \"character\")] #> # A tibble: 32 × 10 #> address formula is_array formula_ref formula_group error logical numeric date character #> #> 1 A1 \"1/0\" FALSE NA NA #DIV/0! NA NA NA NA #> 2 A14 \"1=1\" FALSE NA NA NA TRUE NA NA NA #> 3 A15 \"A4+1\" FALSE NA NA NA NA 1338 NA NA #> 4 A16 \"DATE(2017,1,18)\" FALSE NA NA NA NA NA 2017-01-18 00:00:00 NA #> 5 A17 \"\\\"Hello, World!\\\"\" FALSE NA NA NA NA NA NA Hello, Wo… #> 6 A19 \"$A$18+1\" FALSE NA NA NA NA 2 NA NA #> 7 B19 \"A18+2\" FALSE NA NA NA NA 3 NA NA #> 8 A20 \"$A$18+1\" FALSE A20:A21 0 NA NA 2 NA NA #> 9 B20 \"A19+2\" FALSE B20:B21 1 NA NA 4 NA NA #> 10 A21 \"$A$18+1\" FALSE NA 0 NA NA 2 NA NA #> # ℹ 22 more rows"},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"shared-formulas","dir":"Articles","previous_headings":"tidyxl > Examples > Formulas","what":"Shared formulas","title":"Tidyxl","text":"Cells A20 A21 illustrate formulas normalised written file, using formula_ref formula_group columns. group cells whose formulas differ cell reference (e.g. “=A1+1”, “=A2+1”, “=A3+1”, etc.), one formula group written file, tidyxl infers formulas cells group must , relative positions.","code":""},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"array-formulas","dir":"Articles","previous_headings":"tidyxl > Examples > Formulas","what":"Array formulas","title":"Tidyxl","text":"two kinds array formulas: ones compute arrays, ones whose output array (cells). kinds distinguished spreadsheet programs curly braces, e.g. {SUM(A19:A21*B19:B21)}. tidyxl, curly braces ommitted (file ), instead is_array column value TRUE. first kind (compute arrays) illustrated cell A22. second kind (whose value spread across array cells) illustrated cells A23 A24. formula given top-left cell (A23), also cell describes range cells containing result, formula-ref column. results stored relevant cells (A23 A24). Unlike shared formulas, formula_group associate cells array formula’s result. need identify cells, use cellranger package formula_ref column.","code":""},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"formulas-referring-to-other-files","dir":"Articles","previous_headings":"tidyxl > Examples > Formulas","what":"Formulas referring to other files","title":"Tidyxl","text":"Cell A25 contains formula refers another file. [1] index table files. roadmap tidyxl includes de-referencing numbers.","code":""},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"tokenizing-formulas","dir":"Articles","previous_headings":"tidyxl > Examples > Formulas","what":"Tokenizing formulas","title":"Tidyxl","text":"function xlex() separates formulas tokens different types, gives depth within nested formula. name bad pun ‘Excel’ ‘lexer’. Try online demo install experimental lexl package run demo_lexl() locally. useful detecting spreadsheet smells, poor practices spreadsheet design, deep nests functions, embedding constants formulas. See vignette examples details.","code":"x <- xlex(\"MIN(3,MAX(2,A1))\") x #> root #> ¦-- MIN function #> °-- ( fun_open #> ¦-- 3 number #> ¦-- , separator #> ¦-- MAX function #> °-- ( fun_open #> ¦-- 2 number #> ¦-- , separator #> °-- A1 ref #> °-- ) fun_close #> °-- ) fun_close"},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"named-ranges","dir":"Articles","previous_headings":"tidyxl > Examples","what":"Named ranges","title":"Tidyxl","text":"Names imported xlsx_names(). Also called ‘named formulas’ ‘defined names’, usually used name particular cells ranges, making formulas refer readable. Ones ranges identifed is_range column (using is_range()), making easier match names cells returned xlsx_cells() – e.g. using cellranger package. scope name within particular sheet, rather global, sheet name given.","code":"xlsx_names(examples) #> rId sheet name formula comment hidden is_range #> 1 1 Sheet1 named_local_formula MAX(Sheet1!$A$129:$A$130)+1 FALSE FALSE #> 2 4 E09904.2 sheet_beyond_chart E09904.2!$A$1,E09904.2!$C$1 FALSE TRUE #> 3 NA intersection Sheet1!$B:$B Sheet1!$8:$8 FALSE TRUE #> 4 NA named_global_formula Sheet1!$A$129-1 FALSE FALSE #> 5 NA named_range Sheet1!$A$129 My comment FALSE TRUE"},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"data-validation-rules","dir":"Articles","previous_headings":"tidyxl > Examples","what":"Data validation rules","title":"Tidyxl","text":"Data validation rules imported xlsx_validation(). rules control values may entered cell, often used create drop-list cell. Read vignette details.","code":"xlsx_validation(examples) #> # A tibble: 15 × 14 #> sheet ref type operator formula1 formula2 allow_blank show_input_message prompt_title prompt_body #> #> 1 Sheet1 A106 whole between 0 9 TRUE TRUE message tit… message bo… #> 2 Sheet1 A108 list NA $B$108 NA TRUE TRUE NA NA #> 3 Sheet1 A110 date between 2017-01… 2017-01… TRUE TRUE NA NA #> 4 Sheet1 A111 time between 00:00:00 09:00:00 TRUE TRUE NA NA #> 5 Sheet1 A112 textLength between 0 9 TRUE TRUE NA NA #> 6 Sheet1 A114 whole notBetween 0 9 TRUE TRUE NA NA #> 7 Sheet1 A115,A121:A122 whole equal 0 NA TRUE TRUE NA NA #> 8 Sheet1 A116 whole notEqual 0 NA TRUE TRUE NA NA #> 9 Sheet1 A117 whole greaterTh… 0 NA TRUE TRUE NA NA #> 10 Sheet1 A119 whole greaterTh… 0 NA TRUE TRUE NA NA #> 11 Sheet1 A120 whole lessThanO… 0 NA TRUE TRUE NA NA #> 12 Sheet1 A118 whole lessThan 0 NA TRUE TRUE NA NA #> 13 Sheet1 A107 decimal notBetween 0 9 FALSE FALSE NA NA #> 14 Sheet1 A113 custom NA A113<=L… NA TRUE TRUE NA NA #> 15 Sheet1 A109 list NA $B$108 NA TRUE TRUE NA NA #> # ℹ 4 more variables: show_error_message , error_title , error_body , error_symbol "},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"philosophy","dir":"Articles","previous_headings":"tidyxl","what":"Philosophy","title":"Tidyxl","text":"Information many spreadsheets easily imported R. ? R packages import spreadsheets difficulty unless layout spreadsheet conforms strict definition ‘table’, e.g.: observations rows variables columns single header row information represented characters, whether textual, logical, numeric rules designed eliminate ambiguity interpretation information. spreadsheeting software relaxes rules trade ambiguity expression via media: proximity (headers, .e. first value top column) formatting (colours borders) Humans can usually resolve ambiguities contextual knowledge, computers limited ignorance. Programmers hampered : language’s expressiveness loss information transfer spreadsheet programming library Information lost software discards order force data tabular form. Sometimes date formatting retained, mostly formatting lost, position inferred . tidyxl addresses programmer’s problems discarding information. imports content, position formatting cells, leaving user associate different forms information, re-encode tabular form without loss. unpivotr package developed assist step.","code":""},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"similar-projects","dir":"Articles","previous_headings":"tidyxl","what":"Similar projects","title":"Tidyxl","text":"tidyxl originally derived readxl still contains code, hence inherits GPL-3 licence. readxl intended importing tabular data single row column headers, whereas tidyxl general, less magic. rsheets project several R packages early stages importing spreadsheet information Excel Google Sheets R, manipulating , potentially parsing processing formulas writing spreadsheet files. particular, jailbreaker attempts extract non-tabular data spreadsheets tabular structures automatically via clever algorithms. tidyxl differs rsheets scope (tidyxl never import charts, example), implementation (tidyxl implemented mainly C++ quite fast, little slower readxl). unpivotr package related tidyxl provides tools unpivoting complex non-tabular data layouts using AI (intelligence, artificial intelligence). way corresponds jailbreaker, different philosophy.","code":""},{"path":"https://nacnudus.github.io/tidyxl/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Duncan Garmonsway. Author, maintainer. Hadley Wickham. Contributor. Author included readxl fragments Jenny Bryan. Contributor. Author included readxl fragments RStudio. Copyright holder. Copyright holder included readxl fragments Marcin Kalicinski. Contributor, copyright holder. Author included RapidXML code","code":""},{"path":"https://nacnudus.github.io/tidyxl/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Garmonsway D (2023). tidyxl: Read Untidy Excel Files. https://github.com/nacnudus/tidyxl, https://nacnudus.github.io/tidyxl/.","code":"@Manual{, title = {tidyxl: Read Untidy Excel Files}, author = {Duncan Garmonsway}, year = {2023}, note = {https://github.com/nacnudus/tidyxl, https://nacnudus.github.io/tidyxl/}, }"},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"tidyxl","dir":"","previous_headings":"","what":"Read Untidy Excel Files","title":"Read Untidy Excel Files","text":"tidyxl imports non-tabular data Excel files R. exposes cell content, position, formatting comments tidy structure manipulation, especially unpivotr package. supports xml-based file formats ‘.xlsx’ ‘.xlsm’ via embedded RapidXML C++ library. support binary file formats ‘.xlsb’ ‘.xls’. also provides function xlex() tokenizing formulas. See vignette details. useful detecting ‘spreadsheet smells’ (poor practice embedding constants formulas, using deep levels nesting), understanding dependency structures within spreadsheets.","code":""},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"make-cells-tidy","dir":"","previous_headings":"","what":"Make cells tidy","title":"Read Untidy Excel Files","text":"Tidyxl represents cell one row dataframe. Like . can tidy cells? best places start : Spreadsheet Munging Strategies, free, online cookbook using tidyxl unpivotr Screencasts YouTube. Worked examples GitHub. Otherwise see examples . Breaking changes version 1.0.0 release breaking changes. See NEWS.md details. previous version can installed follows.","code":"devtools::install_version(\"tidyxl\", version = \"0.2.3\", repos = \"http://cran.us.r-project.org\")"},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"Read Untidy Excel Files","text":"","code":"devtools::install_github(\"nacnudus/tidyxl\")"},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"examples","dir":"","previous_headings":"","what":"Examples","title":"Read Untidy Excel Files","text":"package includes spreadsheet, ‘titanic.xlsx’, contains following pivot table: multi-row column headers make difficult import. popular package importing spreadsheets coerces pivot table dataframe. treats second header row though observations. tidyxl doesn’t coerce pivot table data frame. Instead, represents cell row, describes cell’s address, value properties. structure, cells can found filtering. Specific sheets can requested using xlsx_cells(file, sheet), names sheets file given xlsx_sheet_names().","code":"ftable(Titanic, row.vars = 1:2) #> Age Child Adult #> Survived No Yes No Yes #> Class Sex #> 1st Male 0 5 118 57 #> Female 0 1 4 140 #> 2nd Male 0 11 154 14 #> Female 0 13 13 80 #> 3rd Male 35 13 387 75 #> Female 17 14 89 76 #> Crew Male 0 0 670 192 #> Female 0 0 3 20 titanic <- system.file(\"extdata/titanic.xlsx\", package = \"tidyxl\") readxl::read_excel(titanic) #> New names: #> • `` -> `...1` #> • `` -> `...2` #> • `` -> `...5` #> • `` -> `...7` #> # A tibble: 10 × 7 #> ...1 ...2 Age Child ...5 Adult ...7 #> #> 1 Survived No Yes No Yes #> 2 Class Sex #> 3 1st Male 0 5 118 57 #> 4 Female 0 1 4 140 #> 5 2nd Male 0 11 154 14 #> 6 Female 0 13 13 80 #> 7 3rd Male 35 13 387 75 #> 8 Female 17 14 89 76 #> 9 Crew Male 0 0 670 192 #> 10 Female 0 0 3 20 library(tidyxl) x <- xlsx_cells(titanic) dplyr::glimpse(x) #> Rows: 60 #> Columns: 24 #> $ sheet \"Sheet1\", \"Sheet1\", \"Sheet1\", \"Sheet1\", \"Sheet1\", … #> $ address \"C1\", \"D1\", \"E1\", \"F1\", \"G1\", \"C2\", \"D2\", \"E2\", \"F… #> $ row 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 4, 4, 4, 4, 4,… #> $ col 3, 4, 5, 6, 7, 3, 4, 5, 6, 7, 1, 2, 1, 2, 4, 5, 6,… #> $ is_blank FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, FAL… #> $ content \"0\", \"1\", NA, \"2\", NA, \"3\", \"4\", \"5\", \"4\", \"5\", \"6… #> $ data_type \"character\", \"character\", \"blank\", \"character\", \"b… #> $ error NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ logical NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ numeric NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ date NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N… #> $ character \"Age\", \"Child\", NA, \"Adult\", NA, \"Survived\", \"No\",… #> $ character_formatted [], [], , [… #> $ formula NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ is_array FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, F… #> $ formula_ref NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ formula_group NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ comment NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ height 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15… #> $ width 8.38, 8.38, 8.38, 8.38, 8.38, 8.38, 8.38, 8.38, 8.… #> $ row_outline_level 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,… #> $ col_outline_level 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,… #> $ style_format \"Normal\", \"Normal\", \"Normal\", \"Normal\", \"Normal\", … #> $ local_format_id 2, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 2, 3, 3, 1, 1, 1,… x[x$data_type == \"character\", c(\"address\", \"character\")] #> # A tibble: 22 × 2 #> address character #> #> 1 C1 Age #> 2 D1 Child #> 3 F1 Adult #> 4 C2 Survived #> 5 D2 No #> 6 E2 Yes #> 7 F2 No #> 8 G2 Yes #> 9 A3 Class #> 10 B3 Sex #> # … with 12 more rows x[x$row == 4, c(\"address\", \"character\", \"numeric\")] #> # A tibble: 6 × 3 #> address character numeric #> #> 1 A4 1st NA #> 2 B4 Male NA #> 3 D4 0 #> 4 E4 5 #> 5 F4 118 #> 6 G4 57"},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"formatting","dir":"","previous_headings":"Examples","what":"Formatting","title":"Read Untidy Excel Files","text":"original spreadsheet formatting applied cells. can also retrieved using tidyxl, xlsx_formats() function. Formatting available using columns local_format_id style_format indexes separate list--lists structure. ‘Local’ formatting common kind, applied individual cells. ‘Style’ formatting usually applied blocks cells, defines several formats . screenshot styles buttons Excel. Formatting can looked follows. see available kinds formats, use str(formats).","code":"# Bold formats <- xlsx_formats(titanic) formats$local$font$bold #> [1] FALSE TRUE FALSE FALSE x[x$local_format_id %in% which(formats$local$font$bold), c(\"address\", \"character\")] #> # A tibble: 4 × 2 #> address character #> #> 1 C1 Age #> 2 C2 Survived #> 3 A3 Class #> 4 B3 Sex # Yellow fill formats$local$fill$patternFill$fgColor$rgb #> [1] NA NA NA \"FFFFFF00\" x[x$local_format_id %in% which(formats$local$fill$patternFill$fgColor$rgb == \"FFFFFF00\"), c(\"address\", \"numeric\")] #> # A tibble: 2 × 2 #> address numeric #> #> 1 F11 3 #> 2 G11 20 # Styles by name formats$style$font$name[\"Normal\"] #> Normal #> \"Calibri\" head(x[x$style_format == \"Normal\", c(\"address\", \"character\")]) #> # A tibble: 6 × 2 #> address character #> #> 1 C1 Age #> 2 D1 Child #> 3 E1 #> 4 F1 Adult #> 5 G1 #> 6 C2 Survived # In-cell formatting is available in the `character_formatted` column as a data # frame, one row per substring. examples <- system.file(\"/extdata/examples.xlsx\", package = \"tidyxl\") xlsx_cells(examples)$character_formatted[77] #> [[1]] #> # A tibble: 16 × 14 #> character bold italic under…¹ strike vertA…² size color…³ color…⁴ color…⁵ #> #> 1 \"in-cell\" FALSE FALSE FALSE 0 NA NA #> 2 \"bold\" TRUE FALSE FALSE 0 FF0000… 2 NA #> 3 \"italic\" FALSE TRUE FALSE 0 FF0000… 2 NA #> 4 \"underline\" FALSE FALSE single FALSE 0 FF0000… 2 NA #> 5 \"underline… FALSE FALSE double FALSE 0 FF0000… 2 NA #> 6 \"singleacc… FALSE FALSE single… FALSE 0 FF0000… 2 NA #> 7 \"doubleacc… FALSE FALSE double… FALSE 0 FF0000… 2 NA #> 8 \"strikethr… FALSE FALSE TRUE 0 FF0000… 2 NA #> 9 \"subscript\" FALSE FALSE FALSE subscr… 0 FF0000… 2 NA #> 10 \"superscri… FALSE FALSE FALSE supers… 0 FF0000… 2 NA #> 11 \"red\" FALSE FALSE FALSE 0 FFFF00… NA NA #> 12 \"theme\" FALSE FALSE FALSE 0 FFC050… 6 NA #> 13 \"tint\" FALSE FALSE FALSE 0 FFC050… 6 NA #> 14 \"size\" FALSE FALSE FALSE 0 FFFF00… NA NA #> 15 \"arial\" FALSE FALSE FALSE 0 FFFF00… NA NA #> 16 \"UTF8Stéph… FALSE FALSE FALSE 0 FFFF00… NA NA #> # … with 4 more variables: color_tint , font , family , #> # scheme , and abbreviated variable names ¹​underline, ²​vertAlign, #> # ³​color_rgb, ⁴​color_theme, ⁵​color_indexed"},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"comments","dir":"","previous_headings":"Examples","what":"Comments","title":"Read Untidy Excel Files","text":"Comments available alongside cell values.","code":"x[!is.na(x$comment), c(\"address\", \"comment\")] #> # A tibble: 1 × 2 #> address comment #> #> 1 G11 All women in the crew worked in the victualling department."},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"formulas","dir":"","previous_headings":"Examples","what":"Formulas","title":"Read Untidy Excel Files","text":"Formulas available, quirks. top five cells show results formulas available usual columns error, logical, numeric, date, character.","code":"options(width = 120) y <- xlsx_cells(examples, \"Sheet1\") y[!is.na(y$formula), c(\"address\", \"formula\", \"is_array\", \"formula_ref\", \"formula_group\", \"error\", \"logical\", \"numeric\", \"date\", \"character\")] #> # A tibble: 32 × 10 #> address formula is_array formula_ref formula_group error logical numeric date character #> #> 1 A1 \"1/0\" FALSE NA #DIV/0! NA NA NA #> 2 A14 \"1=1\" FALSE NA TRUE NA NA #> 3 A15 \"A4+1\" FALSE NA NA 1338 NA #> 4 A16 \"DATE(2017,1,18)\" FALSE NA NA NA 2017-01-18 00:00:00 #> 5 A17 \"\\\"Hello, World!\\\"\" FALSE NA NA NA NA Hello, Wo… #> 6 A19 \"$A$18+1\" FALSE NA NA 2 NA #> 7 B19 \"A18+2\" FALSE NA NA 3 NA #> 8 A20 \"$A$18+1\" FALSE A20:A21 0 NA 2 NA #> 9 B20 \"A19+2\" FALSE B20:B21 1 NA 4 NA #> 10 A21 \"$A$18+1\" FALSE 0 NA 2 NA #> # … with 22 more rows"},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"shared-formulas","dir":"","previous_headings":"Examples > Formulas","what":"Shared formulas","title":"Read Untidy Excel Files","text":"Cells A20 A21 illustrate formulas normalised written file, using formula_ref formula_group columns. group cells whose formulas differ cell reference (e.g. “=A1+1”, “=A2+1”, “=A3+1”, etc.), one formula group written file, tidyxl infers formulas cells group must , relative positions.","code":""},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"array-formulas","dir":"","previous_headings":"Examples > Formulas","what":"Array formulas","title":"Read Untidy Excel Files","text":"two kinds array formulas: ones compute arrays, ones whose output array (cells). kinds distinguished spreadsheet programs curly braces, e.g. {SUM(A19:A21*B19:B21)}. tidyxl, curly braces ommitted (file ), instead is_array column value TRUE. first kind (compute arrays) illustrated cell A22. second kind (whose value spread across array cells) illustrated cells A23 A24. formula given top-left cell (A23), also cell describes range cells containing result, formula-ref column. results stored relevant cells (A23 A24). Unlike shared formulas, formula_group associate cells array formula’s result. need identify cells, use cellranger package formula_ref column.","code":""},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"formulas-referring-to-other-files","dir":"","previous_headings":"Examples > Formulas","what":"Formulas referring to other files","title":"Read Untidy Excel Files","text":"Cell A25 contains formula refers another file. [1] index table files. roadmap tidyxl includes de-referencing numbers.","code":""},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"tokenizing-formulas","dir":"","previous_headings":"Examples > Formulas","what":"Tokenizing formulas","title":"Read Untidy Excel Files","text":"function xlex() separates formulas tokens different types, gives depth within nested formula. name bad pun ‘Excel’ ‘lexer’. Try online demo, install experimental lexl package run demo_lexl() locally. useful detecting spreadsheet smells, poor practices spreadsheet design, deep nests functions, embedding constants formulas. See vignette examples details.","code":"x <- xlex(\"MIN(3,MAX(2,A1))\") x #> root #> ¦-- MIN function #> °-- ( fun_open #> ¦-- 3 number #> ¦-- , separator #> ¦-- MAX function #> °-- ( fun_open #> ¦-- 2 number #> ¦-- , separator #> °-- A1 ref #> °-- ) fun_close #> °-- ) fun_close"},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"named-ranges","dir":"","previous_headings":"Examples","what":"Named ranges","title":"Read Untidy Excel Files","text":"Names imported xlsx_names(). Also called ‘named formulas’ ‘defined names’, usually used name particular cells ranges, making formulas refer readable. Ones ranges identifed is_range column (using is_range()), making easier match names cells returned xlsx_cells() – e.g. using cellranger package. scope name within particular sheet, rather global, sheet name given.","code":"xlsx_names(examples) #> rId sheet name formula comment hidden is_range #> 1 1 Sheet1 named_local_formula MAX(Sheet1!$A$129:$A$130)+1 FALSE FALSE #> 2 4 E09904.2 sheet_beyond_chart E09904.2!$A$1,E09904.2!$C$1 FALSE TRUE #> 3 NA intersection Sheet1!$B:$B Sheet1!$8:$8 FALSE TRUE #> 4 NA named_global_formula Sheet1!$A$129-1 FALSE FALSE #> 5 NA named_range Sheet1!$A$129 My comment FALSE TRUE"},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"data-validation-rules","dir":"","previous_headings":"Examples","what":"Data validation rules","title":"Read Untidy Excel Files","text":"Data validation rules imported xlsx_validation(). rules control values may entered cell, often used create drop-list cell. Read vignette details.","code":"xlsx_validation(examples) #> # A tibble: 15 × 14 #> sheet ref type opera…¹ formu…² formu…³ allow…⁴ show_…⁵ promp…⁶ promp…⁷ show_…⁸ error…⁹ error…˟ error…˟ #> #> 1 Sheet1 A106 whole between 0 9 TRUE TRUE messag… messag… TRUE error … error … stop #> 2 Sheet1 A108 list $B$108 TRUE TRUE TRUE warning #> 3 Sheet1 A110 date between 2017-0… 2017-0… TRUE TRUE TRUE stop #> 4 Sheet1 A111 time between 00:00:… 09:00:… TRUE TRUE TRUE stop #> 5 Sheet1 A112 textLe… between 0 9 TRUE TRUE TRUE stop #> 6 Sheet1 A114 whole notBet… 0 9 TRUE TRUE TRUE stop #> 7 Sheet1 A115,A121:A122 whole equal 0 TRUE TRUE TRUE stop #> 8 Sheet1 A116 whole notEqu… 0 TRUE TRUE TRUE stop #> 9 Sheet1 A117 whole greate… 0 TRUE TRUE TRUE stop #> 10 Sheet1 A119 whole greate… 0 TRUE TRUE TRUE stop #> 11 Sheet1 A120 whole lessTh… 0 TRUE TRUE TRUE stop #> 12 Sheet1 A118 whole lessTh… 0 TRUE TRUE TRUE stop #> 13 Sheet1 A107 decimal notBet… 0 9 FALSE FALSE FALSE stop #> 14 Sheet1 A113 custom A113<=… TRUE TRUE TRUE stop #> 15 Sheet1 A109 list $B$108 TRUE TRUE TRUE inform… #> # … with abbreviated variable names ¹​operator, ²​formula1, ³​formula2, ⁴​allow_blank, ⁵​show_input_message, ⁶​prompt_title, #> # ⁷​prompt_body, ⁸​show_error_message, ⁹​error_title, ˟​error_body, ˟​error_symbol"},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"philosophy","dir":"","previous_headings":"","what":"Philosophy","title":"Read Untidy Excel Files","text":"Information many spreadsheets easily imported R. ? R packages import spreadsheets difficulty unless layout spreadsheet conforms strict definition ‘table’, e.g.: observations rows variables columns single header row information represented characters, whether textual, logical, numeric rules designed eliminate ambiguity interpretation information. spreadsheeting software relaxes rules trade ambiguity expression via media: proximity (headers, .e. first value top column) formatting (colours borders) Humans can usually resolve ambiguities contextual knowledge, computers limited ignorance. Programmers hampered : language’s expressiveness loss information transfer spreadsheet programming library Information lost software discards order force data tabular form. Sometimes date formatting retained, mostly formatting lost, position inferred . tidyxl addresses programmer’s problems discarding information. imports content, position formatting cells, leaving user associate different forms information, re-encode tabular form without loss. unpivotr package developed assist step.","code":""},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"similar-projects","dir":"","previous_headings":"","what":"Similar projects","title":"Read Untidy Excel Files","text":"tidyxl originally derived readxl still contains code, hence inherits GPL-3 licence. readxl intended importing tabular data single row column headers, whereas tidyxl general, less magic. rsheets project several R packages early stages importing spreadsheet information Excel Google Sheets R, manipulating , potentially parsing processing formulas writing spreadsheet files. particular, jailbreaker attempts extract non-tabular data spreadsheets tabular structures automatically via clever algorithms. tidyxl differs rsheets scope (tidyxl never import charts, example), implementation (tidyxl implemented mainly C++ quite fast, little slower readxl). unpivotr package related tidyxl provides tools unpivoting complex non-tabular data layouts using AI (intelligence, artificial intelligence). way corresponds jailbreaker, different philosophy.","code":""},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"mailing-list","dir":"","previous_headings":"","what":"Mailing list","title":"Read Untidy Excel Files","text":"bugs /issues, create new issue GitHub questions comments, please subscribe tidyxl-devel mailing list. must member post messages, anyone can read archived discussions.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/excel_functions.html","id":null,"dir":"Reference","previous_headings":"","what":"Names of all Excel functions — excel_functions","title":"Names of all Excel functions — excel_functions","text":"dataset containing names functions available Excel. useful identifying user-defined functions formulas tokenized xlex().","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/excel_functions.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Names of all Excel functions — excel_functions","text":"","code":"excel_functions"},{"path":"https://nacnudus.github.io/tidyxl/reference/excel_functions.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Names of all Excel functions — excel_functions","text":"character vector length 600.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/excel_functions.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Names of all Excel functions — excel_functions","text":"Pages 26--27 Microsoft's document \"Excel (.xlsx) extensions office openxml spreadsheetml file format p.24\" https://docs.microsoft.com/en-us/openspecs/office_standards/ms-xlsx/2c5dee00-eff2-4b22-92b6-0738acd4475e, revision 8.0 2017-06-20.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/excel_functions.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Names of all Excel functions — excel_functions","text":"Note includes future function names already reserved.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/is_date_format.html","id":null,"dir":"Reference","previous_headings":"","what":"Test that Excel number formats are date formats — is_date_format","title":"Test that Excel number formats are date formats — is_date_format","text":"is_date_format() tests whether Excel number format string resolve date Excel. example, number format string \"yyyy-mm-dd\" resolve date, whereas string \"0.0\\\\%\" . useful cell formula contains number formatting string (e.g. TEXT(45678,\"yyyy\")), need know constant 45678 date order recover full resolution (rather parsing character output \"2025\" year). used internally convert value cell correct data type.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/is_date_format.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Test that Excel number formats are date formats — is_date_format","text":"","code":"is_date_format(x)"},{"path":"https://nacnudus.github.io/tidyxl/reference/is_date_format.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Test that Excel number formats are date formats — is_date_format","text":"x character vector number format strings","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/is_date_format.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Test that Excel number formats are date formats — is_date_format","text":"","code":"is_date_format(c(\"yyyy-mm-dd\", \"0.0%\", \"h:m:s\", \"£#,##0;[Red]-£#,##0\")) #> [1] TRUE FALSE TRUE FALSE"},{"path":"https://nacnudus.github.io/tidyxl/reference/is_range.html","id":null,"dir":"Reference","previous_headings":"","what":"Test that Excel formulas are ranges — is_range","title":"Test that Excel formulas are ranges — is_range","text":"is_range() tests whether Excel formula range. formula like A1 range, whereas formula like MAX(A1,2) . Formulas evaluated, returns FALSE formulas eventually resolve arrange (e.g. INDEX(A1:A10,2)) immediately range.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/is_range.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Test that Excel formulas are ranges — is_range","text":"","code":"is_range(x)"},{"path":"https://nacnudus.github.io/tidyxl/reference/is_range.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Test that Excel formulas are ranges — is_range","text":"x character vector formulas","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/is_range.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Test that Excel formulas are ranges — is_range","text":"","code":"x <- c(\"A1\", \"Sheet1!A1\", \"[0]Sheet1!A1\", \"A1,A2\", \"A:A 3:3\", \"MAX(A1,2)\") is_range(x) #> [1] TRUE TRUE TRUE TRUE TRUE FALSE"},{"path":"https://nacnudus.github.io/tidyxl/reference/maybe_xlsx.html","id":null,"dir":"Reference","previous_headings":"","what":"Determine file format — maybe_xlsx","title":"Determine file format — maybe_xlsx","text":"Whether file may xlsx, xlsm, xltx xltm (rather xls xlt), based file signature \"magic number\", rather filename extension.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/maybe_xlsx.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Determine file format — maybe_xlsx","text":"","code":"maybe_xlsx(path)"},{"path":"https://nacnudus.github.io/tidyxl/reference/maybe_xlsx.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Determine file format — maybe_xlsx","text":"path File path","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/maybe_xlsx.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Determine file format — maybe_xlsx","text":"Logicial","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/maybe_xlsx.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Determine file format — maybe_xlsx","text":"'maybe', '', xlsx magic number common zip files, specific xlsx files. inverse, 'is_xls' possible either, xls magic number common Microsoft Office files .doc .ppt. uses logic Jenny Bryan's commit readxl package.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/maybe_xlsx.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Determine file format — maybe_xlsx","text":"","code":"examples_xlsx <- system.file(\"extdata/examples.xlsx\", package = \"tidyxl\") examples_xlsm <- system.file(\"extdata/examples.xlsm\", package = \"tidyxl\") examples_xltx <- system.file(\"extdata/examples.xltx\", package = \"tidyxl\") examples_xltm <- system.file(\"extdata/examples.xltm\", package = \"tidyxl\") examples_xlsb <- system.file(\"extdata/examples.xlsb\", package = \"tidyxl\") examples_xls <- system.file(\"extdata/examples.xls\", package = \"tidyxl\") maybe_xlsx(examples_xlsx) #> [1] TRUE maybe_xlsx(examples_xlsm) #> [1] TRUE maybe_xlsx(examples_xltx) #> [1] TRUE maybe_xlsx(examples_xltm) #> [1] TRUE maybe_xlsx(examples_xlsb) #> [1] TRUE maybe_xlsx(examples_xls) #> [1] FALSE"},{"path":"https://nacnudus.github.io/tidyxl/reference/tidy_xlsx.html","id":null,"dir":"Reference","previous_headings":"","what":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","title":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","text":"tidy_xlsx() deprecated. Please use xlsx_cells() xlsx_formats() instead. tidy_xlsx() imports data spreadsheets without coercing rectangle. cell represented row data frame, giving cell's address, contents, formula, height, width, keys look cell's formatting adjacent data structure within list returned function.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/tidy_xlsx.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","text":"","code":"tidy_xlsx(path, sheets = NA)"},{"path":"https://nacnudus.github.io/tidyxl/reference/tidy_xlsx.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","text":"path Path xlsx file. sheets Sheets read. Either character vector (names sheets), integer vector (positions sheets), NA (default, sheets).","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/tidy_xlsx.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","text":"list data within sheet ($data), formatting applied cell ($formats). sheet's data returned data frames, one per sheet, sheet name. example, data sheet named 'Worksheet' x$data$Worksheet. data frame following columns: address cell address A1 notation. row row number cell address (integer). col column number cell address (integer). is_blank Whether cell value data_type type cell, referring following columns: error, logical, numeric, date, character, blank. error error value cell. logical boolean value cell. numeric numeric value cell. date date value cell. character string value cell. character_formatted data frame substrings individual formatting. formula formula cell (see 'Details'). is_array Whether formula array formula. formula_ref address range cells group array formula shared formula applies (see 'Details'). formula_group formula group cell belongs (see 'Details'). comment text comment attached cell. height height cell's row, Excel's units. width width cell's column, Excel's units. style_format index table style formats x$formats$style (see 'Details'). local_format_id index table local cell formats x$formats$local (see 'Details').","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/tidy_xlsx.html","id":"formula","dir":"Reference","previous_headings":"","what":"Formula","title":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","text":"cell formula, value 'content' column result formula last time evaluated. Certain groups cells may share formula differs addresses referred formula; groups identified index, 'formula_group'. xlsx (Excel) file format records formula one cell group. xlsx_cells() propagates formulas cells group, making necessary changes relative addresses formula. Array formulas may also apply group cells, identified address 'formula_ref', xlsx (Excel) file format records formula one cell group. xlsx_cells() propagates formulas cells group. Unlike shared formulas, changes addresses array formulas necessary. Formulas refer workbooks currently name workbooks directly, instead via indices [1]. planned dereference .","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/tidy_xlsx.html","id":"formatting","dir":"Reference","previous_headings":"","what":"Formatting","title":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","text":"Cell formatting returned x$formats. two types scopes formatting: 'style' formatting, Excel's built-styles 'normal', 'bad', etc., 'local' formatting, overrides particular elements style, e.g. making bold. types returned x$formats$style x$formats$local, identical structures. look local formatting given cell, take cell's 'local_format_id' value (x$data$Sheet1[1, \"local_format_id\"]), use index format structure. E.g. look font size, x$formats$local$font$size[local_format_id]. see available formats, type str(x$formats$local). Colours may recorded three ways: hexadecimal RGB string without alpha, 'indexed' colour, index 'theme'. tidy_xlsx dereferences 'indexed' 'theme' colours hexadecimal RGB string representation, standardises RGB strings alpha channel first two characters. 'index' 'theme' name still provided. filter RGB string, look RGB values spreadsheet program (e.g. Excel, LibreOffice, Gnumeric), use grDevices::rgb() function convert hexadecimal string. Put alpha value first, e.g. Strings can formatted within cell, single cell can contain substrings different formatting. -cell formatting available column character_formatted, list-column data frames. row data frame describes substring formatting. cells without character value, character_formatted NULL, processing might need filter NULLs first.","code":"A <- 1; R <- 0.5; G <- 0; B <- 0 rgb(A, R, G, B) # [1] \"#FF800000\""},{"path":"https://nacnudus.github.io/tidyxl/reference/tidy_xlsx.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","text":"cell two 'values': content, sometimes also formula. also formatting applied 'style' level, can locally overridden.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/tidy_xlsx.html","id":"content","dir":"Reference","previous_headings":"","what":"Content","title":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","text":"Depending cell, content may numeric value 365 365.25, may represent date/datetime one Excel's date/datetime systems, may index internal table strings. tidy_xlsx() attempts infer correct data type cell, returning value appropriate column (error, logical, numeric, date, character). case cleverness unhelpful, unparsed value type information available 'content' 'type' columns.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/tidy_xlsx.html","id":"formula-1","dir":"Reference","previous_headings":"","what":"Formula","title":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","text":"cell formula, value 'content' column result formula last time evaluated. Certain groups cells may share formula differs addresses referred formula; groups identified index, 'formula_group'. xlsx (Excel) file format records formula one cell group, tidy_xlsx() propagates formula cells group, making necessary changes relative addresses formula. Array formulas may also apply group cells, identified address 'formula_ref', xlsx (Excel) file format records formula one cell group. Unlike ordinary formulas, tidy_xlsx() propagate cells group. Formulas refer workbooks currently name workbooks directly, instead via indices [1]. planned dereference .","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/tidy_xlsx.html","id":"formatting-1","dir":"Reference","previous_headings":"","what":"Formatting","title":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","text":"Cell formatting returned x$formats. two types formatting: 'style' formatting, Excel's built-styles 'normal', 'bad', etc., 'local' formatting, overrides style. returned x$formats$style x$formats$local, identical structures. look local formatting given cell, take cell's 'local_format_id' value (x$data$Sheet1[1, \"local_format_id\"]), use index format structure. E.g. look font size, x$formats$local$font$size[local_format_id]. see available formats, type str(x$formats$local).","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/tidy_xlsx.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","text":"","code":"if (FALSE) { examples <- system.file(\"extdata/examples.xlsx\", package = \"tidyxl\") # All sheets str(tidy_xlsx(examples)$data) # Specific sheet either by position or by name str(tidy_xlsx(examples, 2)$data) str(tidy_xlsx(examples, \"Sheet1\")$data) # Data (cell values) x <- tidy_xlsx(examples) str(x$data$Sheet1) # Formatting str(x$formats$local) # The formats of particular cells can be retrieved like this: Sheet1 <- x$data$Sheet1 x$formats$style$font$bold[Sheet1$style_format] x$formats$local$font$bold[Sheet1$local_format_id] # To filter for cells of a particular format, first filter the formats to get # the relevant indices, and then filter the cells by those indices. bold_indices <- which(x$formats$local$font$bold) Sheet1[Sheet1$local_format_id %in% bold_indices, ] # In-cell formatting is available in the `character_formatted` column as a # data frame, one row per substring. tidy_xlsx(examples)$data$Sheet1$character_formatted[77] }"},{"path":"https://nacnudus.github.io/tidyxl/reference/tidyxl-package.html","id":null,"dir":"Reference","previous_headings":"","what":"tidyxl: Import xlsx (Excel) spreadsheet data and formatting into tidy structures. — tidyxl-package","title":"tidyxl: Import xlsx (Excel) spreadsheet data and formatting into tidy structures. — tidyxl-package","text":"Tidyxl imports data spreadsheets without coercing rectangle, retains information encoded cell formatting (e.g. font/fill/border). data structure compatible 'unpivotr' package recognising information expressed relative cell positions cell formatting, re-expressing tidy way.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/tidyxl-package.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"tidyxl: Import xlsx (Excel) spreadsheet data and formatting into tidy structures. — tidyxl-package","text":"xlsx_cells() Import cells xlsx file. xlsx_formats() Import formatting xlsx file. xlsx_sheet_names() List names sheets xlsx file. xlsx_names() Import names definitions named ranges (aka 'named formulas', 'defined names') xlsx file. is_range() Test whether 'name' xlsx_names() refers range . xlsx_validation() Import cell input validation rules (e.g. 'must drop-list') xlsx file. xlsx_colour_standard() data frame standard colour names RGB values. xlsx_colour_theme() Imports data frame theme colour names RGB values xlsx file. xlex() Tokenise (lex) Excel formula.","code":""},{"path":[]},{"path":"https://nacnudus.github.io/tidyxl/reference/tidyxl-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"tidyxl: Import xlsx (Excel) spreadsheet data and formatting into tidy structures. — tidyxl-package","text":"Maintainer: Duncan Garmonsway nacnudus@gmail.com contributors: Hadley Wickham (Author included readxl fragments) [contributor] Jenny Bryan (Author included readxl fragments) [contributor] RStudio (Copyright holder included readxl fragments) [copyright holder] Marcin Kalicinski (Author included RapidXML code) [contributor, copyright holder]","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlex.html","id":null,"dir":"Reference","previous_headings":"","what":"Parse xlsx (Excel) formulas into tokens — xlex","title":"Parse xlsx (Excel) formulas into tokens — xlex","text":"xlex takes Excel formula separates tokens. name bad pun 'Excel' 'lexer'. returns dataframe, one row per token, giving token , type (e.g. number, error), level. level number show depth token within nested function calls. token A2 formula (A1=1,A2,MAX(A3,A4)) level 1. Tokens A3 A4 level 2. token level 0, outermost level. output enough enable computation validation formulas, enough investigate structure formulas spreadsheets. tested millions formulas Enron corpus.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlex.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Parse xlsx (Excel) formulas into tokens — xlex","text":"","code":"xlex(x)"},{"path":"https://nacnudus.github.io/tidyxl/reference/xlex.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Parse xlsx (Excel) formulas into tokens — xlex","text":"x Character vector length 1, giving formula.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlex.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Parse xlsx (Excel) formulas into tokens — xlex","text":"data frame (tibble, use tidyverse) one row per token, giving token , type (e.g. number, error), level. class attribute xlex added, base::print() generic can specialised print tree prettily.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlex.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Parse xlsx (Excel) formulas into tokens — xlex","text":"different types tokens : ref cell reference/address e.g. A1 $B2:C$14. sheetA sheet name, e.g. Sheet1! 'Sheet'!. sheet different file, file included token -- usually normalized form [0]. name named range, properly named formula. function Excel user-defined function, e.g. MAX _xll.MY_CUSTOM_FUNCTION. complete list official Excel functions available vector excel_functions. error error, e.g. #N/#REF!. bool TRUE FALSE -- note also functions TRUE() FALSE(). number forms numbers, e.g. 1, 1.1, -1, 1.2E3. text Strings inside double quotes, e.g. \"Hello, World!\". operator usual infix operators, +, -, *, /, ^, <, <=, <>, etc. also range operator : used ranges cell addresses, e.g. INDEX(something):A1. union operator , symbol used separate function arguments array columns, tagged operator inside parentheses function parentheses array curly braces (see examples). paren_open open parenthesis ( indicating increase level nesting, directly enclosing function arguments. paren_close open, reducing level nesting. open_array open curly brace '{' indicating start array constants, increase level nesting. close_array open_array, ending array constants fun_open open parenthesis ( immediately function name, directly enclosing function arguments. fun_close fun_open immediately function arguments. separator comma , separating function arguments array columns, semicolon ; separating array rows. DDE call Dynamic Data Exchange server, usually normalized form [1]!'DDE_parameter=1', full form 'ABCD'|'EFGH'!'IJKL'. space old files stripped formulas meaningless spaces. returned space tokens original formula can always reconstructed concatenating tokens. see , something gone wrong -- please report https://github.com/nacnudus/tidyxl/issues reproducible example (e.g. using reprex package). Every part original formula returned token, original formula can reconstructed concatenating tokens. work, please report https://github.com/nacnudus/tidyxl/issues reproducible example (e.g. using reprex package). XLParser project great help creating grammar. https://github.com/spreadsheetlab/XLParser.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlex.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Parse xlsx (Excel) formulas into tokens — xlex","text":"","code":"# All explicit cell references/addresses are returned as a single 'ref' token. xlex(\"A1\") #> root #> °-- A1 ref xlex(\"A$1\") #> root #> °-- A$1 ref xlex(\"$A1\") #> root #> °-- $A1 ref xlex(\"$A$1\") #> root #> °-- $A$1 ref xlex(\"A1:B2\") #> root #> °-- A1:B2 ref xlex(\"1:1\") # Whole row #> root #> °-- 1:1 ref xlex(\"A:B\") # Whole column #> root #> °-- A:B ref # If one part of an address is a name or a function, then the colon ':' is # regarded as a 'range operator', so is tagged 'operator'. xlex(\"A1:SOME.NAME\") #> root #> ¦-- A1 ref #> ¦-- : operator #> °-- SOME.NAME name xlex(\"SOME_FUNCTION():B2\") #> root #> ¦-- SOME_FUNCTION function #> ¦-- ( fun_open #> ¦-- ) fun_close #> ¦-- : operator #> °-- B2 ref xlex(\"SOME_FUNCTION():SOME.NAME\") #> root #> ¦-- SOME_FUNCTION function #> ¦-- ( fun_open #> ¦-- ) fun_close #> ¦-- : operator #> °-- SOME.NAME name # Sheet names are recognised by the terminal exclamation mark '!'. xlex(\"Sheet1!A1\") #> root #> ¦-- Sheet1! sheet #> °-- A1 ref xlex(\"'Sheet 1'!A1\") # Quoted names may contain some punctuation #> root #> ¦-- 'Sheet 1'! sheet #> °-- A1 ref xlex(\"'It''s a sheet'!A1\") # Quotes are escaped by doubling #> root #> ¦-- 'It''s a sheet'! sheet #> °-- A1 ref # Sheets can be ranged together in so-called 'three-dimensional formulas'. # Both sheets are returned in a single 'sheet' token. xlex(\"Sheet1:Sheet2!A1\") #> root #> ¦-- Sheet1:Sheet2! sheet #> °-- A1 ref xlex(\"'Sheet 1:Sheet 2'!A1\") # Quotes surround both (rather than each) sheet #> root #> ¦-- 'Sheet 1:Sheet 2'! sheet #> °-- A1 ref # Sheets from other files are prefixed by the filename, which Excel # normalizes the filenames into indexes. Either way, xlex() includes the # file/index in the 'sheet' token. xlex(\"[1]Sheet1!A1\") #> root #> ¦-- [1]Sheet1! sheet #> °-- A1 ref xlex(\"'[1]Sheet 1'!A1\") # Quotes surround both the file index and the sheet #> root #> ¦-- '[1]Sheet 1'! sheet #> °-- A1 ref xlex(\"'C:\\\\My Documents\\\\[file.xlsx]Sheet1'!A1\") #> root #> ¦-- 'C:\\My Documents\\[file.xlsx]Sheet1'! sheet #> °-- A1 ref # Function names are recognised by the terminal open-parenthesis '('. There # is no distinction between custom functions and built-in Excel functions. # The open-parenthesis is tagged 'fun_open', and the corresponding # close-parenthesis at the end of the arguments is tagged 'fun_close'. xlex(\"MAX(1,2)\") #> root #> ¦-- MAX function #> °-- ( fun_open #> ¦-- 1 number #> ¦-- , separator #> °-- 2 number #> °-- ) fun_close xlex(\"_xll.MY_CUSTOM_FUNCTION()\") #> root #> ¦-- _xll.MY_CUSTOM_FUNCTION function #> ¦-- ( fun_open #> °-- ) fun_close # Named ranges (properly called 'named formulas') are a last resort after # attempting to match a function (ending in an open parenthesis '(') or a # sheet (ending in an exclamation mark '!') xlex(\"MY_NAMED_RANGE\") #> root #> °-- MY_NAMED_RANGE name # Some cell addresses/references, functions and names can look alike, but # xlex() should always make the right choice. xlex(\"XFD1\") # A cell in the maximum column in Excel #> root #> °-- XFD1 ref xlex(\"XFE1\") # Beyond the maximum column, must be a named range/formula #> root #> °-- XFE1 name xlex(\"A1048576\") # A cell in the maximum row in Excel #> root #> °-- A1048576 ref xlex(\"A1048577\") # Beyond the maximum row, must be a named range/formula #> root #> °-- A1048577 name xlex(\"LOG10\") # A cell address #> root #> °-- LOG10 ref xlex(\"LOG10()\") # A log function #> root #> ¦-- LOG10 function #> ¦-- ( fun_open #> °-- ) fun_close xlex(\"LOG:LOG\") # The whole column 'LOG' #> root #> °-- LOG:LOG ref xlex(\"LOG\") # Not a cell address, must be a named range/formula #> root #> °-- LOG name xlex(\"LOG()\") # Another log function #> root #> ¦-- LOG function #> ¦-- ( fun_open #> °-- ) fun_close xlex(\"A1.2!A1\") # A sheet called 'A1.2' #> root #> ¦-- A1.2! sheet #> °-- A1 ref # Text is surrounded by double-quotes. xlex(\"\\\"Some text\\\"\") #> root #> °-- \"Some text\" text xlex(\"\\\"Some \\\"\\\"text\\\"\\\"\\\"\") # Double-quotes within text are escaped by #> root #> °-- \"Some \"\"text\"\"\" text # Numbers are signed where it makes sense, and can be scientific xlex(\"1\") #> root #> °-- 1 number xlex(\"1.2\") #> root #> °-- 1.2 number xlex(\"-1\") #> root #> °-- -1 number xlex(\"-1-1\") #> root #> ¦-- -1 number #> ¦-- - operator #> °-- 1 number xlex(\"-1+-1\") #> root #> ¦-- -1 number #> ¦-- + operator #> °-- -1 number xlex(\"MAX(-1-1)\") #> root #> ¦-- MAX function #> °-- ( fun_open #> ¦-- - operator #> ¦-- 1 number #> ¦-- - operator #> °-- 1 number #> °-- ) fun_close xlex(\"-1.2E-3\") #> root #> °-- -1.2E-3 number # Booleans can be constants or functions, and names can look like booleans, # but xlex() should always make the right choice. xlex(\"TRUE\") #> root #> °-- TRUE bool xlex(\"TRUEISH\") #> root #> °-- TRUEISH name xlex(\"TRUE!A1\") #> root #> ¦-- TRUE! sheet #> °-- A1 ref xlex(\"TRUE()\") #> root #> ¦-- TRUE function #> ¦-- ( fun_open #> °-- ) fun_close # Errors are tagged 'error' xlex(\"#DIV/0!\") #> root #> °-- #DIV/0! error xlex(\"#N/A\") #> root #> °-- #N/A error xlex(\"#NAME?\") #> root #> °-- #NAME? error xlex(\"#NULL!\") #> root #> °-- #NULL! error xlex(\"#NUM!\") #> root #> °-- #NUM! error xlex(\"#REF!\") #> root #> °-- #REF! error xlex(\"#VALUE!\") #> root #> °-- #VALUE! error # Operators with more than one character are treated as single tokens xlex(\"1<>2\") #> root #> ¦-- 1 number #> ¦-- <> operator #> °-- 2 number xlex(\"1<=2\") #> root #> ¦-- 1 number #> ¦-- <= operator #> °-- 2 number xlex(\"1<2\") #> root #> ¦-- 1 number #> ¦-- < operator #> °-- 2 number xlex(\"1=2\") #> root #> ¦-- 1 number #> ¦-- = operator #> °-- 2 number xlex(\"1&2\") #> root #> ¦-- 1 number #> ¦-- & operator #> °-- 2 number xlex(\"1 2\") #> root #> ¦-- 1 number #> ¦-- operator #> °-- 2 number xlex(\"(1,2)\") #> root #> °-- ( paren_open #> ¦-- 1 number #> ¦-- , operator #> °-- 2 number #> °-- ) paren_close xlex(\"1%\") # postfix operator #> root #> ¦-- 1 number #> °-- % operator # The union operator is a comma ',', which is the same symbol that is used # to separate function arguments or array columns. It is tagged 'operator' # only when it is inside parentheses that are not function parentheses or # array curly braces. The curly braces are tagged 'array_open' and # 'array_close'. tidyxl::xlex(\"A1,B2\") # invalid formula, defaults to 'union' to avoid a crash #> root #> ¦-- A1 ref #> ¦-- , operator #> °-- B2 ref tidyxl::xlex(\"(A1,B2)\") #> root #> °-- ( paren_open #> ¦-- A1 ref #> ¦-- , operator #> °-- B2 ref #> °-- ) paren_close tidyxl::xlex(\"MAX(A1,B2)\") #> root #> ¦-- MAX function #> °-- ( fun_open #> ¦-- A1 ref #> ¦-- , separator #> °-- B2 ref #> °-- ) fun_close tidyxl::xlex(\"SMALL((A1,B2),1)\") #> root #> ¦-- SMALL function #> °-- ( fun_open #> °-- ( paren_open #> ¦-- A1 ref #> ¦-- , operator #> °-- B2 ref #> ¦-- ) paren_close #> ¦-- , separator #> °-- 1 number #> °-- ) fun_close # Function arguments are separated by commas ',', which are tagged # 'separator'. xlex(\"MAX(1,2)\") #> root #> ¦-- MAX function #> °-- ( fun_open #> ¦-- 1 number #> ¦-- , separator #> °-- 2 number #> °-- ) fun_close # Nested functions are marked by an increase in the 'level'. The level # increases inside parentheses, rather than at the parentheses. Curly # braces, for arrays, have the same behaviour, as do subexpressions inside # ordinary parenthesis, tagged 'paren_open' and 'paren_close'. To see the # levels explicitly (rather than by the pretty printing), print as a normal # data frame or tibble by specifying `pretty = FALSE`. # class with as.data.frame. xlex(\"MAX(MIN(1,2),3)\") #> root #> ¦-- MAX function #> °-- ( fun_open #> ¦-- MIN function #> °-- ( fun_open #> ¦-- 1 number #> ¦-- , separator #> °-- 2 number #> ¦-- ) fun_close #> ¦-- , separator #> °-- 3 number #> °-- ) fun_close xlex(\"{1,2;3,4}\") #> root #> °-- { open_array #> ¦-- 1 number #> ¦-- , separator #> ¦-- 2 number #> ¦-- ; separator #> ¦-- 3 number #> ¦-- , separator #> °-- 4 number #> °-- } close_array xlex(\"1*(2+3)\") #> root #> ¦-- 1 number #> ¦-- * operator #> °-- ( paren_open #> ¦-- 2 number #> ¦-- + operator #> °-- 3 number #> °-- ) paren_close print(xlex(\"1*(2+3)\"), pretty = FALSE) #> # A tibble: 7 × 3 #> level type token #> #> 1 0 number 1 #> 2 0 operator * #> 3 0 paren_open ( #> 4 1 number 2 #> 5 1 operator + #> 6 1 number 3 #> 7 0 paren_close ) # Arrays are marked by opening and closing curly braces, with comma ',' # between columns, and semicolons ';' between rows Commas and semicolons are # both tagged 'separator'. Arrays contain only constants, which are # booleans, numbers, text, and errors. xlex(\"MAX({1,2;3,4})\") #> root #> ¦-- MAX function #> °-- ( fun_open #> °-- { open_array #> ¦-- 1 number #> ¦-- , separator #> ¦-- 2 number #> ¦-- ; separator #> ¦-- 3 number #> ¦-- , separator #> °-- 4 number #> °-- } close_array #> °-- ) fun_close xlex(\"=MAX({-1E-2,TRUE;#N/A,\\\"Hello, World!\\\"})\") #> root #> ¦-- = operator #> ¦-- MAX function #> °-- ( fun_open #> °-- { open_array #> ¦-- -1E-2 number #> ¦-- , separator #> ¦-- TRUE bool #> ¦-- ; separator #> ¦-- #N/A error #> ¦-- , separator #> °-- \"Hello, World!\" text #> °-- } close_array #> °-- ) fun_close # Structured references are surrounded by square brackets. Subexpressions # may also be surrounded by square brackets, but xlex() returns the whole # expression in a single 'structured_ref' token. xlex(\"[@col2]\") #> root #> °-- [@col2] structured_ref xlex(\"SUM([col22])\") #> root #> ¦-- SUM function #> °-- ( fun_open #> °-- [col22] structured_ref #> °-- ) fun_close xlex(\"Table1[col1]\") #> root #> °-- Table1[col1] structured_ref xlex(\"Table1[[col1]:[col2]]\") #> root #> °-- Table1[[col1]:[col2]] structured_ref xlex(\"Table1[#Headers]\") #> root #> °-- Table1[#Headers] structured_ref xlex(\"Table1[[#Headers],[col1]]\") #> root #> °-- Table1[[#Headers],[col1]] structured_ref xlex(\"Table1[[#Headers],[col1]:[col2]]\") #> root #> °-- Table1[[#Headers],[col1]:[col2]] structured_ref # DDE calls (Dynamic Data Exchange) are normalized by Excel into indexes. # Either way, xlex() includes everything in one token. xlex(\"[1]!'DDE_parameter=1'\") #> root #> °-- [1]!'DDE_parameter=1' DDE xlex(\"'Quote'|'NYSE'!ZAXX\") #> root #> °-- 'Quote'|'NYSE'!ZAXX DDE # Meaningless spaces that appear in some old files are returned as 'space' # tokens, so that the original formula can still be recovered by # concatenating all the tokens. Spaces between function names and their open # parenthesis have not been observed, so are not permitted. xlex(\" MAX( A1 ) \") #> root #> ¦-- operator #> ¦-- MAX function #> °-- ( fun_open #> ¦-- operator #> ¦-- A1 ref #> °-- operator #> ¦-- ) fun_close #> °-- operator # print.xlex() invisibly returns the original argument, so that it can be # used in magrittr pipelines. str(print(xlex(\"ROUND(A1*2\"))) #> root #> ¦-- ROUND function #> °-- ( fun_open #> ¦-- A1 ref #> ¦-- * operator #> °-- 2 number #> xlex [5 × 3] (S3: xlex/tbl_df/tbl/data.frame) #> $ level: int [1:5] 0 0 1 1 1 #> $ type : chr [1:5] \"function\" \"fun_open\" \"ref\" \"operator\" ... #> $ token: chr [1:5] \"ROUND\" \"(\" \"A1\" \"*\" ..."},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_cells.html","id":null,"dir":"Reference","previous_headings":"","what":"Import xlsx (Excel) cell contents into a tidy structure. — xlsx_cells","title":"Import xlsx (Excel) cell contents into a tidy structure. — xlsx_cells","text":"xlsx_cells() imports data spreadsheets without coercing rectangle. cell represented row data frame, giving cell's address, contents, formula, height, width, keys look cell's formatting return value xlsx_formats().","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_cells.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Import xlsx (Excel) cell contents into a tidy structure. — xlsx_cells","text":"","code":"xlsx_cells( path, sheets = NA, check_filetype = TRUE, include_blank_cells = TRUE )"},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_cells.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Import xlsx (Excel) cell contents into a tidy structure. — xlsx_cells","text":"path Path xlsx file. sheets Sheets read. Either character vector (names sheets), integer vector (positions sheets), NA (default, sheets). check_filetype Logical. Whether check filetype xlsx (xlsm) looking file , rather using filename extension. include_blank_cells Logical. Whether include cells value formula (might formatting comments). Useful whole column cells formatted, empty. Try setting FALSE spreadsheet seems large load.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_cells.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Import xlsx (Excel) cell contents into a tidy structure. — xlsx_cells","text":"data frame following columns. sheet worksheet cell . address cell address A1 notation. row row number cell address (integer). col column number cell address (integer). is_blank Whether cell value content Raw cell value type conversion, useful debugging. data_type type cell, referring following columns: error, logical, numeric, date, character, blank. error error value cell. logical boolean value cell. numeric numeric value cell. date date value cell. character string value cell. formula formula cell (see 'Details'). is_array Whether formula array formula. formula_ref address range cells group array formula shared formula applies (see 'Details'). formula_group formula group cell belongs (see 'Details'). comment text comment attached cell. height height cell's row, Excel's units. width width cell's column, Excel's units. row_outline_level outline level cells's row. col_outline_level outline level cells's column. style_format index table style formats x$formats$style (see 'Details'). local_format_id index table local cell formats x$formats$local (see 'Details'). Cell formatting returned xlsx_formats(). two types scopes formatting: 'style' formatting, Excel's built-styles 'normal', 'bad', etc., 'local' formatting, overrides particular elements style, e.g. making bold. types returned, $style $local sublists xlsx_formats(), identical structures. look local formatting given cell, take cell's 'local_format_id' value (my_cells$data$Sheet1[1, \"local_format_id\"]), use index format structure. E.g. look font size, my_formats$local$font$size[local_format_id]. see available formats, type str(my_formats$local).","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_cells.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Import xlsx (Excel) cell contents into a tidy structure. — xlsx_cells","text":"cell two 'values': content, sometimes also formula. also formatting applied 'style' level, can locally overridden.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_cells.html","id":"content","dir":"Reference","previous_headings":"","what":"Content","title":"Import xlsx (Excel) cell contents into a tidy structure. — xlsx_cells","text":"Depending cell, content may numeric value 365 365.25, may represent date/datetime one Excel's date/datetime systems, may index internal table strings. xlsx_cells() attempts infer correct data type cell, returning value appropriate column (error, logical, numeric, date, character). case cleverness unhelpful, unparsed value type information available 'content' 'data_type' columns.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_cells.html","id":"formula","dir":"Reference","previous_headings":"","what":"Formula","title":"Import xlsx (Excel) cell contents into a tidy structure. — xlsx_cells","text":"cell formula, value 'content' column result formula last time evaluated. Certain groups cells may share formula differs addresses referred formula; groups identified index, 'formula_group'. xlsx (Excel) file format records formula one cell group. xlsx_cells() propagates formulas cells group, making necessary changes relative addresses formula. Array formulas may also apply group cells, identified address 'formula_ref', xlsx (Excel) file format records formula one cell group. xlsx_cells() propagates formulas cells group. Unlike shared formulas, changes addresses array formulas necessary. Formulas refer workbooks currently name workbooks directly, instead via indices [1]. planned dereference .","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_cells.html","id":"formatting","dir":"Reference","previous_headings":"","what":"Formatting","title":"Import xlsx (Excel) cell contents into a tidy structure. — xlsx_cells","text":"Cell formatting returned xlsx_formats(). two types formatting: 'style' formatting, Excel's built-styles 'normal', 'bad', etc., 'local' formatting, overrides style. returned $style $local sublists xlsx_formats(), identical structures. look local formatting given cell, take cell's local_format_id value (my_cells$Sheet1[1, \"local_format_id\"]), use index format structure. E.g. look font size, my_formats$local$font$size[local_format_id]. see available formats, type str(my_formats$local). Strings can formatted within cell, single cell can contain substrings different formatting. -cell formatting available column character_formatted, list-column data frames. row data frame describes substring formatting. cells without character value, character_formatted NULL, processing might need filter NULLs first.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_cells.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Import xlsx (Excel) cell contents into a tidy structure. — xlsx_cells","text":"","code":"examples <- system.file(\"extdata/examples.xlsx\", package = \"tidyxl\") # All sheets str(xlsx_cells(examples)) #> tibble [586 × 24] (S3: tbl_df/tbl/data.frame) #> $ sheet : chr [1:586] \"Sheet1\" \"Sheet1\" \"Sheet1\" \"Sheet1\" ... #> $ address : chr [1:586] \"A1\" \"B1\" \"A2\" \"B2\" ... #> $ row : int [1:586] 1 1 2 2 3 3 4 4 5 5 ... #> $ col : int [1:586] 1 2 1 2 1 2 1 2 1 2 ... #> $ is_blank : logi [1:586] FALSE FALSE FALSE FALSE FALSE FALSE ... #> $ content : chr [1:586] \"#DIV/0!\" \"56\" \"1\" \"54\" ... #> $ data_type : chr [1:586] \"error\" \"character\" \"logical\" \"character\" ... #> $ error : chr [1:586] \"#DIV/0!\" NA NA NA ... #> $ logical : logi [1:586] NA NA TRUE NA FALSE NA ... #> $ numeric : num [1:586] NA NA NA NA NA ... #> $ date : POSIXct[1:586], format: NA NA ... #> $ character : chr [1:586] NA \"Error\" NA \"Boolean (true)\" ... #> $ character_formatted:List of 586 #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Error\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Boolean (true)\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Boolean (false)\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"integer\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"integer with higher-precision number formatting\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"default date format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Different built-in date format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"custom date format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"character\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"character\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"comment\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"comment with formatting\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Currency format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Percent format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Scientific format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"formula evaluating to logical\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"formula evaluating to a number\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"formula evaluating to date\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"formula evaluating to a string\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"some formulas that are stored in groups\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : NULL #> ..$ : NULL #> ..$ : NULL #> ..$ : NULL #> ..$ : NULL #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"single-cell array formula\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"multi-cell array formula\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"multi-cell array formula\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"formula that refers to another file\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"normal\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"normal' style but 'normal' has been modified from Excel's default to use Arial font\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"italic\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'normal' style but with local italics applied to this cell.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"normal\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'normal' style but with local bold applied to this cell.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"normal\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'normal' style but with local underline applied to this cell.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"normal\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'normal' style but with local double underline applied to this cell.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"bad\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'bad' style applied to this cell\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"badboldrightupindent\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'bad' style modified with bold font, right-and-up-aligned with an indent.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"custom style with custom date format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"auto-font\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Automatic font colour\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"standardred\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'indexed' or standard red text\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"themeblue\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Blue text from the theme\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"bluepattern\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Pattern but no background, blue from theme\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"stylealign\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Custom style 'stylealign' where the style is aligned to the centre.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [16 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr [1:16] \"in-cell\" \"bold\" \"italic\" \"underline\" ... #> .. ..$ bold : logi [1:16] FALSE TRUE FALSE FALSE FALSE FALSE ... #> .. ..$ italic : logi [1:16] FALSE FALSE TRUE FALSE FALSE FALSE ... #> .. ..$ underline : chr [1:16] NA NA NA \"single\" ... #> .. ..$ strike : logi [1:16] FALSE FALSE FALSE FALSE FALSE FALSE ... #> .. ..$ vertAlign : chr [1:16] NA NA NA NA ... #> .. ..$ size : num [1:16] 0 0 0 0 0 0 0 0 0 0 ... #> .. ..$ color_rgb : chr [1:16] NA \"FF000000\" \"FF000000\" \"FF000000\" ... #> .. ..$ color_theme : int [1:16] NA 2 2 2 2 2 2 2 2 2 ... #> .. ..$ color_indexed: int [1:16] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ color_tint : num [1:16] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ font : chr [1:16] \"Calibri\" \"Calibri\" \"Calibri\" \"Calibri\" ... #> .. ..$ family : int [1:16] 2 2 2 2 2 2 2 2 2 2 ... #> .. ..$ scheme : chr [1:16] \"minor\" \"minor\" \"minor\" \"minor\" ... #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"in-cellbolditalicunderlineunderlinedoublesingleaccountingdoubleaccountingstrikethroughsuperscriptsubscriptredth\"| __truncated__ #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"yellowfillunderline12arialstrikethroughsuperscript\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"More fancy inline-string formatting\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"bottomborderslant\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Slanted text\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"merged\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Cell merged into cell below\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"unprotected\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"A cell that is not 'protected'\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"unhidden\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"A cell that is not 'hidden'\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"locked\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"A cell that is 'locked'\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"themebackground1\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Text is formatted the colour 'Background1' from the theme, i.e. white.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [2 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr [1:2] \"in-cell-bold\" \"-not-bold\" #> .. ..$ bold : logi [1:2] TRUE FALSE #> .. ..$ italic : logi [1:2] FALSE FALSE #> .. ..$ underline : chr [1:2] NA NA #> .. ..$ strike : logi [1:2] FALSE FALSE #> .. ..$ vertAlign : chr [1:2] NA NA #> .. ..$ size : num [1:2] 0 0 #> .. ..$ color_rgb : chr [1:2] \"FF000000\" NA #> .. ..$ color_theme : int [1:2] 2 NA #> .. ..$ color_indexed: int [1:2] NA NA #> .. ..$ color_tint : num [1:2] NA NA #> .. ..$ font : chr [1:2] \"Calibri\" \"Arial\" #> .. ..$ family : int [1:2] 2 2 #> .. ..$ scheme : chr [1:2] \"minor\" NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Bold applied in inline string (not at cell level)\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [2 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr [1:2] \"in-cell-bold\" \"-not-bold\" #> .. ..$ bold : logi [1:2] NA FALSE #> .. ..$ italic : logi [1:2] NA FALSE #> .. ..$ underline : chr [1:2] NA NA #> .. ..$ strike : logi [1:2] NA FALSE #> .. ..$ vertAlign : chr [1:2] NA NA #> .. ..$ size : num [1:2] NA 0 #> .. ..$ color_rgb : chr [1:2] NA NA #> .. ..$ color_theme : int [1:2] NA NA #> .. ..$ color_indexed: int [1:2] NA NA #> .. ..$ color_tint : num [1:2] NA NA #> .. ..$ font : chr [1:2] NA \"Arial\" #> .. ..$ family : int [1:2] NA 2 #> .. ..$ scheme : chr [1:2] NA NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Bold applied at cell level\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"diagonal-up\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Diagonal-up border\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> .. [list output truncated] #> $ formula : chr [1:586] \"1/0\" NA NA NA ... #> $ is_array : logi [1:586] FALSE FALSE FALSE FALSE FALSE FALSE ... #> $ formula_ref : chr [1:586] NA NA NA NA ... #> $ formula_group : int [1:586] NA NA NA NA NA NA NA NA NA NA ... #> $ comment : chr [1:586] NA NA NA NA ... #> $ height : num [1:586] 14.2 14.2 14.2 14.2 14.2 ... #> $ width : num [1:586] 19.4 68 19.4 68 19.4 ... #> $ row_outline_level : num [1:586] 1 1 1 1 1 1 1 1 1 1 ... #> $ col_outline_level : num [1:586] 1 1 1 1 1 1 1 1 1 1 ... #> $ style_format : chr [1:586] \"Normal\" \"Normal\" \"Normal\" \"Normal\" ... #> $ local_format_id : int [1:586] 1 1 1 1 1 1 1 1 5 1 ... # Specific sheet either by position or by name str(xlsx_cells(examples, 2)) #> tibble [2 × 24] (S3: tbl_df/tbl/data.frame) #> $ sheet : chr [1:2] \"1~`!@#$%^&()_-+={}|;\\\"'<,>.\" \"1~`!@#$%^&()_-+={}|;\\\"'<,>.\" #> $ address : chr [1:2] \"B2\" \"B6\" #> $ row : int [1:2] 2 6 #> $ col : int [1:2] 2 2 #> $ is_blank : logi [1:2] FALSE FALSE #> $ content : chr [1:2] \"29\" \"30\" #> $ data_type : chr [1:2] \"character\" \"character\" #> $ error : chr [1:2] NA NA #> $ logical : logi [1:2] NA NA #> $ numeric : num [1:2] NA NA #> $ date : POSIXct[1:2], format: NA NA #> $ character : chr [1:2] \"empty first row and col\" \"This worksheet has a nasty name but can be imported nevertheless\" #> $ character_formatted:List of 2 #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"empty first row and col\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"This worksheet has a nasty name but can be imported nevertheless\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> $ formula : chr [1:2] NA NA #> $ is_array : logi [1:2] FALSE FALSE #> $ formula_ref : chr [1:2] NA NA #> $ formula_group : int [1:2] NA NA #> $ comment : chr [1:2] \"nacnudus:\\nComment3\" NA #> $ height : num [1:2] 14.2 14.2 #> $ width : num [1:2] 8.38 8.38 #> $ row_outline_level : num [1:2] 1 1 #> $ col_outline_level : num [1:2] 1 1 #> $ style_format : chr [1:2] \"Normal\" \"Normal\" #> $ local_format_id : int [1:2] 1 1 str(xlsx_cells(examples, \"Sheet1\")) #> tibble [395 × 24] (S3: tbl_df/tbl/data.frame) #> $ sheet : chr [1:395] \"Sheet1\" \"Sheet1\" \"Sheet1\" \"Sheet1\" ... #> $ address : chr [1:395] \"A1\" \"B1\" \"A2\" \"B2\" ... #> $ row : int [1:395] 1 1 2 2 3 3 4 4 5 5 ... #> $ col : int [1:395] 1 2 1 2 1 2 1 2 1 2 ... #> $ is_blank : logi [1:395] FALSE FALSE FALSE FALSE FALSE FALSE ... #> $ content : chr [1:395] \"#DIV/0!\" \"56\" \"1\" \"54\" ... #> $ data_type : chr [1:395] \"error\" \"character\" \"logical\" \"character\" ... #> $ error : chr [1:395] \"#DIV/0!\" NA NA NA ... #> $ logical : logi [1:395] NA NA TRUE NA FALSE NA ... #> $ numeric : num [1:395] NA NA NA NA NA ... #> $ date : POSIXct[1:395], format: NA NA ... #> $ character : chr [1:395] NA \"Error\" NA \"Boolean (true)\" ... #> $ character_formatted:List of 395 #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Error\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Boolean (true)\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Boolean (false)\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"integer\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"integer with higher-precision number formatting\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"default date format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Different built-in date format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"custom date format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"character\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"character\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"comment\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"comment with formatting\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Currency format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Percent format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Scientific format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"formula evaluating to logical\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"formula evaluating to a number\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"formula evaluating to date\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"formula evaluating to a string\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"some formulas that are stored in groups\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : NULL #> ..$ : NULL #> ..$ : NULL #> ..$ : NULL #> ..$ : NULL #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"single-cell array formula\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"multi-cell array formula\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"multi-cell array formula\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"formula that refers to another file\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"normal\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"normal' style but 'normal' has been modified from Excel's default to use Arial font\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"italic\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'normal' style but with local italics applied to this cell.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"normal\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'normal' style but with local bold applied to this cell.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"normal\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'normal' style but with local underline applied to this cell.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"normal\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'normal' style but with local double underline applied to this cell.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"bad\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'bad' style applied to this cell\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"badboldrightupindent\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'bad' style modified with bold font, right-and-up-aligned with an indent.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"custom style with custom date format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"auto-font\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Automatic font colour\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"standardred\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'indexed' or standard red text\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"themeblue\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Blue text from the theme\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"bluepattern\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Pattern but no background, blue from theme\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"stylealign\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Custom style 'stylealign' where the style is aligned to the centre.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [16 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr [1:16] \"in-cell\" \"bold\" \"italic\" \"underline\" ... #> .. ..$ bold : logi [1:16] FALSE TRUE FALSE FALSE FALSE FALSE ... #> .. ..$ italic : logi [1:16] FALSE FALSE TRUE FALSE FALSE FALSE ... #> .. ..$ underline : chr [1:16] NA NA NA \"single\" ... #> .. ..$ strike : logi [1:16] FALSE FALSE FALSE FALSE FALSE FALSE ... #> .. ..$ vertAlign : chr [1:16] NA NA NA NA ... #> .. ..$ size : num [1:16] 0 0 0 0 0 0 0 0 0 0 ... #> .. ..$ color_rgb : chr [1:16] NA \"FF000000\" \"FF000000\" \"FF000000\" ... #> .. ..$ color_theme : int [1:16] NA 2 2 2 2 2 2 2 2 2 ... #> .. ..$ color_indexed: int [1:16] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ color_tint : num [1:16] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ font : chr [1:16] \"Calibri\" \"Calibri\" \"Calibri\" \"Calibri\" ... #> .. ..$ family : int [1:16] 2 2 2 2 2 2 2 2 2 2 ... #> .. ..$ scheme : chr [1:16] \"minor\" \"minor\" \"minor\" \"minor\" ... #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"in-cellbolditalicunderlineunderlinedoublesingleaccountingdoubleaccountingstrikethroughsuperscriptsubscriptredth\"| __truncated__ #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"yellowfillunderline12arialstrikethroughsuperscript\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"More fancy inline-string formatting\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"bottomborderslant\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Slanted text\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"merged\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Cell merged into cell below\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"unprotected\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"A cell that is not 'protected'\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"unhidden\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"A cell that is not 'hidden'\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"locked\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"A cell that is 'locked'\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"themebackground1\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Text is formatted the colour 'Background1' from the theme, i.e. white.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [2 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr [1:2] \"in-cell-bold\" \"-not-bold\" #> .. ..$ bold : logi [1:2] TRUE FALSE #> .. ..$ italic : logi [1:2] FALSE FALSE #> .. ..$ underline : chr [1:2] NA NA #> .. ..$ strike : logi [1:2] FALSE FALSE #> .. ..$ vertAlign : chr [1:2] NA NA #> .. ..$ size : num [1:2] 0 0 #> .. ..$ color_rgb : chr [1:2] \"FF000000\" NA #> .. ..$ color_theme : int [1:2] 2 NA #> .. ..$ color_indexed: int [1:2] NA NA #> .. ..$ color_tint : num [1:2] NA NA #> .. ..$ font : chr [1:2] \"Calibri\" \"Arial\" #> .. ..$ family : int [1:2] 2 2 #> .. ..$ scheme : chr [1:2] \"minor\" NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Bold applied in inline string (not at cell level)\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [2 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr [1:2] \"in-cell-bold\" \"-not-bold\" #> .. ..$ bold : logi [1:2] NA FALSE #> .. ..$ italic : logi [1:2] NA FALSE #> .. ..$ underline : chr [1:2] NA NA #> .. ..$ strike : logi [1:2] NA FALSE #> .. ..$ vertAlign : chr [1:2] NA NA #> .. ..$ size : num [1:2] NA 0 #> .. ..$ color_rgb : chr [1:2] NA NA #> .. ..$ color_theme : int [1:2] NA NA #> .. ..$ color_indexed: int [1:2] NA NA #> .. ..$ color_tint : num [1:2] NA NA #> .. ..$ font : chr [1:2] NA \"Arial\" #> .. ..$ family : int [1:2] NA 2 #> .. ..$ scheme : chr [1:2] NA NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Bold applied at cell level\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"diagonal-up\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Diagonal-up border\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> .. [list output truncated] #> $ formula : chr [1:395] \"1/0\" NA NA NA ... #> $ is_array : logi [1:395] FALSE FALSE FALSE FALSE FALSE FALSE ... #> $ formula_ref : chr [1:395] NA NA NA NA ... #> $ formula_group : int [1:395] NA NA NA NA NA NA NA NA NA NA ... #> $ comment : chr [1:395] NA NA NA NA ... #> $ height : num [1:395] 14.2 14.2 14.2 14.2 14.2 ... #> $ width : num [1:395] 19.4 68 19.4 68 19.4 ... #> $ row_outline_level : num [1:395] 1 1 1 1 1 1 1 1 1 1 ... #> $ col_outline_level : num [1:395] 1 1 1 1 1 1 1 1 1 1 ... #> $ style_format : chr [1:395] \"Normal\" \"Normal\" \"Normal\" \"Normal\" ... #> $ local_format_id : int [1:395] 1 1 1 1 1 1 1 1 5 1 ... # The formats of particular cells can be retrieved like this: Sheet1 <- xlsx_cells(examples, \"Sheet1\") formats <- xlsx_formats(examples) formats$local$font$bold[Sheet1$local_format_id] #> [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [49] FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE #> [61] FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [73] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [85] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE #> [97] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [109] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [121] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [133] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [145] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [157] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [169] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [181] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [193] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [205] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [217] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [229] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [241] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [253] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [265] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [277] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [289] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [301] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [313] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [325] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [337] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [349] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [361] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [373] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [385] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE formats$style$font$bold[Sheet1$style_format] #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Percent Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Bad Normal Bad Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> styledate Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal styledate Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal 2 Normal Normal 2 #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal 2 Normal 2 Normal 2 Normal 2 Normal 2 Normal 2 Normal 2 Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal 2 Normal Normal 2 Normal Normal 2 Normal Normal 2 Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal 2 Normal Normal 2 Normal Normal 2 Normal Normal 2 Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal 2 Hyperlink Normal 2 Hyperlink Normal 2 Normal Normal 2 Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal 2 Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal #> FALSE FALSE FALSE # To filter for cells of a particular format, first filter the formats to get # the relevant indices, and then filter the cells by those indices. bold_indices <- which(formats$local$font$bold) Sheet1[Sheet1$local_format_id %in% bold_indices, ] #> # A tibble: 3 × 24 #> sheet address row col is_blank content data_type error logical numeric #> #> 1 Sheet1 A28 28 1 FALSE 0 character NA NA NA #> 2 Sheet1 A32 32 1 FALSE 6 character NA NA NA #> 3 Sheet1 A49 49 1 FALSE 12 character NA NA NA #> # ℹ 14 more variables: date , character , #> # character_formatted , formula , is_array , #> # formula_ref , formula_group , comment , height , #> # width , row_outline_level , col_outline_level , #> # style_format , local_format_id # In-cell formatting is available in the `character_formatted` column as a # data frame, one row per substring. xlsx_cells(examples)$character_formatted[77] #> [[1]] #> # A tibble: 16 × 14 #> character bold italic underline strike vertAlign size color_rgb color_theme #> #> 1 \"in-cell\" FALSE FALSE NA FALSE NA 0 NA NA #> 2 \"bold\" TRUE FALSE NA FALSE NA 0 FF000000 2 #> 3 \"italic\" FALSE TRUE NA FALSE NA 0 FF000000 2 #> 4 \"underli… FALSE FALSE single FALSE NA 0 FF000000 2 #> 5 \"underli… FALSE FALSE double FALSE NA 0 FF000000 2 #> 6 \"singlea… FALSE FALSE singleAc… FALSE NA 0 FF000000 2 #> 7 \"doublea… FALSE FALSE doubleAc… FALSE NA 0 FF000000 2 #> 8 \"striket… FALSE FALSE NA TRUE NA 0 FF000000 2 #> 9 \"subscri… FALSE FALSE NA FALSE subscript 0 FF000000 2 #> 10 \"supersc… FALSE FALSE NA FALSE superscr… 0 FF000000 2 #> 11 \"red\" FALSE FALSE NA FALSE NA 0 FFFF0000 NA #> 12 \"theme\" FALSE FALSE NA FALSE NA 0 FFC0504D 6 #> 13 \"tint\" FALSE FALSE NA FALSE NA 0 FFC0504D 6 #> 14 \"size\" FALSE FALSE NA FALSE NA 0 FFFF0000 NA #> 15 \"arial\" FALSE FALSE NA FALSE NA 0 FFFF0000 NA #> 16 \"UTF8Sté… FALSE FALSE NA FALSE NA 0 FFFF0000 NA #> # ℹ 5 more variables: color_indexed , color_tint , font , #> # family , scheme #>"},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_color_standard.html","id":null,"dir":"Reference","previous_headings":"","what":"Names and RGB values of Excel standard colours — xlsx_color_standard","title":"Names and RGB values of Excel standard colours — xlsx_color_standard","text":"dataset containing names RGB colour values Excel's standard palette.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_color_standard.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Names and RGB values of Excel standard colours — xlsx_color_standard","text":"","code":"xlsx_color_standard xlsx_colour_standard"},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_color_standard.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Names and RGB values of Excel standard colours — xlsx_color_standard","text":"data frame 10 rows 2 variables: name Name colour rgb RGB value colour object class tbl_df (inherits tbl, data.frame) 10 rows 2 columns.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_color_theme.html","id":null,"dir":"Reference","previous_headings":"","what":"Import theme color definitions from xlsx (Excel) files — xlsx_color_theme","title":"Import theme color definitions from xlsx (Excel) files — xlsx_color_theme","text":"xlsx_color_theme() (alias xlsx_colour_theme() returns names RGB values theme colours defined xlsx (Excel) files. example, \"accent6\" name theme colour Excel, resolve RGB colour defined author file. Themes often defined comply corporate standards.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_color_theme.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Import theme color definitions from xlsx (Excel) files — xlsx_color_theme","text":"","code":"xlsx_color_theme(path, check_filetype = TRUE) xlsx_colour_theme(path, check_filetype = TRUE)"},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_color_theme.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Import theme color definitions from xlsx (Excel) files — xlsx_color_theme","text":"path Path xlsx file. check_filetype Logical. Whether check filetype xlsx (xlsm) looking file , rather using filename extension.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_color_theme.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Import theme color definitions from xlsx (Excel) files — xlsx_color_theme","text":"data frame, one row per colour, following columns. name name theme. rgb RGB colour set theme file.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_color_theme.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Import theme color definitions from xlsx (Excel) files — xlsx_color_theme","text":"","code":"examples <- system.file(\"extdata/examples.xlsx\", package = \"tidyxl\") xlsx_color_theme(examples) #> # A tibble: 12 × 2 #> name rgb #> #> 1 background1 FFFFFFFF #> 2 text1 FF000000 #> 3 background2 FFEEECE1 #> 4 text2 FF1F497D #> 5 accent1 FF4F81BD #> 6 accent2 FFC0504D #> 7 accent3 FF9BBB59 #> 8 accent4 FF8064A2 #> 9 accent5 FF4BACC6 #> 10 accent6 FFF79646 #> 11 hyperlink FF0000FF #> 12 followed-hyperlink FF800080 xlsx_colour_theme(examples) #> # A tibble: 12 × 2 #> name rgb #> #> 1 background1 FFFFFFFF #> 2 text1 FF000000 #> 3 background2 FFEEECE1 #> 4 text2 FF1F497D #> 5 accent1 FF4F81BD #> 6 accent2 FFC0504D #> 7 accent3 FF9BBB59 #> 8 accent4 FF8064A2 #> 9 accent5 FF4BACC6 #> 10 accent6 FFF79646 #> 11 hyperlink FF0000FF #> 12 followed-hyperlink FF800080"},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_formats.html","id":null,"dir":"Reference","previous_headings":"","what":"Import xlsx (Excel) formatting definitions. — xlsx_formats","title":"Import xlsx (Excel) formatting definitions. — xlsx_formats","text":"xlsx_formats() imports formatting definitions spreadsheets. structure nested list, e.g. bold vector within list font, within list local, within list returned xlsx_formats(). can look cell's formatting indexing bottom-level vectors. See 'Details' examples.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_formats.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Import xlsx (Excel) formatting definitions. — xlsx_formats","text":"","code":"xlsx_formats(path, check_filetype = TRUE)"},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_formats.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Import xlsx (Excel) formatting definitions. — xlsx_formats","text":"path Path xlsx file. check_filetype Logical. Whether check filetype xlsx (xlsm) looking file , rather using filename extension.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_formats.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Import xlsx (Excel) formatting definitions. — xlsx_formats","text":"nested list vectors, beginning top level $style $local, drilling vectors hold definitions. E.g. my_formats$local$font$size.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_formats.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Import xlsx (Excel) formatting definitions. — xlsx_formats","text":"two types formatting: 'style' formatting, Excel's built-styles 'normal', 'bad', etc., 'local' formatting, overrides style. returned $style $local sublists xlsx_formats(), identical structures. look local formatting given cell, take cell's local_format_id value (my_cells$Sheet1[1, \"local_format_id\"]), use index format structure. E.g. look font size, my_formats$local$font$size[local_format_id]. see available formats, type str(my_formats$local). Colours may recorded three ways: hexadecimal RGB string without alpha, 'indexed' colour, index 'theme'. xlsx_formats() dereferences 'indexed' 'theme' colours hexadecimal RGB string representation, standardises RGB strings alpha channel first two characters. 'index' 'theme' name still provided. filter RGB string, look RGB values spreadsheet program (e.g. Excel, LibreOffice, Gnumeric), use grDevices::rgb() function convert hexadecimal string.","code":"A <- 1; R <- 0.5; G <- 0; B <- 0 rgb(A, R, G, B) # [1] \"#FF800000\""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_formats.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Import xlsx (Excel) formatting definitions. — xlsx_formats","text":"","code":"examples <- system.file(\"extdata/examples.xlsx\", package = \"tidyxl\") str(xlsx_formats(examples)) #> List of 2 #> $ local:List of 6 #> ..$ numFmt : chr [1:173] \"General\" \"d-mmm-yy\" \"[$-1409]d mmmm yyyy;@\" \"yyyy mmmm dddd\" ... #> ..$ font :List of 10 #> .. ..$ bold : logi [1:173] FALSE FALSE FALSE FALSE FALSE FALSE ... #> .. ..$ italic : logi [1:173] FALSE FALSE FALSE FALSE FALSE FALSE ... #> .. ..$ underline: chr [1:173] NA NA NA NA ... #> .. ..$ strike : logi [1:173] FALSE FALSE FALSE FALSE FALSE FALSE ... #> .. ..$ vertAlign: chr [1:173] NA NA NA NA ... #> .. ..$ size : num [1:173] 11 11 11 11 11 11 11 11 11 11 ... #> .. ..$ color :List of 4 #> .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ name : chr [1:173] \"Arial\" \"Arial\" \"Arial\" \"Arial\" ... #> .. ..$ family : int [1:173] 2 2 2 2 2 2 2 2 2 2 ... #> .. ..$ scheme : chr [1:173] NA NA NA NA ... #> ..$ fill :List of 2 #> .. ..$ patternFill :List of 3 #> .. .. ..$ fgColor :List of 4 #> .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. ..$ bgColor :List of 4 #> .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. ..$ patternType: chr [1:173] NA NA NA NA ... #> .. ..$ gradientFill:List of 8 #> .. .. ..$ type : chr [1:173] NA NA NA NA ... #> .. .. ..$ degree: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. ..$ left : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. ..$ right : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. ..$ top : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. ..$ bottom: num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. ..$ stop1 :List of 2 #> .. .. .. ..$ position: num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ color :List of 4 #> .. .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. ..$ stop2 :List of 2 #> .. .. .. ..$ position: num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ color :List of 4 #> .. .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> ..$ border :List of 12 #> .. ..$ diagonalDown: logi [1:173] FALSE FALSE FALSE FALSE FALSE FALSE ... #> .. ..$ diagonalUp : logi [1:173] FALSE FALSE FALSE FALSE FALSE FALSE ... #> .. ..$ outline : logi [1:173] FALSE FALSE FALSE FALSE FALSE FALSE ... #> .. ..$ left :List of 2 #> .. .. ..$ style: chr [1:173] NA NA NA NA ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ right :List of 2 #> .. .. ..$ style: chr [1:173] NA NA NA NA ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ start :List of 2 #> .. .. ..$ style: chr [1:173] NA NA NA NA ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ end :List of 2 #> .. .. ..$ style: chr [1:173] NA NA NA NA ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ top :List of 2 #> .. .. ..$ style: chr [1:173] NA NA NA NA ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ bottom :List of 2 #> .. .. ..$ style: chr [1:173] NA NA NA NA ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ diagonal :List of 2 #> .. .. ..$ style: chr [1:173] NA NA NA NA ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ vertical :List of 2 #> .. .. ..$ style: chr [1:173] NA NA NA NA ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ horizontal :List of 2 #> .. .. ..$ style: chr [1:173] NA NA NA NA ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> ..$ alignment :List of 8 #> .. ..$ horizontal : chr [1:173] \"general\" \"general\" \"general\" \"general\" ... #> .. ..$ vertical : chr [1:173] \"bottom\" \"bottom\" \"bottom\" \"bottom\" ... #> .. ..$ wrapText : logi [1:173] FALSE FALSE FALSE FALSE FALSE FALSE ... #> .. ..$ readingOrder : chr [1:173] \"context\" \"context\" \"context\" \"context\" ... #> .. ..$ indent : int [1:173] 0 0 0 0 0 0 0 0 0 1 ... #> .. ..$ justifyLastLine: logi [1:173] FALSE FALSE FALSE FALSE FALSE FALSE ... #> .. ..$ shrinkToFit : logi [1:173] FALSE FALSE FALSE FALSE FALSE FALSE ... #> .. ..$ textRotation : int [1:173] 0 0 0 0 0 0 0 0 0 0 ... #> ..$ protection:List of 2 #> .. ..$ locked: logi [1:173] TRUE TRUE TRUE TRUE TRUE TRUE ... #> .. ..$ hidden: logi [1:173] FALSE FALSE FALSE FALSE FALSE FALSE ... #> $ style:List of 6 #> ..$ numFmt : Named chr [1:6] \"General\" \"General\" \"yyyy-mm-dd hh:mm:ss\" \"0%\" ... #> .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> ..$ font :List of 10 #> .. ..$ bold : Named logi [1:6] FALSE FALSE FALSE FALSE FALSE FALSE #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ italic : Named logi [1:6] FALSE FALSE FALSE FALSE FALSE FALSE #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ underline: Named chr [1:6] NA NA NA NA ... #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ strike : Named logi [1:6] FALSE FALSE FALSE FALSE FALSE FALSE #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ vertAlign: Named chr [1:6] NA NA NA NA ... #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ size : Named num [1:6] 11 11 11 11 11 11 #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ color :List of 4 #> .. .. ..$ rgb : Named chr [1:6] NA \"FF9C0006\" \"FF000000\" NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ theme : Named chr [1:6] NA NA \"text1\" NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ name : Named chr [1:6] \"Arial\" \"Calibri\" \"Calibri\" \"Arial\" ... #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ family : Named int [1:6] 2 2 2 2 2 2 #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ scheme : Named chr [1:6] NA \"minor\" \"minor\" NA ... #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> ..$ fill :List of 2 #> .. ..$ patternFill :List of 3 #> .. .. ..$ fgColor :List of 4 #> .. .. .. ..$ rgb : Named chr [1:6] NA \"FFFFC7CE\" NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ bgColor :List of 4 #> .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ patternType: Named chr [1:6] NA \"solid\" NA NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ gradientFill:List of 8 #> .. .. ..$ type : Named chr [1:6] NA NA NA NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ degree: Named int [1:6] NA NA NA NA NA NA #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ left : Named num [1:6] NA NA NA NA NA NA #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ right : Named num [1:6] NA NA NA NA NA NA #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ top : Named num [1:6] NA NA NA NA NA NA #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ bottom: Named num [1:6] NA NA NA NA NA NA #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ stop1 :List of 2 #> .. .. .. ..$ position: Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ color :List of 4 #> .. .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ stop2 :List of 2 #> .. .. .. ..$ position: Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ color :List of 4 #> .. .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> ..$ border :List of 12 #> .. ..$ diagonalDown: Named logi [1:6] FALSE FALSE FALSE FALSE FALSE FALSE #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ diagonalUp : Named logi [1:6] FALSE FALSE FALSE FALSE FALSE FALSE #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ outline : Named logi [1:6] FALSE FALSE FALSE FALSE FALSE FALSE #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ left :List of 2 #> .. .. ..$ style: Named chr [1:6] NA NA NA NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ right :List of 2 #> .. .. ..$ style: Named chr [1:6] NA NA NA NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ start :List of 2 #> .. .. ..$ style: Named chr [1:6] NA NA NA NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ end :List of 2 #> .. .. ..$ style: Named chr [1:6] NA NA NA NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ top :List of 2 #> .. .. ..$ style: Named chr [1:6] NA NA NA NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ bottom :List of 2 #> .. .. ..$ style: Named chr [1:6] NA NA NA NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ diagonal :List of 2 #> .. .. ..$ style: Named chr [1:6] NA NA NA NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ vertical :List of 2 #> .. .. ..$ style: Named chr [1:6] NA NA NA NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ horizontal :List of 2 #> .. .. ..$ style: Named chr [1:6] NA NA NA NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> ..$ alignment :List of 8 #> .. ..$ horizontal : Named chr [1:6] \"general\" \"general\" \"center\" \"general\" ... #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ vertical : Named chr [1:6] \"bottom\" \"bottom\" \"bottom\" \"bottom\" ... #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ wrapText : Named logi [1:6] FALSE FALSE TRUE FALSE FALSE FALSE #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ readingOrder : Named chr [1:6] \"context\" \"context\" \"left-to-right\" \"context\" ... #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ indent : Named int [1:6] 0 0 0 0 0 0 #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ justifyLastLine: Named logi [1:6] FALSE FALSE FALSE FALSE FALSE FALSE #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ shrinkToFit : Named logi [1:6] FALSE FALSE FALSE FALSE FALSE FALSE #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ textRotation : Named int [1:6] 0 0 0 0 0 0 #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> ..$ protection:List of 2 #> .. ..$ locked: Named logi [1:6] TRUE TRUE FALSE TRUE TRUE TRUE #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ hidden: Named logi [1:6] FALSE FALSE FALSE FALSE FALSE FALSE #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... # The formats of particular cells can be retrieved like this: cells <- xlsx_cells(examples) formats <- xlsx_formats(examples) formats$local$font$bold[cells$local_format_id] #> [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [49] FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE #> [61] FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [73] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [85] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE #> [97] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [109] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [121] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [133] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [145] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [157] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [169] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [181] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [193] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [205] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [217] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [229] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [241] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [253] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [265] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [277] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [289] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [301] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [313] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [325] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [337] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [349] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [361] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [373] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [385] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [397] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [409] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [421] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [433] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [445] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [457] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [469] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [481] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [493] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [505] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [517] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [529] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [541] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [553] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [565] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [577] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE formats$style$font$bold[cells$style_format] #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Percent Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Bad Normal Bad Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> styledate Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal styledate Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal 2 Normal Normal 2 #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal 2 Normal 2 Normal 2 Normal 2 Normal 2 Normal 2 Normal 2 Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal 2 Normal Normal 2 Normal Normal 2 Normal Normal 2 Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal 2 Normal Normal 2 Normal Normal 2 Normal Normal 2 Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal 2 Hyperlink Normal 2 Hyperlink Normal 2 Normal Normal 2 Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal 2 Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal #> FALSE FALSE # To filter for cells of a particular format, first filter the formats to get # the relevant indices, and then filter the cells by those indices. bold_indices <- which(formats$local$font$bold) cells[cells$local_format_id %in% bold_indices, ] #> # A tibble: 3 × 24 #> sheet address row col is_blank content data_type error logical numeric #> #> 1 Sheet1 A28 28 1 FALSE 0 character NA NA NA #> 2 Sheet1 A32 32 1 FALSE 6 character NA NA NA #> 3 Sheet1 A49 49 1 FALSE 12 character NA NA NA #> # ℹ 14 more variables: date , character , #> # character_formatted , formula , is_array , #> # formula_ref , formula_group , comment , height , #> # width , row_outline_level , col_outline_level , #> # style_format , local_format_id "},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_names.html","id":null,"dir":"Reference","previous_headings":"","what":"Import named formulas from xlsx (Excel) files — xlsx_names","title":"Import named formulas from xlsx (Excel) files — xlsx_names","text":"xlsx_names() returns names definitions named formulas (aka named ranges) xlsx (Excel) files. names refer ranges cells, can also defined formulas. xlsx_names() tells whether range, using is_range() work . Names scoped either globally (used file), locally sheet (can reused different definitions different sheets). sheet-scoped names, xlsx_names() provides name sheet.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_names.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Import named formulas from xlsx (Excel) files — xlsx_names","text":"","code":"xlsx_names(path, check_filetype = TRUE)"},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_names.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Import named formulas from xlsx (Excel) files — xlsx_names","text":"path Path xlsx file. check_filetype Logical. Whether check filetype xlsx (xlsm) looking file , rather using filename extension.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_names.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Import named formulas from xlsx (Excel) files — xlsx_names","text":"data frame, one row per name, following columns. sheet name defined specific sheet, name sheet. Otherwise NA names defined globally. name formula Usually range cells, sometimes whole formula, e.g. MAX(A2,1). comment description given spreadsheet author. hidden Whether name visible user spreadsheet applications. Hidden names usually ones created automatically spreadsheet application. is_range Whether formula range cells. handy joining set cells referred name. context, commas cell addresses always regarded union operators -- differs xlex(), see help file details.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_names.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Import named formulas from xlsx (Excel) files — xlsx_names","text":"","code":"examples <- system.file(\"extdata/examples.xlsx\", package = \"tidyxl\") xlsx_names(examples) #> rId sheet name formula comment #> 1 1 Sheet1 named_local_formula MAX(Sheet1!$A$129:$A$130)+1 #> 2 4 E09904.2 sheet_beyond_chart E09904.2!$A$1,E09904.2!$C$1 #> 3 NA intersection Sheet1!$B:$B Sheet1!$8:$8 #> 4 NA named_global_formula Sheet1!$A$129-1 #> 5 NA named_range Sheet1!$A$129 My comment #> hidden is_range #> 1 FALSE FALSE #> 2 FALSE TRUE #> 3 FALSE TRUE #> 4 FALSE FALSE #> 5 FALSE TRUE"},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_sheet_names.html","id":null,"dir":"Reference","previous_headings":"","what":"List sheets in an xlsx (Excel) file — xlsx_sheet_names","title":"List sheets in an xlsx (Excel) file — xlsx_sheet_names","text":"xlsx_sheets() returns names sheets workbook, character vector. order appear spreadsheet opened spreadsheet application like Excel LibreOffice.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_sheet_names.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"List sheets in an xlsx (Excel) file — xlsx_sheet_names","text":"","code":"xlsx_sheet_names(path, check_filetype = TRUE)"},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_sheet_names.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"List sheets in an xlsx (Excel) file — xlsx_sheet_names","text":"path Path xlsx file. check_filetype Logical. Whether check filetype xlsx (xlsm) looking file , rather using filename extension.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_sheet_names.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"List sheets in an xlsx (Excel) file — xlsx_sheet_names","text":"character vector names worksheets file.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_sheet_names.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"List sheets in an xlsx (Excel) file — xlsx_sheet_names","text":"","code":"examples <- system.file(\"extdata/examples.xlsx\", package = \"tidyxl\") xlsx_sheet_names(examples) #> [1] \"Sheet1\" \"1~`!@#$%^&()_-+={}|;\\\"'<,>.\" #> [3] \"E09904.2\" \"gradientFill\""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_validation.html","id":null,"dir":"Reference","previous_headings":"","what":"Import data validation rules of cells in xlsx (Excel) files — xlsx_validation","title":"Import data validation rules of cells in xlsx (Excel) files — xlsx_validation","text":"xlsx_validation() returns data validation rules applied cells xlsx (Excel) files. Data validation rules control constants can entered cell, e.g. whole number 0 9, one several values another part spreadsheet.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_validation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Import data validation rules of cells in xlsx (Excel) files — xlsx_validation","text":"","code":"xlsx_validation(path, sheets = NA)"},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_validation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Import data validation rules of cells in xlsx (Excel) files — xlsx_validation","text":"path Path xlsx file. sheets Sheets read. Either character vector (names sheets), integer vector (positions sheets), NA (default, sheets).","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_validation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Import data validation rules of cells in xlsx (Excel) files — xlsx_validation","text":"data frame following columns. sheet worksheet validation rule cell . ref Comma-delimited cell addresses rules apply, e.g. A106 A115,A121:A122`. type Data type input, one whole, decimal, list, date, time, textLength, custom, whole`. operator Unless type list custom, operator one , notBetween, equal, notEqual, greaterThan, lessThan, greaterThanOrEqual, lessthanOrEqual. formula1 type list, range cells whose values allowed rule. type custom, formula determine allowable values. Otherwise, cell address constant, coerced character. Dates times formatted like \"2017-01-27 13:30:45\". Times without dates formatted like \"13:30:45\". formula2 operator notBetween, cell address constant formula1, otherwise NA. allow_blank Boolean, whether rule allows blanks. show_input_message Boolean, whether rule shows message user begins entering value. prompt_title Text appear title bar popup message box user begins entering value. prompt_body Text appear popup message box user begins entering value. NA, default text shown. show_error_message Boolean, whether rule shows message user entered forbidden value. NA, default text shown. error_title Text appear title bar popup message box user enters forbidden value. NA, default text shown. error_body Text appear popup message box user enters forbidden value. NA, default text shown. error_symbol Name symbol appear popup error message user enters forbidden value.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_validation.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Import data validation rules of cells in xlsx (Excel) files — xlsx_validation","text":"","code":"examples <- system.file(\"extdata/examples.xlsx\", package = \"tidyxl\") xlsx_validation(examples) #> # A tibble: 15 × 14 #> sheet ref type operator formula1 formula2 allow_blank show_input_message #> #> 1 Sheet1 A106 whole between 0 9 TRUE TRUE #> 2 Sheet1 A108 list NA $B$108 NA TRUE TRUE #> 3 Sheet1 A110 date between 2017-01… 2017-01… TRUE TRUE #> 4 Sheet1 A111 time between 00:00:00 09:00:00 TRUE TRUE #> 5 Sheet1 A112 text… between 0 9 TRUE TRUE #> 6 Sheet1 A114 whole notBetw… 0 9 TRUE TRUE #> 7 Sheet1 A115,… whole equal 0 NA TRUE TRUE #> 8 Sheet1 A116 whole notEqual 0 NA TRUE TRUE #> 9 Sheet1 A117 whole greater… 0 NA TRUE TRUE #> 10 Sheet1 A119 whole greater… 0 NA TRUE TRUE #> 11 Sheet1 A120 whole lessTha… 0 NA TRUE TRUE #> 12 Sheet1 A118 whole lessThan 0 NA TRUE TRUE #> 13 Sheet1 A107 deci… notBetw… 0 9 FALSE FALSE #> 14 Sheet1 A113 cust… NA A113<=L… NA TRUE TRUE #> 15 Sheet1 A109 list NA $B$108 NA TRUE TRUE #> # ℹ 6 more variables: prompt_title , prompt_body , #> # show_error_message , error_title , error_body , #> # error_symbol xlsx_validation(examples, 1) #> # A tibble: 15 × 14 #> sheet ref type operator formula1 formula2 allow_blank show_input_message #> #> 1 Sheet1 A106 whole between 0 9 TRUE TRUE #> 2 Sheet1 A108 list NA $B$108 NA TRUE TRUE #> 3 Sheet1 A110 date between 2017-01… 2017-01… TRUE TRUE #> 4 Sheet1 A111 time between 00:00:00 09:00:00 TRUE TRUE #> 5 Sheet1 A112 text… between 0 9 TRUE TRUE #> 6 Sheet1 A114 whole notBetw… 0 9 TRUE TRUE #> 7 Sheet1 A115,… whole equal 0 NA TRUE TRUE #> 8 Sheet1 A116 whole notEqual 0 NA TRUE TRUE #> 9 Sheet1 A117 whole greater… 0 NA TRUE TRUE #> 10 Sheet1 A119 whole greater… 0 NA TRUE TRUE #> 11 Sheet1 A120 whole lessTha… 0 NA TRUE TRUE #> 12 Sheet1 A118 whole lessThan 0 NA TRUE TRUE #> 13 Sheet1 A107 deci… notBetw… 0 9 FALSE FALSE #> 14 Sheet1 A113 cust… NA A113<=L… NA TRUE TRUE #> 15 Sheet1 A109 list NA $B$108 NA TRUE TRUE #> # ℹ 6 more variables: prompt_title , prompt_body , #> # show_error_message , error_title , error_body , #> # error_symbol xlsx_validation(examples, \"Sheet1\") #> # A tibble: 15 × 14 #> sheet ref type operator formula1 formula2 allow_blank show_input_message #> #> 1 Sheet1 A106 whole between 0 9 TRUE TRUE #> 2 Sheet1 A108 list NA $B$108 NA TRUE TRUE #> 3 Sheet1 A110 date between 2017-01… 2017-01… TRUE TRUE #> 4 Sheet1 A111 time between 00:00:00 09:00:00 TRUE TRUE #> 5 Sheet1 A112 text… between 0 9 TRUE TRUE #> 6 Sheet1 A114 whole notBetw… 0 9 TRUE TRUE #> 7 Sheet1 A115,… whole equal 0 NA TRUE TRUE #> 8 Sheet1 A116 whole notEqual 0 NA TRUE TRUE #> 9 Sheet1 A117 whole greater… 0 NA TRUE TRUE #> 10 Sheet1 A119 whole greater… 0 NA TRUE TRUE #> 11 Sheet1 A120 whole lessTha… 0 NA TRUE TRUE #> 12 Sheet1 A118 whole lessThan 0 NA TRUE TRUE #> 13 Sheet1 A107 deci… notBetw… 0 9 FALSE FALSE #> 14 Sheet1 A113 cust… NA A113<=L… NA TRUE TRUE #> 15 Sheet1 A109 list NA $B$108 NA TRUE TRUE #> # ℹ 6 more variables: prompt_title , prompt_body , #> # show_error_message , error_title , error_body , #> # error_symbol "},{"path":[]},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-108","dir":"Changelog","previous_headings":"","what":"tidyxl 1.0.8","title":"tidyxl 1.0.8","text":"CRAN release: 2022-09-01 tidyxl now licensed MIT (#63). Fixed unicode bug (#64) Fixed two crashes (#71, #73) Fixed rare bug number formats (#52, #75, @da11an) New feature: Import outline levels rows columns (#77, #78) New feature: Import raw cell value content column (#80) Compatibility upcoming Rcpp release (#86, @Enchufa2)","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-107","dir":"Changelog","previous_headings":"","what":"tidyxl 1.0.7","title":"tidyxl 1.0.7","text":"CRAN release: 2020-11-16 Update namespace C++ code compatibility latest version PEGTL, wrapped {piton} package.","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-106","dir":"Changelog","previous_headings":"","what":"tidyxl 1.0.6","title":"tidyxl 1.0.6","text":"CRAN release: 2020-05-09 Fix compiler warnings.","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-105","dir":"Changelog","previous_headings":"","what":"tidyxl 1.0.5","title":"tidyxl 1.0.5","text":"CRAN release: 2020-04-02 Fix tests xlex() (#57).","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-104","dir":"Changelog","previous_headings":"","what":"tidyxl 1.0.4","title":"tidyxl 1.0.4","text":"CRAN release: 2019-01-02 Compatibility: imports cell data validation rules files created Office 365 (#46).","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-103","dir":"Changelog","previous_headings":"","what":"tidyxl 1.0.3","title":"tidyxl 1.0.3","text":"CRAN release: 2018-06-21 Noticeably faster large files. Omission blank cells include_blank_cells = FALSE bug returned blank cells empty row xlsx_cells() data frame.","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-102","dir":"Changelog","previous_headings":"","what":"tidyxl 1.0.2","title":"tidyxl 1.0.2","text":"Correctly constructs formulas references preceded operators, e.g. -F10 (#26 @cablegui). longer misinterprets date formats use underscores _ dates underscore followed date-ish character like M (#24). Optionally omits blank cells include_blank_cells = FALSE xlsx_cells() (#25). Doesn’t crash reading files certain colour themes (#34 @dan-fahey).","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-101","dir":"Changelog","previous_headings":"","what":"tidyxl 1.0.1","title":"tidyxl 1.0.1","text":"CRAN release: 2018-03-26 Filetype checking based file signature “magic number”, rather filename extension. new function maybe_xlsx() provided checking whether file might xlsx format. impossible sure magic number alone, magic numbers either common zip files, common Microsoft Office files (e.g. .doc, .ppt). Fixed CRAN warning.","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-100","dir":"Changelog","previous_headings":"","what":"tidyxl 1.0.0","title":"tidyxl 1.0.0","text":"CRAN release: 2017-11-25","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"new-features-1-0-0","dir":"Changelog","previous_headings":"","what":"New features","title":"tidyxl 1.0.0","text":"xlsx_cells() xlsx_formats() replace tidy_xlsx(), deprecated. xlsx_cells() returns single data frame cells scope (whole workbook, chosen sheets), rather list separate data frames sheet. xlsx_formats() performs orders magnitude faster. xlsx_validation() imports validation rules cells restrict data input, cells require selection drop-list. See vignette vignette(\"data-validation-rules\", package = \"tidyxl\"). xlsx_names() imports defined names (aka named ranges/formulas), can used filter particular ranges cells name. Use is_range() filter ones named ranges, read joining rules cells join cell ranges cell addresses. become easier future release. is_range() checks whether formula simply ranges cells. xlex() tokenises formulas. useful detecting spreadsheet smells like embedded constants deep nesting. demo Shiny app, vignette vignette(\"smells\", package = \"tidyxl\"). vector Excel function names excel_functions can used separated built-functions custom functions. experimental features implemented -CRAN package lexl becoming part tidyxl. xlsx_cells()$character_formatted new column -cell formatting text (#5). different parts text single cell formatted differently one another. is_date_format() checks whether number format string date format. useful cell formula contains number formatting string (e.g. TEXT(45678,\"yyyy\")), need know constant 45678 date order recover full resolution (rather parsing character output “2025” year). xlsx_color_theme() ’s British alias xlsx_colour_theme() returns theme colour palette used file. useful monitor use corporate standard theme. xlsx_color_standard ’s British alias xlsx_colour_standard data frames standard Excel palette (red, blue, etc.). Shared formulas propogated cells use formula definition. Relative cell references handled, formula =A1*2 cell B1 becomes =A2*2 cell B2 (details see issue #7). Formatting alignment cell protection returned (#20).","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"breaking-changes-and-deprecations-1-0-0","dir":"Changelog","previous_headings":"","what":"Breaking changes and deprecations","title":"tidyxl 1.0.0","text":"tidy_xlsx() deprecated favour xlsx_cells(), returns data frame cells workbook (requested sheets), xlsx_formats(), returns lookup list cell formats. column content replaced is_blank, logical value indicating whether cell contains data. Please replace !.na(content) !is_blank filter blank cells (ones formatting value). column formula_type replaced is_array, logical value indicating whether cell’s formula array formula . Excel array formulas represented visually surrounded curly braces {}. order columns changed useful columns visible narrow consoles. xlsx_formats() tidy_xlsx(), theme colours given name rather number, e.g. \"accent6\" instead 4.","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"minor-fixes-and-improvements-1-0-0","dir":"Changelog","previous_headings":"","what":"Minor fixes and improvements","title":"tidyxl 1.0.0","text":"Certain unusual custom number formats specify colours (e.g. \"[Cyan]0%\") longer mis-detect dates (#21). is_date_format() tests whether number format date format. xlsx_formats() now thoroughly tested, several relatively minor bugs fixed. example, xlsx_formats(path)$local$fill$patternFill$patternType consistently returns NA never \"none\" pattern fill set, escape-backslashes consistently omitted numFmts.","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"new-dependency-1-0-0","dir":"Changelog","previous_headings":"","what":"New dependency","title":"tidyxl 1.0.0","text":"xlex(), is_range() handling relative references shared formulas requires dependency piton package, wraps PEGTL C++ parser generator.","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-023","dir":"Changelog","previous_headings":"","what":"tidyxl 0.2.3","title":"tidyxl 0.2.3","text":"CRAN release: 2017-07-08 Imports dates 1900-02-28 dates correctly, warns impossible date 1900-02-29, returning NA (following readxl). Fixes subsecond rounding (following readxl (fixes #14)) Imports styles correctly LibreOffice files (interprets ‘true’ ‘false’ booleans, well 0 1 used Microsoft Excel, defaults ‘true’ present, e.g. applyFill) Fixes bug caused LibreOffice files crash R, styles declared gaps sequence xfIds. Imports comments attached blank cells (fixes #10) Includes sheet cell address warnings impossible datetimes 1900-02-29.","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-0219000","dir":"Changelog","previous_headings":"","what":"tidyxl 0.2.1.9000","title":"tidyxl 0.2.1.9000","text":"Checks value date1904 attribute \"false\" \"1\" support files created openxlsx package (#8). Fixed bug imported first line multiline comments (#9). Encodes cell comment text UTF-8 (#12). Finds worksheets reliably files created Excel (part #13). Falls back default styles none defined (#13). Imports dates greater precision (part #14). Fixed order worksheets (#15)","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-021","dir":"Changelog","previous_headings":"","what":"tidyxl 0.2.1","title":"tidyxl 0.2.1","text":"CRAN release: 2017-01-29 Fixed major bug: dates parsed incorrectly offsets 1900 1904 systems wrong way around. Added warning dates suffer Excel --one bug. Fixed bug misinterpreted number formats dates (confused ‘d’ ‘[Red]’, looks like ‘d’ ‘d/m/y’.) Added support xlsx files created Gnumeric (single, unnamed cell formatting style). Fixed checkUserInterrupt work every 1000th cell. Added many tests. Removed lots redundant code.","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-020","dir":"Changelog","previous_headings":"","what":"tidyxl 0.2.0","title":"tidyxl 0.2.0","text":"Breaking change: Look style formats style name (e.g. \"Normal\") instead index integer. vectors x$formats$style named according style names. x$data$sheet$style_format_id renamed x$data$sheet$style_format type changed integer (index style formats) character (still index, looking named vectors name). examples README vignette. Simplified variable names C++ code.","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-011","dir":"Changelog","previous_headings":"","what":"tidyxl 0.1.1","title":"tidyxl 0.1.1","text":"Fixed many compilation errors Travis/AppVeyor/r-hub Many small non-breaking changes","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-010","dir":"Changelog","previous_headings":"","what":"tidyxl 0.1.0","title":"tidyxl 0.1.0","text":"Added NEWS.md file track changes package.","code":""}] +[{"path":"https://nacnudus.github.io/tidyxl/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"MIT License","title":"MIT License","text":"Copyright (c) 2020 Duncan Garmonsway Permission hereby granted, free charge, person obtaining copy software associated documentation files (“Software”), deal Software without restriction, including without limitation rights use, copy, modify, merge, publish, distribute, sublicense, /sell copies Software, permit persons Software furnished , subject following conditions: copyright notice permission notice shall included copies substantial portions Software. SOFTWARE PROVIDED “”, WITHOUT WARRANTY KIND, EXPRESS IMPLIED, INCLUDING LIMITED WARRANTIES MERCHANTABILITY, FITNESS PARTICULAR PURPOSE NONINFRINGEMENT. EVENT SHALL AUTHORS COPYRIGHT HOLDERS LIABLE CLAIM, DAMAGES LIABILITY, WHETHER ACTION CONTRACT, TORT OTHERWISE, ARISING , CONNECTION SOFTWARE USE DEALINGS SOFTWARE.","code":""},{"path":"https://nacnudus.github.io/tidyxl/articles/data-validation-rules.html","id":"what-data-validation-rules-are","dir":"Articles","previous_headings":"","what":"What data validation rules are","title":"Data Validation Rules","text":"Data validation rules control constants can entered cell, e.g. whole number 0 9, one several values another part spreadsheet. ‘xlsx_validation()’ returns data validation rules xlsx file, ranges cells rule applies. rule restricts input integers 0 9 inclusive, value (blank). value attempted, error message displayed imaginative title “message title”, informative body text “message body”, “stop” symbol. gamut possible rules given examples xlsx_validation().","code":"library(tidyxl) library(dplyr) #> #> Attaching package: 'dplyr' #> The following objects are masked from 'package:stats': #> #> filter, lag #> The following objects are masked from 'package:base': #> #> intersect, setdiff, setequal, union library(tidyr) examples <- system.file(\"extdata/examples.xlsx\", package = \"tidyxl\") glimpse(xlsx_validation(examples)[1, ]) #> Rows: 1 #> Columns: 14 #> $ sheet \"Sheet1\" #> $ ref \"A106\" #> $ type \"whole\" #> $ operator \"between\" #> $ formula1 \"0\" #> $ formula2 \"9\" #> $ allow_blank TRUE #> $ show_input_message TRUE #> $ prompt_title \"message title\" #> $ prompt_body \"message body\" #> $ show_error_message TRUE #> $ error_title \"error title\" #> $ error_body \"error body\" #> $ error_symbol \"stop\" as.data.frame(xlsx_validation(examples)) #> sheet ref type operator formula1 #> 1 Sheet1 A106 whole between 0 #> 2 Sheet1 A108 list $B$108 #> 3 Sheet1 A110 date between 2017-01-01 00:00:00 #> 4 Sheet1 A111 time between 00:00:00 #> 5 Sheet1 A112 textLength between 0 #> 6 Sheet1 A114 whole notBetween 0 #> 7 Sheet1 A115,A121:A122 whole equal 0 #> 8 Sheet1 A116 whole notEqual 0 #> 9 Sheet1 A117 whole greaterThan 0 #> 10 Sheet1 A119 whole greaterThanOrEqual 0 #> 11 Sheet1 A120 whole lessThanOrEqual 0 #> 12 Sheet1 A118 whole lessThan 0 #> 13 Sheet1 A107 decimal notBetween 0 #> 14 Sheet1 A113 custom A113<=LEN(B113) #> 15 Sheet1 A109 list $B$108 #> formula2 allow_blank show_input_message prompt_title #> 1 9 TRUE TRUE message title #> 2 TRUE TRUE #> 3 2017-01-09 09:00:00 TRUE TRUE #> 4 09:00:00 TRUE TRUE #> 5 9 TRUE TRUE #> 6 9 TRUE TRUE #> 7 TRUE TRUE #> 8 TRUE TRUE #> 9 TRUE TRUE #> 10 TRUE TRUE #> 11 TRUE TRUE #> 12 TRUE TRUE #> 13 9 FALSE FALSE #> 14 TRUE TRUE #> 15 TRUE TRUE #> prompt_body show_error_message error_title error_body error_symbol #> 1 message body TRUE error title error body stop #> 2 TRUE warning #> 3 TRUE stop #> 4 TRUE stop #> 5 TRUE stop #> 6 TRUE stop #> 7 TRUE stop #> 8 TRUE stop #> 9 TRUE stop #> 10 TRUE stop #> 11 TRUE stop #> 12 TRUE stop #> 13 FALSE stop #> 14 TRUE stop #> 15 TRUE information"},{"path":"https://nacnudus.github.io/tidyxl/articles/data-validation-rules.html","id":"joining-rules-to-cells","dir":"Articles","previous_headings":"","what":"Joining rules to cells","title":"Data Validation Rules","text":"built-functions joining ranges like A1:D5,G8 single cells like B3. now, use snippets section. future might develop dplyr-like join function (hard currently dplyr doesn’t yet join arbitrary functions, even standard inequalities like >=). Help advice gratefully accepted! join rules cells, naive method use sheet ref columns match sheet address columns output xlsx_cells(). Notice 9 cells joined, even though 15 rules defined. Surely least 15 cells joined? reason cells 6 rules don’t exist – rules can defined cells value, cells value returned xlsx_cells(), otherwise 17179869184 cells worksheet must returned. subtle reason certain cells joined successfully ref column rules sometimes refers one cell, can even refer several, non-contiguous ranges cells. Specifically, seventh rule’s ref column A115,A121:A122. Special treatment needed . Ideally, kind join function defined can compare indidual cells ranges. haven’t written one, follows workaround. First, two ranges cells must unnested A115 A121:122. range A121:122 must ‘unranged’ A121 A122. unnest_ref() function can also defined whole data frames, unnesting column references. Finally new data frame rules can joined data frame cells usual ways, via sheet ref columns. Problems approach occur rules defined large ranges cells: ‘unnesting’ ranges results long vectors individual cell addresses, (worse) huge data frames rules. cases commonplace, rules often defined entire columns spreadsheet, column 1048576 rows.","code":"rules <- xlsx_validation(examples) cells <- filter(xlsx_cells(examples), row >= 106, col == 1) rules #> # A tibble: 15 × 14 #> sheet ref type operator formula1 formula2 allow_blank show_input_message #> #> 1 Sheet1 A106 whole between 0 9 TRUE TRUE #> 2 Sheet1 A108 list NA $B$108 NA TRUE TRUE #> 3 Sheet1 A110 date between 2017-01… 2017-01… TRUE TRUE #> 4 Sheet1 A111 time between 00:00:00 09:00:00 TRUE TRUE #> 5 Sheet1 A112 text… between 0 9 TRUE TRUE #> 6 Sheet1 A114 whole notBetw… 0 9 TRUE TRUE #> 7 Sheet1 A115,… whole equal 0 NA TRUE TRUE #> 8 Sheet1 A116 whole notEqual 0 NA TRUE TRUE #> 9 Sheet1 A117 whole greater… 0 NA TRUE TRUE #> 10 Sheet1 A119 whole greater… 0 NA TRUE TRUE #> 11 Sheet1 A120 whole lessTha… 0 NA TRUE TRUE #> 12 Sheet1 A118 whole lessThan 0 NA TRUE TRUE #> 13 Sheet1 A107 deci… notBetw… 0 9 FALSE FALSE #> 14 Sheet1 A113 cust… NA A113<=L… NA TRUE TRUE #> 15 Sheet1 A109 list NA $B$108 NA TRUE TRUE #> # ℹ 6 more variables: prompt_title , prompt_body , #> # show_error_message , error_title , error_body , #> # error_symbol cells #> # A tibble: 93 × 24 #> sheet address row col is_blank content data_type error logical numeric #> #> 1 Sheet1 A106 106 1 FALSE 0 numeric NA NA 0 #> 2 Sheet1 A107 107 1 FALSE 0.1 numeric NA NA 0.1 #> 3 Sheet1 A108 108 1 FALSE 137 character NA NA NA #> 4 Sheet1 A109 109 1 FALSE 137 character NA NA NA #> 5 Sheet1 A110 110 1 FALSE 42736 date NA NA NA #> 6 Sheet1 A111 111 1 FALSE 0.354166… date NA NA NA #> 7 Sheet1 A112 112 1 FALSE 149 character NA NA NA #> 8 Sheet1 A113 113 1 FALSE 10 numeric NA NA 10 #> 9 Sheet1 A114 114 1 FALSE -1 numeric NA NA -1 #> 10 Sheet1 A115 115 1 FALSE 0 numeric NA NA 0 #> # ℹ 83 more rows #> # ℹ 14 more variables: date , character , #> # character_formatted , formula , is_array , #> # formula_ref , formula_group , comment , height , #> # width , row_outline_level , col_outline_level , #> # style_format , local_format_id inner_join(rules, cells, by = c(\"sheet\" = \"sheet\", \"ref\" = \"address\")) #> # A tibble: 9 × 36 #> sheet ref type operator formula1 formula2 allow_blank show_input_message #> #> 1 Sheet1 A106 whole between 0 9 TRUE TRUE #> 2 Sheet1 A108 list NA $B$108 NA TRUE TRUE #> 3 Sheet1 A110 date between 2017-01… 2017-01… TRUE TRUE #> 4 Sheet1 A111 time between 00:00:00 09:00:00 TRUE TRUE #> 5 Sheet1 A112 textLe… between 0 9 TRUE TRUE #> 6 Sheet1 A114 whole notBetw… 0 9 TRUE TRUE #> 7 Sheet1 A107 decimal notBetw… 0 9 FALSE FALSE #> 8 Sheet1 A113 custom NA A113<=L… NA TRUE TRUE #> 9 Sheet1 A109 list NA $B$108 NA TRUE TRUE #> # ℹ 28 more variables: prompt_title , prompt_body , #> # show_error_message , error_title , error_body , #> # error_symbol , row , col , is_blank , content , #> # data_type , error , logical , numeric , date , #> # character , character_formatted , formula , is_array , #> # formula_ref , formula_group , comment , height , #> # width , row_outline_level , col_outline_level , … unrange <- function(x) { limits <- cellranger::as.cell_limits(x) rows <- seq(limits$ul[1], limits$lr[1]) cols <- seq(limits$ul[2], limits$lr[2]) rowcol <- expand.grid(rows, cols) cell_addrs <- cellranger::cell_addr(rowcol[[1]], rowcol[[2]]) cellranger::to_string(cell_addrs, fo = \"A1\", strict = FALSE) } unnest_ref <- function(x, ref) { UseMethod(\"unnest_ref\") } unnest_ref.default <- function(x, ref_col = ref) { stopifnot(is.character(x), length(x) == 1L) refs <- unlist(strsplit(x, \",\", fixed = TRUE)) unlist(lapply(refs, unrange)) } unrange(\"A121:A122\") #> [1] \"A121\" \"A122\" unnest_ref(\"A115,A121:A122\") #> [1] \"A115\" \"A121\" \"A122\" unnest_ref.data.frame <- function(x, ref_col) { ref <- rlang::enquo(ref_col) x[[rlang::quo_name(ref)]] <- lapply(x[[rlang::quo_name(ref)]], unnest_ref) tidyr::unnest(x, rlang::UQ(ref)) } (nested_rule <- slice(rules, 7)) #> # A tibble: 1 × 14 #> sheet ref type operator formula1 formula2 allow_blank show_input_message #> #> 1 Sheet1 A115,A… whole equal 0 NA TRUE TRUE #> # ℹ 6 more variables: prompt_title , prompt_body , #> # show_error_message , error_title , error_body , #> # error_symbol unnest_ref(nested_rule, ref) #> Warning: Prefixing `UQ()` with the rlang namespace is deprecated as of rlang 0.3.0. #> Please use the non-prefixed form or `!!` instead. #> #> # Bad: rlang::expr(mean(rlang::UQ(var) * 100)) #> #> # Ok: rlang::expr(mean(UQ(var) * 100)) #> #> # Good: rlang::expr(mean(!!var * 100)) #> This warning is displayed once every 8 hours. #> # A tibble: 3 × 14 #> sheet ref type operator formula1 formula2 allow_blank show_input_message #> #> 1 Sheet1 A115 whole equal 0 NA TRUE TRUE #> 2 Sheet1 A121 whole equal 0 NA TRUE TRUE #> 3 Sheet1 A122 whole equal 0 NA TRUE TRUE #> # ℹ 6 more variables: prompt_title , prompt_body , #> # show_error_message , error_title , error_body , #> # error_symbol "},{"path":"https://nacnudus.github.io/tidyxl/articles/smells.html","id":"inspecting-the-parse-tree","dir":"Articles","previous_headings":"","what":"Inspecting the parse tree","title":"Detecting Spreadsheet Smells with xlex()","text":"’s example simple formula MIN(3,MAX(2,A1)) (= symbol beginning formula implied, Excel doesn’t write file).","code":"library(tidyxl) x <- xlex(\"MIN(3,MAX(2,A1))\") x ## root ## ¦-- MIN function ## °-- ( fun_open ## ¦-- 3 number ## ¦-- , separator ## ¦-- MAX function ## °-- ( fun_open ## ¦-- 2 number ## ¦-- , separator ## °-- A1 ref ## °-- ) fun_close ## °-- ) fun_close"},{"path":"https://nacnudus.github.io/tidyxl/articles/smells.html","id":"detecting-constants-inside-formulas","dir":"Articles","previous_headings":"","what":"Detecting constants inside formulas","title":"Detecting Spreadsheet Smells with xlex()","text":"smelly spreadsheet distributed tidyxl package. comes famous Enron subpoena, made available Felienne Hermans. look glance? ’s screenshot part one sheet, showing formulas rather cell values. ’s financial plan, using formulas forecast rest year, plan following year. want see whether formulas embedded constants; ones hidden attention, driving forecasts. read formula, one one, lot easier visualise ones containing constants. can xlex() graph plotting library like ggplot2. first step, importing spreadsheet, tokenize formulas, using xlsx(). Let’s tokenize one formula see looks like.","code":""},{"path":"https://nacnudus.github.io/tidyxl/articles/smells.html","id":"one-formula","dir":"Articles","previous_headings":"Detecting constants inside formulas","what":"One formula","title":"Detecting Spreadsheet Smells with xlex()","text":"formula (C8/7)*12-48000, xlex() separates components. parentheses, operators (division, multiplication, subtraction), reference another cell (C8), numeric constants: 7, 12, 48000. ? 7 probably 7th month, July, column header “July YTD”. year--date figure divided 7, multiplied 12 forecast year-end figure. 48000 mysterious – perhaps future payment expected. Embedding constants inside formula bad practice. Better practice put constants cells, annotated meaning, perhaps even named. formulas refer , name, e.g.","code":"library(dplyr) ## ## Attaching package: 'dplyr' ## The following objects are masked from 'package:stats': ## ## filter, lag ## The following objects are masked from 'package:base': ## ## intersect, setdiff, setequal, union library(tidyr) library(purrr) library(ggplot2) # The original filename was \"barry_tycholiz__848__2002 Plan Worksheet CC107322.xlsx\" sheet <- tidy_xlsx(system.file(\"extdata/enron-constants.xlsx\", package = \"tidyxl\"), \"Detail Breakdown\")$data[[1]] ## Warning: 'tidy_xlsx()' is deprecated. ## Use 'xlsx_cells()' or 'xlsx_formats()' instead. sheet$formula[22] ## [1] \"(C8/7)*12-48000\" xlex(sheet$formula[22]) ## root ## °-- ( paren_open ## ¦-- C8 ref ## ¦-- / operator ## °-- 7 number ## ¦-- ) paren_close ## ¦-- * operator ## ¦-- 12 number ## ¦-- - operator ## °-- 48000 number (Compensation/MonthsToDate)*12Months-FuturePayments"},{"path":"https://nacnudus.github.io/tidyxl/articles/smells.html","id":"many-formulas","dir":"Articles","previous_headings":"Detecting constants inside formulas","what":"Many formulas","title":"Detecting Spreadsheet Smells with xlex()","text":"xlex() function isn’t vectorized (returns data frame), map formulas create ‘nest’ column individual data frames. can unnest data frames filter tokens constants, find cells constants formulas. constants common? Unsurprisingly, 12 7 almost equally abundant, also lots 6s 9s – two- three-quarterly figures? 150000s familiar 48000s, followed fractions look like percentages, several one-offs.","code":"tokens <- sheet %>% filter(!is.na(formula)) %>% select(row, col, formula) %>% mutate(tokens = map(formula, xlex)) %>% select(-formula) tokens ## # A tibble: 154 × 3 ## row col tokens ## ## 1 8 4 ## 2 9 4 ## 3 10 4 ## 4 12 4 ## 5 13 4 ## 6 14 3 ## 7 14 4 ## 8 14 5 ## 9 14 6 ## 10 17 4 ## # ℹ 144 more rows constants <- tokens %>% unnest(tokens) %>% filter(type %in% c(\"error\", \"bool\", \"number\", \"text\")) constants ## # A tibble: 201 × 5 ## row col level type token ## ## 1 8 4 1 number 7 ## 2 8 4 0 number 12 ## 3 8 4 0 number 48000 ## 4 9 4 1 number 7 ## 5 9 4 0 number 12 ## 6 10 4 1 number 7 ## 7 10 4 0 number 12 ## 8 12 4 1 number 7 ## 9 12 4 0 number 12 ## 10 13 4 1 number 7 ## # ℹ 191 more rows constants %>% count(token, sort = TRUE) %>% print(n = Inf) ## # A tibble: 24 × 2 ## token n ## ## 1 12 59 ## 2 7 58 ## 3 6 30 ## 4 9 30 ## 5 150000 4 ## 6 48000 2 ## 7 0.05 1 ## 8 0.1 1 ## 9 0.35 1 ## 10 0.5 1 ## 11 1.05 1 ## 12 10 1 ## 13 10000 1 ## 14 12000 1 ## 15 13000 1 ## 16 15000 1 ## 17 2000 1 ## 18 25000 1 ## 19 5000 1 ## 20 5320 1 ## 21 7314 1 ## 22 7800 1 ## 23 866 1 ## 24 95000 1"},{"path":"https://nacnudus.github.io/tidyxl/articles/smells.html","id":"visualising-constants","dir":"Articles","previous_headings":"Detecting constants inside formulas","what":"Visualising constants","title":"Detecting Spreadsheet Smells with xlex()","text":"final step visualize spreadsheet, highlighting cells hide constants formulas. already data frame cells constants, join back full dataset, pass result ggplot. time doesn’t seem particular pattern, perhaps suspicious .","code":"has_constants <- constants %>% distinct(row, col) %>% mutate(has_constant = TRUE) %>% right_join(sheet, by = c(\"row\", \"col\")) %>% filter(!is_blank) %>% select(row, col, has_constant) %>% replace_na(list(has_constant = FALSE)) has_constants ## # A tibble: 412 × 3 ## row col has_constant ## ## 1 8 4 TRUE ## 2 9 4 TRUE ## 3 10 4 TRUE ## 4 12 4 TRUE ## 5 13 4 TRUE ## 6 17 4 TRUE ## 7 17 6 TRUE ## 8 18 4 TRUE ## 9 19 4 TRUE ## 10 20 4 TRUE ## # ℹ 402 more rows has_constants %>% # filter(row <= 28) %>% ggplot(aes(col, row, fill = has_constant)) + geom_tile() + scale_y_reverse() + theme(legend.position = \"top\")"},{"path":"https://nacnudus.github.io/tidyxl/articles/smells.html","id":"detecting-deeply-nested-formulas","dir":"Articles","previous_headings":"","what":"Detecting deeply nested formulas","title":"Detecting Spreadsheet Smells with xlex()","text":"Using techniques detecting constants, map xlex() formulas spreadsheet, unnest result, filter tokens particular properties. case, interested level token, tells deeply token nested functions expressions. time, use another spreadsheet Enron corpus. First, illustration. Notice inside first function, level increases 1. Inside second function, level increases 2. Now let’s apply test formulas sheet. deepest level nesting turns 7, seen cells row 171. wonder formulas look like?","code":"xlex(\"MAX(3,MIN(2,4))\") ## root ## ¦-- MAX function ## °-- ( fun_open ## ¦-- 3 number ## ¦-- , separator ## ¦-- MIN function ## °-- ( fun_open ## ¦-- 2 number ## ¦-- , separator ## °-- 4 number ## °-- ) fun_close ## °-- ) fun_close # The original filename was \"albert_meyers__1__1-25act.xlsx\" sheet <- tidy_xlsx(system.file(\"extdata/enron-nested.xlsx\", package = \"tidyxl\"), \"Preschedule\")$data[[1]] ## Warning: 'tidy_xlsx()' is deprecated. ## Use 'xlsx_cells()' or 'xlsx_formats()' instead. deepest <- sheet %>% filter(!is.na(formula)) %>% mutate(tokens = map(formula, xlex)) %>% select(row, col, tokens) %>% unnest(tokens) %>% filter(level == max(level)) %>% distinct(row, col, level) deepest ## # A tibble: 48 × 3 ## row col level ## ## 1 171 2 7 ## 2 171 3 7 ## 3 171 4 7 ## 4 171 5 7 ## 5 171 6 7 ## 6 171 7 7 ## 7 171 8 7 ## 8 171 9 7 ## 9 171 10 7 ## 10 171 11 7 ## # ℹ 38 more rows sheet %>% filter(row == 171, col == 2) %>% pull(formula) # Aaaaaaaaaaarghhhhhhhh! ## [1] \"((IF((103-B$89)=103,0,(103-B$89)))+(IF((200-B$95)=200,0,(200-B$95)))+(IF((196-B$98)=196,0,(196-B$98)))+(IF((200-B$101)=200,0,(200-B$101)))+(IF((70-B$104)=70,0,(MIN(40,(70-B$104))))+(IF((78-B$109)=78,0,(MIN(50,(78-B$109)))))+(IF((103-B$114)=103,0,(MIN(66,(103-B$114)))))+(IF((195-B$119-B$124-B$129-B$134-B$139)=195,0,(MIN(70,(195-B$119-B$124-B$129-B$134-B$139)))))+(IF((64-B$144)=64,0,(MIN(50,(64-B$144)))))+(IF((48-B$149)=48,0,(MIN(20,(48-B$149)))))+(IF((44-B$154)=44,0,(MIN(20,(44-B$154)))))+(IF((130-B$159)=130,0,(MIN(20,(130-B$159)))))))\""},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"tidyxl","dir":"Articles","previous_headings":"","what":"tidyxl","title":"Tidyxl","text":"tidyxl imports non-tabular data Excel files R. exposes cell content, position, formatting comments tidy structure manipulation, especially unpivotr package. supports xml-based file formats ‘.xlsx’ ‘.xlsm’ via embedded RapidXML C++ library. support binary file formats ‘.xlsb’ ‘.xls’. also provides function xlex() tokenizing formulas. See vignette details. useful detecting ‘spreadsheet smells’ (poor practice embedding constants formulas, using deep levels nesting), understanding dependency structures within spreadsheets.","code":""},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"mailing-list","dir":"Articles","previous_headings":"tidyxl","what":"Mailing list","title":"Tidyxl","text":"bugs /issues, create new issue GitHub questions comments, please subscribe tidyxl-devel mailing list. must member post messages, anyone can read archived discussions.","code":""},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"installation","dir":"Articles","previous_headings":"tidyxl","what":"Installation","title":"Tidyxl","text":"","code":"devtools::install_github(\"nacnudus/tidyxl\")"},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"examples","dir":"Articles","previous_headings":"tidyxl","what":"Examples","title":"Tidyxl","text":"package includes spreadsheet, ‘titanic.xlsx’, contains following pivot table: multi-row column headers make difficult import. popular package importing spreadsheets coerces pivot table dataframe. treats second header row though observations. tidyxl doesn’t coerce pivot table data frame. Instead, represents cell row, describes cell’s address, value properties. structure, cells can found filtering. Specific sheets can requested using xlsx_cells(file, sheet), names sheets file given xlsx_sheet_names().","code":"ftable(Titanic, row.vars = 1:2) #> Age Child Adult #> Survived No Yes No Yes #> Class Sex #> 1st Male 0 5 118 57 #> Female 0 1 4 140 #> 2nd Male 0 11 154 14 #> Female 0 13 13 80 #> 3rd Male 35 13 387 75 #> Female 17 14 89 76 #> Crew Male 0 0 670 192 #> Female 0 0 3 20 titanic <- system.file(\"extdata/titanic.xlsx\", package = \"tidyxl\") readxl::read_excel(titanic) #> New names: #> • `` -> `...1` #> • `` -> `...2` #> • `` -> `...5` #> • `` -> `...7` #> # A tibble: 10 × 7 #> ...1 ...2 Age Child ...5 Adult ...7 #> #> 1 NA NA Survived No Yes No Yes #> 2 Class Sex NA NA NA NA NA #> 3 1st Male NA 0 5 118 57 #> 4 NA Female NA 0 1 4 140 #> 5 2nd Male NA 0 11 154 14 #> 6 NA Female NA 0 13 13 80 #> 7 3rd Male NA 35 13 387 75 #> 8 NA Female NA 17 14 89 76 #> 9 Crew Male NA 0 0 670 192 #> 10 NA Female NA 0 0 3 20 library(tidyxl) x <- xlsx_cells(titanic) dplyr::glimpse(x) #> Rows: 60 #> Columns: 24 #> $ sheet \"Sheet1\", \"Sheet1\", \"Sheet1\", \"Sheet1\", \"Sheet1\", … #> $ address \"C1\", \"D1\", \"E1\", \"F1\", \"G1\", \"C2\", \"D2\", \"E2\", \"F… #> $ row 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 4, 4, 4, 4, 4,… #> $ col 3, 4, 5, 6, 7, 3, 4, 5, 6, 7, 1, 2, 1, 2, 4, 5, 6,… #> $ is_blank FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, FAL… #> $ content \"0\", \"1\", NA, \"2\", NA, \"3\", \"4\", \"5\", \"4\", \"5\", \"6… #> $ data_type \"character\", \"character\", \"blank\", \"character\", \"b… #> $ error NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ logical NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ numeric NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ date NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N… #> $ character \"Age\", \"Child\", NA, \"Adult\", NA, \"Survived\", \"No\",… #> $ character_formatted [], [], , [… #> $ formula NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ is_array FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, F… #> $ formula_ref NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ formula_group NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ comment NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ height 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15… #> $ width 8.38, 8.38, 8.38, 8.38, 8.38, 8.38, 8.38, 8.38, 8.… #> $ row_outline_level 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,… #> $ col_outline_level 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,… #> $ style_format \"Normal\", \"Normal\", \"Normal\", \"Normal\", \"Normal\", … #> $ local_format_id 2, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 2, 3, 3, 1, 1, 1,… x[x$data_type == \"character\", c(\"address\", \"character\")] #> # A tibble: 22 × 2 #> address character #> #> 1 C1 Age #> 2 D1 Child #> 3 F1 Adult #> 4 C2 Survived #> 5 D2 No #> 6 E2 Yes #> 7 F2 No #> 8 G2 Yes #> 9 A3 Class #> 10 B3 Sex #> # ℹ 12 more rows x[x$row == 4, c(\"address\", \"character\", \"numeric\")] #> # A tibble: 6 × 3 #> address character numeric #> #> 1 A4 1st NA #> 2 B4 Male NA #> 3 D4 NA 0 #> 4 E4 NA 5 #> 5 F4 NA 118 #> 6 G4 NA 57"},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"formatting","dir":"Articles","previous_headings":"tidyxl > Examples","what":"Formatting","title":"Tidyxl","text":"original spreadsheet formatting applied cells. can also retrieved using tidyxl, xlsx_formats() function. Formatting available using columns local_format_id style_format indexes separate list--lists structure. ‘Local’ formatting common kind, applied individual cells. ‘Style’ formatting usually applied blocks cells, defines several formats . screenshot styles buttons Excel. Formatting can looked follows. see available kinds formats, use str(formats).","code":"# Bold formats <- xlsx_formats(titanic) formats$local$font$bold #> [1] FALSE TRUE FALSE FALSE x[x$local_format_id %in% which(formats$local$font$bold), c(\"address\", \"character\")] #> # A tibble: 4 × 2 #> address character #> #> 1 C1 Age #> 2 C2 Survived #> 3 A3 Class #> 4 B3 Sex # Yellow fill formats$local$fill$patternFill$fgColor$rgb #> [1] NA NA NA \"FFFFFF00\" x[x$local_format_id %in% which(formats$local$fill$patternFill$fgColor$rgb == \"FFFFFF00\"), c(\"address\", \"numeric\")] #> # A tibble: 2 × 2 #> address numeric #> #> 1 F11 3 #> 2 G11 20 # Styles by name formats$style$font$name[\"Normal\"] #> Normal #> \"Calibri\" head(x[x$style_format == \"Normal\", c(\"address\", \"character\")]) #> # A tibble: 6 × 2 #> address character #> #> 1 C1 Age #> 2 D1 Child #> 3 E1 NA #> 4 F1 Adult #> 5 G1 NA #> 6 C2 Survived # In-cell formatting is available in the `character_formatted` column as a data # frame, one row per substring. examples <- system.file(\"/extdata/examples.xlsx\", package = \"tidyxl\") xlsx_cells(examples)$character_formatted[77] #> [[1]] #> # A tibble: 16 × 14 #> character bold italic underline strike vertAlign size color_rgb color_theme #> #> 1 \"in-cell\" FALSE FALSE NA FALSE NA 0 NA NA #> 2 \"bold\" TRUE FALSE NA FALSE NA 0 FF000000 2 #> 3 \"italic\" FALSE TRUE NA FALSE NA 0 FF000000 2 #> 4 \"underli… FALSE FALSE single FALSE NA 0 FF000000 2 #> 5 \"underli… FALSE FALSE double FALSE NA 0 FF000000 2 #> 6 \"singlea… FALSE FALSE singleAc… FALSE NA 0 FF000000 2 #> 7 \"doublea… FALSE FALSE doubleAc… FALSE NA 0 FF000000 2 #> 8 \"striket… FALSE FALSE NA TRUE NA 0 FF000000 2 #> 9 \"subscri… FALSE FALSE NA FALSE subscript 0 FF000000 2 #> 10 \"supersc… FALSE FALSE NA FALSE superscr… 0 FF000000 2 #> 11 \"red\" FALSE FALSE NA FALSE NA 0 FFFF0000 NA #> 12 \"theme\" FALSE FALSE NA FALSE NA 0 FFC0504D 6 #> 13 \"tint\" FALSE FALSE NA FALSE NA 0 FFC0504D 6 #> 14 \"size\" FALSE FALSE NA FALSE NA 0 FFFF0000 NA #> 15 \"arial\" FALSE FALSE NA FALSE NA 0 FFFF0000 NA #> 16 \"UTF8Sté… FALSE FALSE NA FALSE NA 0 FFFF0000 NA #> # ℹ 5 more variables: color_indexed , color_tint , font , #> # family , scheme "},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"comments","dir":"Articles","previous_headings":"tidyxl > Examples","what":"Comments","title":"Tidyxl","text":"Comments available alongside cell values.","code":"x[!is.na(x$comment), c(\"address\", \"comment\")] #> # A tibble: 1 × 2 #> address comment #> #> 1 G11 All women in the crew worked in the victualling department."},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"formulas","dir":"Articles","previous_headings":"tidyxl > Examples","what":"Formulas","title":"Tidyxl","text":"Formulas available, quirks. top five cells show results formulas available usual columns error, logical, numeric, date, character.","code":"options(width = 120) y <- xlsx_cells(examples, \"Sheet1\") y[!is.na(y$formula), c(\"address\", \"formula\", \"is_array\", \"formula_ref\", \"formula_group\", \"error\", \"logical\", \"numeric\", \"date\", \"character\")] #> # A tibble: 32 × 10 #> address formula is_array formula_ref formula_group error logical numeric date character #> #> 1 A1 \"1/0\" FALSE NA NA #DIV/0! NA NA NA NA #> 2 A14 \"1=1\" FALSE NA NA NA TRUE NA NA NA #> 3 A15 \"A4+1\" FALSE NA NA NA NA 1338 NA NA #> 4 A16 \"DATE(2017,1,18)\" FALSE NA NA NA NA NA 2017-01-18 00:00:00 NA #> 5 A17 \"\\\"Hello, World!\\\"\" FALSE NA NA NA NA NA NA Hello, Wo… #> 6 A19 \"$A$18+1\" FALSE NA NA NA NA 2 NA NA #> 7 B19 \"A18+2\" FALSE NA NA NA NA 3 NA NA #> 8 A20 \"$A$18+1\" FALSE A20:A21 0 NA NA 2 NA NA #> 9 B20 \"A19+2\" FALSE B20:B21 1 NA NA 4 NA NA #> 10 A21 \"$A$18+1\" FALSE NA 0 NA NA 2 NA NA #> # ℹ 22 more rows"},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"shared-formulas","dir":"Articles","previous_headings":"tidyxl > Examples > Formulas","what":"Shared formulas","title":"Tidyxl","text":"Cells A20 A21 illustrate formulas normalised written file, using formula_ref formula_group columns. group cells whose formulas differ cell reference (e.g. “=A1+1”, “=A2+1”, “=A3+1”, etc.), one formula group written file, tidyxl infers formulas cells group must , relative positions.","code":""},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"array-formulas","dir":"Articles","previous_headings":"tidyxl > Examples > Formulas","what":"Array formulas","title":"Tidyxl","text":"two kinds array formulas: ones compute arrays, ones whose output array (cells). kinds distinguished spreadsheet programs curly braces, e.g. {SUM(A19:A21*B19:B21)}. tidyxl, curly braces ommitted (file ), instead is_array column value TRUE. first kind (compute arrays) illustrated cell A22. second kind (whose value spread across array cells) illustrated cells A23 A24. formula given top-left cell (A23), also cell describes range cells containing result, formula-ref column. results stored relevant cells (A23 A24). Unlike shared formulas, formula_group associate cells array formula’s result. need identify cells, use cellranger package formula_ref column.","code":""},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"formulas-referring-to-other-files","dir":"Articles","previous_headings":"tidyxl > Examples > Formulas","what":"Formulas referring to other files","title":"Tidyxl","text":"Cell A25 contains formula refers another file. [1] index table files. roadmap tidyxl includes de-referencing numbers.","code":""},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"tokenizing-formulas","dir":"Articles","previous_headings":"tidyxl > Examples > Formulas","what":"Tokenizing formulas","title":"Tidyxl","text":"function xlex() separates formulas tokens different types, gives depth within nested formula. name bad pun ‘Excel’ ‘lexer’. Try online demo install experimental lexl package run demo_lexl() locally. useful detecting spreadsheet smells, poor practices spreadsheet design, deep nests functions, embedding constants formulas. See vignette examples details.","code":"x <- xlex(\"MIN(3,MAX(2,A1))\") x #> root #> ¦-- MIN function #> °-- ( fun_open #> ¦-- 3 number #> ¦-- , separator #> ¦-- MAX function #> °-- ( fun_open #> ¦-- 2 number #> ¦-- , separator #> °-- A1 ref #> °-- ) fun_close #> °-- ) fun_close"},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"named-ranges","dir":"Articles","previous_headings":"tidyxl > Examples","what":"Named ranges","title":"Tidyxl","text":"Names imported xlsx_names(). Also called ‘named formulas’ ‘defined names’, usually used name particular cells ranges, making formulas refer readable. Ones ranges identifed is_range column (using is_range()), making easier match names cells returned xlsx_cells() – e.g. using cellranger package. scope name within particular sheet, rather global, sheet name given.","code":"xlsx_names(examples) #> rId sheet name formula comment hidden is_range #> 1 1 Sheet1 named_local_formula MAX(Sheet1!$A$129:$A$130)+1 FALSE FALSE #> 2 4 E09904.2 sheet_beyond_chart E09904.2!$A$1,E09904.2!$C$1 FALSE TRUE #> 3 NA intersection Sheet1!$B:$B Sheet1!$8:$8 FALSE TRUE #> 4 NA named_global_formula Sheet1!$A$129-1 FALSE FALSE #> 5 NA named_range Sheet1!$A$129 My comment FALSE TRUE"},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"data-validation-rules","dir":"Articles","previous_headings":"tidyxl > Examples","what":"Data validation rules","title":"Tidyxl","text":"Data validation rules imported xlsx_validation(). rules control values may entered cell, often used create drop-list cell. Read vignette details.","code":"xlsx_validation(examples) #> # A tibble: 15 × 14 #> sheet ref type operator formula1 formula2 allow_blank show_input_message prompt_title prompt_body #> #> 1 Sheet1 A106 whole between 0 9 TRUE TRUE message tit… message bo… #> 2 Sheet1 A108 list NA $B$108 NA TRUE TRUE NA NA #> 3 Sheet1 A110 date between 2017-01… 2017-01… TRUE TRUE NA NA #> 4 Sheet1 A111 time between 00:00:00 09:00:00 TRUE TRUE NA NA #> 5 Sheet1 A112 textLength between 0 9 TRUE TRUE NA NA #> 6 Sheet1 A114 whole notBetween 0 9 TRUE TRUE NA NA #> 7 Sheet1 A115,A121:A122 whole equal 0 NA TRUE TRUE NA NA #> 8 Sheet1 A116 whole notEqual 0 NA TRUE TRUE NA NA #> 9 Sheet1 A117 whole greaterTh… 0 NA TRUE TRUE NA NA #> 10 Sheet1 A119 whole greaterTh… 0 NA TRUE TRUE NA NA #> 11 Sheet1 A120 whole lessThanO… 0 NA TRUE TRUE NA NA #> 12 Sheet1 A118 whole lessThan 0 NA TRUE TRUE NA NA #> 13 Sheet1 A107 decimal notBetween 0 9 FALSE FALSE NA NA #> 14 Sheet1 A113 custom NA A113<=L… NA TRUE TRUE NA NA #> 15 Sheet1 A109 list NA $B$108 NA TRUE TRUE NA NA #> # ℹ 4 more variables: show_error_message , error_title , error_body , error_symbol "},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"philosophy","dir":"Articles","previous_headings":"tidyxl","what":"Philosophy","title":"Tidyxl","text":"Information many spreadsheets easily imported R. ? R packages import spreadsheets difficulty unless layout spreadsheet conforms strict definition ‘table’, e.g.: observations rows variables columns single header row information represented characters, whether textual, logical, numeric rules designed eliminate ambiguity interpretation information. spreadsheeting software relaxes rules trade ambiguity expression via media: proximity (headers, .e. first value top column) formatting (colours borders) Humans can usually resolve ambiguities contextual knowledge, computers limited ignorance. Programmers hampered : language’s expressiveness loss information transfer spreadsheet programming library Information lost software discards order force data tabular form. Sometimes date formatting retained, mostly formatting lost, position inferred . tidyxl addresses programmer’s problems discarding information. imports content, position formatting cells, leaving user associate different forms information, re-encode tabular form without loss. unpivotr package developed assist step.","code":""},{"path":"https://nacnudus.github.io/tidyxl/articles/tidyxl.html","id":"similar-projects","dir":"Articles","previous_headings":"tidyxl","what":"Similar projects","title":"Tidyxl","text":"tidyxl originally derived readxl still contains code, hence inherits GPL-3 licence. readxl intended importing tabular data single row column headers, whereas tidyxl general, less magic. rsheets project several R packages early stages importing spreadsheet information Excel Google Sheets R, manipulating , potentially parsing processing formulas writing spreadsheet files. particular, jailbreaker attempts extract non-tabular data spreadsheets tabular structures automatically via clever algorithms. tidyxl differs rsheets scope (tidyxl never import charts, example), implementation (tidyxl implemented mainly C++ quite fast, little slower readxl). unpivotr package related tidyxl provides tools unpivoting complex non-tabular data layouts using AI (intelligence, artificial intelligence). way corresponds jailbreaker, different philosophy.","code":""},{"path":"https://nacnudus.github.io/tidyxl/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Duncan Garmonsway. Author, maintainer. Hadley Wickham. Contributor. Author included readxl fragments Jenny Bryan. Contributor. Author included readxl fragments RStudio. Copyright holder. Copyright holder included readxl fragments Marcin Kalicinski. Contributor, copyright holder. Author included RapidXML code","code":""},{"path":"https://nacnudus.github.io/tidyxl/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Garmonsway D (2023). tidyxl: Read Untidy Excel Files. https://github.com/nacnudus/tidyxl, https://nacnudus.github.io/tidyxl/.","code":"@Manual{, title = {tidyxl: Read Untidy Excel Files}, author = {Duncan Garmonsway}, year = {2023}, note = {https://github.com/nacnudus/tidyxl, https://nacnudus.github.io/tidyxl/}, }"},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"tidyxl","dir":"","previous_headings":"","what":"Read Untidy Excel Files","title":"Read Untidy Excel Files","text":"tidyxl imports non-tabular data Excel files R. exposes cell content, position, formatting comments tidy structure manipulation, especially unpivotr package. supports xml-based file formats ‘.xlsx’ ‘.xlsm’ via embedded RapidXML C++ library. support binary file formats ‘.xlsb’ ‘.xls’. also provides function xlex() tokenizing formulas. See vignette details. useful detecting ‘spreadsheet smells’ (poor practice embedding constants formulas, using deep levels nesting), understanding dependency structures within spreadsheets.","code":""},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"make-cells-tidy","dir":"","previous_headings":"","what":"Make cells tidy","title":"Read Untidy Excel Files","text":"Tidyxl represents cell one row dataframe. Like . can tidy cells? best places start : Spreadsheet Munging Strategies, free, online cookbook using tidyxl unpivotr Screencasts YouTube. Worked examples GitHub. Otherwise see examples . Breaking changes version 1.0.0 release breaking changes. See NEWS.md details. previous version can installed follows.","code":"devtools::install_version(\"tidyxl\", version = \"0.2.3\", repos = \"http://cran.us.r-project.org\")"},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"Read Untidy Excel Files","text":"","code":"devtools::install_github(\"nacnudus/tidyxl\")"},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"examples","dir":"","previous_headings":"","what":"Examples","title":"Read Untidy Excel Files","text":"package includes spreadsheet, ‘titanic.xlsx’, contains following pivot table: multi-row column headers make difficult import. popular package importing spreadsheets coerces pivot table dataframe. treats second header row though observations. tidyxl doesn’t coerce pivot table data frame. Instead, represents cell row, describes cell’s address, value properties. structure, cells can found filtering. Specific sheets can requested using xlsx_cells(file, sheet), names sheets file given xlsx_sheet_names().","code":"ftable(Titanic, row.vars = 1:2) #> Age Child Adult #> Survived No Yes No Yes #> Class Sex #> 1st Male 0 5 118 57 #> Female 0 1 4 140 #> 2nd Male 0 11 154 14 #> Female 0 13 13 80 #> 3rd Male 35 13 387 75 #> Female 17 14 89 76 #> Crew Male 0 0 670 192 #> Female 0 0 3 20 titanic <- system.file(\"extdata/titanic.xlsx\", package = \"tidyxl\") readxl::read_excel(titanic) #> New names: #> • `` -> `...1` #> • `` -> `...2` #> • `` -> `...5` #> • `` -> `...7` #> # A tibble: 10 × 7 #> ...1 ...2 Age Child ...5 Adult ...7 #> #> 1 Survived No Yes No Yes #> 2 Class Sex #> 3 1st Male 0 5 118 57 #> 4 Female 0 1 4 140 #> 5 2nd Male 0 11 154 14 #> 6 Female 0 13 13 80 #> 7 3rd Male 35 13 387 75 #> 8 Female 17 14 89 76 #> 9 Crew Male 0 0 670 192 #> 10 Female 0 0 3 20 library(tidyxl) x <- xlsx_cells(titanic) dplyr::glimpse(x) #> Rows: 60 #> Columns: 24 #> $ sheet \"Sheet1\", \"Sheet1\", \"Sheet1\", \"Sheet1\", \"Sheet1\", … #> $ address \"C1\", \"D1\", \"E1\", \"F1\", \"G1\", \"C2\", \"D2\", \"E2\", \"F… #> $ row 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 4, 4, 4, 4, 4,… #> $ col 3, 4, 5, 6, 7, 3, 4, 5, 6, 7, 1, 2, 1, 2, 4, 5, 6,… #> $ is_blank FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, FAL… #> $ content \"0\", \"1\", NA, \"2\", NA, \"3\", \"4\", \"5\", \"4\", \"5\", \"6… #> $ data_type \"character\", \"character\", \"blank\", \"character\", \"b… #> $ error NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ logical NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ numeric NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ date NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N… #> $ character \"Age\", \"Child\", NA, \"Adult\", NA, \"Survived\", \"No\",… #> $ character_formatted [], [], , [… #> $ formula NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ is_array FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, F… #> $ formula_ref NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ formula_group NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ comment NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ height 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15… #> $ width 8.38, 8.38, 8.38, 8.38, 8.38, 8.38, 8.38, 8.38, 8.… #> $ row_outline_level 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,… #> $ col_outline_level 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,… #> $ style_format \"Normal\", \"Normal\", \"Normal\", \"Normal\", \"Normal\", … #> $ local_format_id 2, 3, 3, 3, 3, 2, 3, 3, 3, 3, 2, 2, 3, 3, 1, 1, 1,… x[x$data_type == \"character\", c(\"address\", \"character\")] #> # A tibble: 22 × 2 #> address character #> #> 1 C1 Age #> 2 D1 Child #> 3 F1 Adult #> 4 C2 Survived #> 5 D2 No #> 6 E2 Yes #> 7 F2 No #> 8 G2 Yes #> 9 A3 Class #> 10 B3 Sex #> # … with 12 more rows x[x$row == 4, c(\"address\", \"character\", \"numeric\")] #> # A tibble: 6 × 3 #> address character numeric #> #> 1 A4 1st NA #> 2 B4 Male NA #> 3 D4 0 #> 4 E4 5 #> 5 F4 118 #> 6 G4 57"},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"formatting","dir":"","previous_headings":"Examples","what":"Formatting","title":"Read Untidy Excel Files","text":"original spreadsheet formatting applied cells. can also retrieved using tidyxl, xlsx_formats() function. Formatting available using columns local_format_id style_format indexes separate list--lists structure. ‘Local’ formatting common kind, applied individual cells. ‘Style’ formatting usually applied blocks cells, defines several formats . screenshot styles buttons Excel. Formatting can looked follows. see available kinds formats, use str(formats).","code":"# Bold formats <- xlsx_formats(titanic) formats$local$font$bold #> [1] FALSE TRUE FALSE FALSE x[x$local_format_id %in% which(formats$local$font$bold), c(\"address\", \"character\")] #> # A tibble: 4 × 2 #> address character #> #> 1 C1 Age #> 2 C2 Survived #> 3 A3 Class #> 4 B3 Sex # Yellow fill formats$local$fill$patternFill$fgColor$rgb #> [1] NA NA NA \"FFFFFF00\" x[x$local_format_id %in% which(formats$local$fill$patternFill$fgColor$rgb == \"FFFFFF00\"), c(\"address\", \"numeric\")] #> # A tibble: 2 × 2 #> address numeric #> #> 1 F11 3 #> 2 G11 20 # Styles by name formats$style$font$name[\"Normal\"] #> Normal #> \"Calibri\" head(x[x$style_format == \"Normal\", c(\"address\", \"character\")]) #> # A tibble: 6 × 2 #> address character #> #> 1 C1 Age #> 2 D1 Child #> 3 E1 #> 4 F1 Adult #> 5 G1 #> 6 C2 Survived # In-cell formatting is available in the `character_formatted` column as a data # frame, one row per substring. examples <- system.file(\"/extdata/examples.xlsx\", package = \"tidyxl\") xlsx_cells(examples)$character_formatted[77] #> [[1]] #> # A tibble: 16 × 14 #> character bold italic under…¹ strike vertA…² size color…³ color…⁴ color…⁵ #> #> 1 \"in-cell\" FALSE FALSE FALSE 0 NA NA #> 2 \"bold\" TRUE FALSE FALSE 0 FF0000… 2 NA #> 3 \"italic\" FALSE TRUE FALSE 0 FF0000… 2 NA #> 4 \"underline\" FALSE FALSE single FALSE 0 FF0000… 2 NA #> 5 \"underline… FALSE FALSE double FALSE 0 FF0000… 2 NA #> 6 \"singleacc… FALSE FALSE single… FALSE 0 FF0000… 2 NA #> 7 \"doubleacc… FALSE FALSE double… FALSE 0 FF0000… 2 NA #> 8 \"strikethr… FALSE FALSE TRUE 0 FF0000… 2 NA #> 9 \"subscript\" FALSE FALSE FALSE subscr… 0 FF0000… 2 NA #> 10 \"superscri… FALSE FALSE FALSE supers… 0 FF0000… 2 NA #> 11 \"red\" FALSE FALSE FALSE 0 FFFF00… NA NA #> 12 \"theme\" FALSE FALSE FALSE 0 FFC050… 6 NA #> 13 \"tint\" FALSE FALSE FALSE 0 FFC050… 6 NA #> 14 \"size\" FALSE FALSE FALSE 0 FFFF00… NA NA #> 15 \"arial\" FALSE FALSE FALSE 0 FFFF00… NA NA #> 16 \"UTF8Stéph… FALSE FALSE FALSE 0 FFFF00… NA NA #> # … with 4 more variables: color_tint , font , family , #> # scheme , and abbreviated variable names ¹​underline, ²​vertAlign, #> # ³​color_rgb, ⁴​color_theme, ⁵​color_indexed"},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"comments","dir":"","previous_headings":"Examples","what":"Comments","title":"Read Untidy Excel Files","text":"Comments available alongside cell values.","code":"x[!is.na(x$comment), c(\"address\", \"comment\")] #> # A tibble: 1 × 2 #> address comment #> #> 1 G11 All women in the crew worked in the victualling department."},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"formulas","dir":"","previous_headings":"Examples","what":"Formulas","title":"Read Untidy Excel Files","text":"Formulas available, quirks. top five cells show results formulas available usual columns error, logical, numeric, date, character.","code":"options(width = 120) y <- xlsx_cells(examples, \"Sheet1\") y[!is.na(y$formula), c(\"address\", \"formula\", \"is_array\", \"formula_ref\", \"formula_group\", \"error\", \"logical\", \"numeric\", \"date\", \"character\")] #> # A tibble: 32 × 10 #> address formula is_array formula_ref formula_group error logical numeric date character #> #> 1 A1 \"1/0\" FALSE NA #DIV/0! NA NA NA #> 2 A14 \"1=1\" FALSE NA TRUE NA NA #> 3 A15 \"A4+1\" FALSE NA NA 1338 NA #> 4 A16 \"DATE(2017,1,18)\" FALSE NA NA NA 2017-01-18 00:00:00 #> 5 A17 \"\\\"Hello, World!\\\"\" FALSE NA NA NA NA Hello, Wo… #> 6 A19 \"$A$18+1\" FALSE NA NA 2 NA #> 7 B19 \"A18+2\" FALSE NA NA 3 NA #> 8 A20 \"$A$18+1\" FALSE A20:A21 0 NA 2 NA #> 9 B20 \"A19+2\" FALSE B20:B21 1 NA 4 NA #> 10 A21 \"$A$18+1\" FALSE 0 NA 2 NA #> # … with 22 more rows"},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"shared-formulas","dir":"","previous_headings":"Examples > Formulas","what":"Shared formulas","title":"Read Untidy Excel Files","text":"Cells A20 A21 illustrate formulas normalised written file, using formula_ref formula_group columns. group cells whose formulas differ cell reference (e.g. “=A1+1”, “=A2+1”, “=A3+1”, etc.), one formula group written file, tidyxl infers formulas cells group must , relative positions.","code":""},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"array-formulas","dir":"","previous_headings":"Examples > Formulas","what":"Array formulas","title":"Read Untidy Excel Files","text":"two kinds array formulas: ones compute arrays, ones whose output array (cells). kinds distinguished spreadsheet programs curly braces, e.g. {SUM(A19:A21*B19:B21)}. tidyxl, curly braces ommitted (file ), instead is_array column value TRUE. first kind (compute arrays) illustrated cell A22. second kind (whose value spread across array cells) illustrated cells A23 A24. formula given top-left cell (A23), also cell describes range cells containing result, formula-ref column. results stored relevant cells (A23 A24). Unlike shared formulas, formula_group associate cells array formula’s result. need identify cells, use cellranger package formula_ref column.","code":""},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"formulas-referring-to-other-files","dir":"","previous_headings":"Examples > Formulas","what":"Formulas referring to other files","title":"Read Untidy Excel Files","text":"Cell A25 contains formula refers another file. [1] index table files. roadmap tidyxl includes de-referencing numbers.","code":""},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"tokenizing-formulas","dir":"","previous_headings":"Examples > Formulas","what":"Tokenizing formulas","title":"Read Untidy Excel Files","text":"function xlex() separates formulas tokens different types, gives depth within nested formula. name bad pun ‘Excel’ ‘lexer’. Try online demo, install experimental lexl package run demo_lexl() locally. useful detecting spreadsheet smells, poor practices spreadsheet design, deep nests functions, embedding constants formulas. See vignette examples details.","code":"x <- xlex(\"MIN(3,MAX(2,A1))\") x #> root #> ¦-- MIN function #> °-- ( fun_open #> ¦-- 3 number #> ¦-- , separator #> ¦-- MAX function #> °-- ( fun_open #> ¦-- 2 number #> ¦-- , separator #> °-- A1 ref #> °-- ) fun_close #> °-- ) fun_close"},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"named-ranges","dir":"","previous_headings":"Examples","what":"Named ranges","title":"Read Untidy Excel Files","text":"Names imported xlsx_names(). Also called ‘named formulas’ ‘defined names’, usually used name particular cells ranges, making formulas refer readable. Ones ranges identifed is_range column (using is_range()), making easier match names cells returned xlsx_cells() – e.g. using cellranger package. scope name within particular sheet, rather global, sheet name given.","code":"xlsx_names(examples) #> rId sheet name formula comment hidden is_range #> 1 1 Sheet1 named_local_formula MAX(Sheet1!$A$129:$A$130)+1 FALSE FALSE #> 2 4 E09904.2 sheet_beyond_chart E09904.2!$A$1,E09904.2!$C$1 FALSE TRUE #> 3 NA intersection Sheet1!$B:$B Sheet1!$8:$8 FALSE TRUE #> 4 NA named_global_formula Sheet1!$A$129-1 FALSE FALSE #> 5 NA named_range Sheet1!$A$129 My comment FALSE TRUE"},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"data-validation-rules","dir":"","previous_headings":"Examples","what":"Data validation rules","title":"Read Untidy Excel Files","text":"Data validation rules imported xlsx_validation(). rules control values may entered cell, often used create drop-list cell. Read vignette details.","code":"xlsx_validation(examples) #> # A tibble: 15 × 14 #> sheet ref type opera…¹ formu…² formu…³ allow…⁴ show_…⁵ promp…⁶ promp…⁷ show_…⁸ error…⁹ error…˟ error…˟ #> #> 1 Sheet1 A106 whole between 0 9 TRUE TRUE messag… messag… TRUE error … error … stop #> 2 Sheet1 A108 list $B$108 TRUE TRUE TRUE warning #> 3 Sheet1 A110 date between 2017-0… 2017-0… TRUE TRUE TRUE stop #> 4 Sheet1 A111 time between 00:00:… 09:00:… TRUE TRUE TRUE stop #> 5 Sheet1 A112 textLe… between 0 9 TRUE TRUE TRUE stop #> 6 Sheet1 A114 whole notBet… 0 9 TRUE TRUE TRUE stop #> 7 Sheet1 A115,A121:A122 whole equal 0 TRUE TRUE TRUE stop #> 8 Sheet1 A116 whole notEqu… 0 TRUE TRUE TRUE stop #> 9 Sheet1 A117 whole greate… 0 TRUE TRUE TRUE stop #> 10 Sheet1 A119 whole greate… 0 TRUE TRUE TRUE stop #> 11 Sheet1 A120 whole lessTh… 0 TRUE TRUE TRUE stop #> 12 Sheet1 A118 whole lessTh… 0 TRUE TRUE TRUE stop #> 13 Sheet1 A107 decimal notBet… 0 9 FALSE FALSE FALSE stop #> 14 Sheet1 A113 custom A113<=… TRUE TRUE TRUE stop #> 15 Sheet1 A109 list $B$108 TRUE TRUE TRUE inform… #> # … with abbreviated variable names ¹​operator, ²​formula1, ³​formula2, ⁴​allow_blank, ⁵​show_input_message, ⁶​prompt_title, #> # ⁷​prompt_body, ⁸​show_error_message, ⁹​error_title, ˟​error_body, ˟​error_symbol"},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"philosophy","dir":"","previous_headings":"","what":"Philosophy","title":"Read Untidy Excel Files","text":"Information many spreadsheets easily imported R. ? R packages import spreadsheets difficulty unless layout spreadsheet conforms strict definition ‘table’, e.g.: observations rows variables columns single header row information represented characters, whether textual, logical, numeric rules designed eliminate ambiguity interpretation information. spreadsheeting software relaxes rules trade ambiguity expression via media: proximity (headers, .e. first value top column) formatting (colours borders) Humans can usually resolve ambiguities contextual knowledge, computers limited ignorance. Programmers hampered : language’s expressiveness loss information transfer spreadsheet programming library Information lost software discards order force data tabular form. Sometimes date formatting retained, mostly formatting lost, position inferred . tidyxl addresses programmer’s problems discarding information. imports content, position formatting cells, leaving user associate different forms information, re-encode tabular form without loss. unpivotr package developed assist step.","code":""},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"similar-projects","dir":"","previous_headings":"","what":"Similar projects","title":"Read Untidy Excel Files","text":"tidyxl originally derived readxl still contains code, hence inherits GPL-3 licence. readxl intended importing tabular data single row column headers, whereas tidyxl general, less magic. rsheets project several R packages early stages importing spreadsheet information Excel Google Sheets R, manipulating , potentially parsing processing formulas writing spreadsheet files. particular, jailbreaker attempts extract non-tabular data spreadsheets tabular structures automatically via clever algorithms. tidyxl differs rsheets scope (tidyxl never import charts, example), implementation (tidyxl implemented mainly C++ quite fast, little slower readxl). unpivotr package related tidyxl provides tools unpivoting complex non-tabular data layouts using AI (intelligence, artificial intelligence). way corresponds jailbreaker, different philosophy.","code":""},{"path":"https://nacnudus.github.io/tidyxl/index.html","id":"mailing-list","dir":"","previous_headings":"","what":"Mailing list","title":"Read Untidy Excel Files","text":"bugs /issues, create new issue GitHub questions comments, please subscribe tidyxl-devel mailing list. must member post messages, anyone can read archived discussions.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/excel_functions.html","id":null,"dir":"Reference","previous_headings":"","what":"Names of all Excel functions — excel_functions","title":"Names of all Excel functions — excel_functions","text":"dataset containing names functions available Excel. useful identifying user-defined functions formulas tokenized xlex().","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/excel_functions.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Names of all Excel functions — excel_functions","text":"","code":"excel_functions"},{"path":"https://nacnudus.github.io/tidyxl/reference/excel_functions.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Names of all Excel functions — excel_functions","text":"character vector length 600.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/excel_functions.html","id":"source","dir":"Reference","previous_headings":"","what":"Source","title":"Names of all Excel functions — excel_functions","text":"Pages 26--27 Microsoft's document \"Excel (.xlsx) extensions office openxml spreadsheetml file format p.24\" https://docs.microsoft.com/en-us/openspecs/office_standards/ms-xlsx/2c5dee00-eff2-4b22-92b6-0738acd4475e, revision 8.0 2017-06-20.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/excel_functions.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Names of all Excel functions — excel_functions","text":"Note includes future function names already reserved.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/is_date_format.html","id":null,"dir":"Reference","previous_headings":"","what":"Test that Excel number formats are date formats — is_date_format","title":"Test that Excel number formats are date formats — is_date_format","text":"is_date_format() tests whether Excel number format string resolve date Excel. example, number format string \"yyyy-mm-dd\" resolve date, whereas string \"0.0\\\\%\" . useful cell formula contains number formatting string (e.g. TEXT(45678,\"yyyy\")), need know constant 45678 date order recover full resolution (rather parsing character output \"2025\" year). used internally convert value cell correct data type.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/is_date_format.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Test that Excel number formats are date formats — is_date_format","text":"","code":"is_date_format(x)"},{"path":"https://nacnudus.github.io/tidyxl/reference/is_date_format.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Test that Excel number formats are date formats — is_date_format","text":"x character vector number format strings","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/is_date_format.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Test that Excel number formats are date formats — is_date_format","text":"","code":"is_date_format(c(\"yyyy-mm-dd\", \"0.0%\", \"h:m:s\", \"£#,##0;[Red]-£#,##0\")) #> [1] TRUE FALSE TRUE FALSE"},{"path":"https://nacnudus.github.io/tidyxl/reference/is_range.html","id":null,"dir":"Reference","previous_headings":"","what":"Test that Excel formulas are ranges — is_range","title":"Test that Excel formulas are ranges — is_range","text":"is_range() tests whether Excel formula range. formula like A1 range, whereas formula like MAX(A1,2) . Formulas evaluated, returns FALSE formulas eventually resolve arrange (e.g. INDEX(A1:A10,2)) immediately range.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/is_range.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Test that Excel formulas are ranges — is_range","text":"","code":"is_range(x)"},{"path":"https://nacnudus.github.io/tidyxl/reference/is_range.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Test that Excel formulas are ranges — is_range","text":"x character vector formulas","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/is_range.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Test that Excel formulas are ranges — is_range","text":"","code":"x <- c(\"A1\", \"Sheet1!A1\", \"[0]Sheet1!A1\", \"A1,A2\", \"A:A 3:3\", \"MAX(A1,2)\") is_range(x) #> [1] TRUE TRUE TRUE TRUE TRUE FALSE"},{"path":"https://nacnudus.github.io/tidyxl/reference/maybe_xlsx.html","id":null,"dir":"Reference","previous_headings":"","what":"Determine file format — maybe_xlsx","title":"Determine file format — maybe_xlsx","text":"Whether file may xlsx, xlsm, xltx xltm (rather xls xlt), based file signature \"magic number\", rather filename extension.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/maybe_xlsx.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Determine file format — maybe_xlsx","text":"","code":"maybe_xlsx(path)"},{"path":"https://nacnudus.github.io/tidyxl/reference/maybe_xlsx.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Determine file format — maybe_xlsx","text":"path File path","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/maybe_xlsx.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Determine file format — maybe_xlsx","text":"Logicial","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/maybe_xlsx.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Determine file format — maybe_xlsx","text":"'maybe', '', xlsx magic number common zip files, specific xlsx files. inverse, 'is_xls' possible either, xls magic number common Microsoft Office files .doc .ppt. uses logic Jenny Bryan's commit readxl package.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/maybe_xlsx.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Determine file format — maybe_xlsx","text":"","code":"examples_xlsx <- system.file(\"extdata/examples.xlsx\", package = \"tidyxl\") examples_xlsm <- system.file(\"extdata/examples.xlsm\", package = \"tidyxl\") examples_xltx <- system.file(\"extdata/examples.xltx\", package = \"tidyxl\") examples_xltm <- system.file(\"extdata/examples.xltm\", package = \"tidyxl\") examples_xlsb <- system.file(\"extdata/examples.xlsb\", package = \"tidyxl\") examples_xls <- system.file(\"extdata/examples.xls\", package = \"tidyxl\") maybe_xlsx(examples_xlsx) #> [1] TRUE maybe_xlsx(examples_xlsm) #> [1] TRUE maybe_xlsx(examples_xltx) #> [1] TRUE maybe_xlsx(examples_xltm) #> [1] TRUE maybe_xlsx(examples_xlsb) #> [1] TRUE maybe_xlsx(examples_xls) #> [1] FALSE"},{"path":"https://nacnudus.github.io/tidyxl/reference/tidy_xlsx.html","id":null,"dir":"Reference","previous_headings":"","what":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","title":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","text":"tidy_xlsx() deprecated. Please use xlsx_cells() xlsx_formats() instead. tidy_xlsx() imports data spreadsheets without coercing rectangle. cell represented row data frame, giving cell's address, contents, formula, height, width, keys look cell's formatting adjacent data structure within list returned function.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/tidy_xlsx.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","text":"","code":"tidy_xlsx(path, sheets = NA)"},{"path":"https://nacnudus.github.io/tidyxl/reference/tidy_xlsx.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","text":"path Path xlsx file. sheets Sheets read. Either character vector (names sheets), integer vector (positions sheets), NA (default, sheets).","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/tidy_xlsx.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","text":"list data within sheet ($data), formatting applied cell ($formats). sheet's data returned data frames, one per sheet, sheet name. example, data sheet named 'Worksheet' x$data$Worksheet. data frame following columns: address cell address A1 notation. row row number cell address (integer). col column number cell address (integer). is_blank Whether cell value data_type type cell, referring following columns: error, logical, numeric, date, character, blank. error error value cell. logical boolean value cell. numeric numeric value cell. date date value cell. character string value cell. character_formatted data frame substrings individual formatting. formula formula cell (see 'Details'). is_array Whether formula array formula. formula_ref address range cells group array formula shared formula applies (see 'Details'). formula_group formula group cell belongs (see 'Details'). comment text comment attached cell. height height cell's row, Excel's units. width width cell's column, Excel's units. style_format index table style formats x$formats$style (see 'Details'). local_format_id index table local cell formats x$formats$local (see 'Details').","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/tidy_xlsx.html","id":"formula","dir":"Reference","previous_headings":"","what":"Formula","title":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","text":"cell formula, value 'content' column result formula last time evaluated. Certain groups cells may share formula differs addresses referred formula; groups identified index, 'formula_group'. xlsx (Excel) file format records formula one cell group. xlsx_cells() propagates formulas cells group, making necessary changes relative addresses formula. Array formulas may also apply group cells, identified address 'formula_ref', xlsx (Excel) file format records formula one cell group. xlsx_cells() propagates formulas cells group. Unlike shared formulas, changes addresses array formulas necessary. Formulas refer workbooks currently name workbooks directly, instead via indices [1]. planned dereference .","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/tidy_xlsx.html","id":"formatting","dir":"Reference","previous_headings":"","what":"Formatting","title":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","text":"Cell formatting returned x$formats. two types scopes formatting: 'style' formatting, Excel's built-styles 'normal', 'bad', etc., 'local' formatting, overrides particular elements style, e.g. making bold. types returned x$formats$style x$formats$local, identical structures. look local formatting given cell, take cell's 'local_format_id' value (x$data$Sheet1[1, \"local_format_id\"]), use index format structure. E.g. look font size, x$formats$local$font$size[local_format_id]. see available formats, type str(x$formats$local). Colours may recorded three ways: hexadecimal RGB string without alpha, 'indexed' colour, index 'theme'. tidy_xlsx dereferences 'indexed' 'theme' colours hexadecimal RGB string representation, standardises RGB strings alpha channel first two characters. 'index' 'theme' name still provided. filter RGB string, look RGB values spreadsheet program (e.g. Excel, LibreOffice, Gnumeric), use grDevices::rgb() function convert hexadecimal string. Put alpha value first, e.g. Strings can formatted within cell, single cell can contain substrings different formatting. -cell formatting available column character_formatted, list-column data frames. row data frame describes substring formatting. cells without character value, character_formatted NULL, processing might need filter NULLs first.","code":"A <- 1; R <- 0.5; G <- 0; B <- 0 rgb(A, R, G, B) # [1] \"#FF800000\""},{"path":"https://nacnudus.github.io/tidyxl/reference/tidy_xlsx.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","text":"cell two 'values': content, sometimes also formula. also formatting applied 'style' level, can locally overridden.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/tidy_xlsx.html","id":"content","dir":"Reference","previous_headings":"","what":"Content","title":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","text":"Depending cell, content may numeric value 365 365.25, may represent date/datetime one Excel's date/datetime systems, may index internal table strings. tidy_xlsx() attempts infer correct data type cell, returning value appropriate column (error, logical, numeric, date, character). case cleverness unhelpful, unparsed value type information available 'content' 'type' columns.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/tidy_xlsx.html","id":"formula-1","dir":"Reference","previous_headings":"","what":"Formula","title":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","text":"cell formula, value 'content' column result formula last time evaluated. Certain groups cells may share formula differs addresses referred formula; groups identified index, 'formula_group'. xlsx (Excel) file format records formula one cell group, tidy_xlsx() propagates formula cells group, making necessary changes relative addresses formula. Array formulas may also apply group cells, identified address 'formula_ref', xlsx (Excel) file format records formula one cell group. Unlike ordinary formulas, tidy_xlsx() propagate cells group. Formulas refer workbooks currently name workbooks directly, instead via indices [1]. planned dereference .","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/tidy_xlsx.html","id":"formatting-1","dir":"Reference","previous_headings":"","what":"Formatting","title":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","text":"Cell formatting returned x$formats. two types formatting: 'style' formatting, Excel's built-styles 'normal', 'bad', etc., 'local' formatting, overrides style. returned x$formats$style x$formats$local, identical structures. look local formatting given cell, take cell's 'local_format_id' value (x$data$Sheet1[1, \"local_format_id\"]), use index format structure. E.g. look font size, x$formats$local$font$size[local_format_id]. see available formats, type str(x$formats$local).","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/tidy_xlsx.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Import xlsx (Excel) cell contents into a tidy structure. — tidy_xlsx","text":"","code":"if (FALSE) { examples <- system.file(\"extdata/examples.xlsx\", package = \"tidyxl\") # All sheets str(tidy_xlsx(examples)$data) # Specific sheet either by position or by name str(tidy_xlsx(examples, 2)$data) str(tidy_xlsx(examples, \"Sheet1\")$data) # Data (cell values) x <- tidy_xlsx(examples) str(x$data$Sheet1) # Formatting str(x$formats$local) # The formats of particular cells can be retrieved like this: Sheet1 <- x$data$Sheet1 x$formats$style$font$bold[Sheet1$style_format] x$formats$local$font$bold[Sheet1$local_format_id] # To filter for cells of a particular format, first filter the formats to get # the relevant indices, and then filter the cells by those indices. bold_indices <- which(x$formats$local$font$bold) Sheet1[Sheet1$local_format_id %in% bold_indices, ] # In-cell formatting is available in the `character_formatted` column as a # data frame, one row per substring. tidy_xlsx(examples)$data$Sheet1$character_formatted[77] }"},{"path":"https://nacnudus.github.io/tidyxl/reference/tidyxl-package.html","id":null,"dir":"Reference","previous_headings":"","what":"tidyxl: Import xlsx (Excel) spreadsheet data and formatting into tidy structures. — tidyxl-package","title":"tidyxl: Import xlsx (Excel) spreadsheet data and formatting into tidy structures. — tidyxl-package","text":"Tidyxl imports data spreadsheets without coercing rectangle, retains information encoded cell formatting (e.g. font/fill/border). data structure compatible 'unpivotr' package recognising information expressed relative cell positions cell formatting, re-expressing tidy way.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/tidyxl-package.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"tidyxl: Import xlsx (Excel) spreadsheet data and formatting into tidy structures. — tidyxl-package","text":"xlsx_cells() Import cells xlsx file. xlsx_formats() Import formatting xlsx file. xlsx_sheet_names() List names sheets xlsx file. xlsx_names() Import names definitions named ranges (aka 'named formulas', 'defined names') xlsx file. is_range() Test whether 'name' xlsx_names() refers range . xlsx_validation() Import cell input validation rules (e.g. 'must drop-list') xlsx file. xlsx_colour_standard() data frame standard colour names RGB values. xlsx_colour_theme() Imports data frame theme colour names RGB values xlsx file. xlex() Tokenise (lex) Excel formula.","code":""},{"path":[]},{"path":"https://nacnudus.github.io/tidyxl/reference/tidyxl-package.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"tidyxl: Import xlsx (Excel) spreadsheet data and formatting into tidy structures. — tidyxl-package","text":"Maintainer: Duncan Garmonsway nacnudus@gmail.com contributors: Hadley Wickham (Author included readxl fragments) [contributor] Jenny Bryan (Author included readxl fragments) [contributor] RStudio (Copyright holder included readxl fragments) [copyright holder] Marcin Kalicinski (Author included RapidXML code) [contributor, copyright holder]","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlex.html","id":null,"dir":"Reference","previous_headings":"","what":"Parse xlsx (Excel) formulas into tokens — xlex","title":"Parse xlsx (Excel) formulas into tokens — xlex","text":"xlex takes Excel formula separates tokens. name bad pun 'Excel' 'lexer'. returns dataframe, one row per token, giving token , type (e.g. number, error), level. level number show depth token within nested function calls. token A2 formula (A1=1,A2,MAX(A3,A4)) level 1. Tokens A3 A4 level 2. token level 0, outermost level. output enough enable computation validation formulas, enough investigate structure formulas spreadsheets. tested millions formulas Enron corpus.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlex.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Parse xlsx (Excel) formulas into tokens — xlex","text":"","code":"xlex(x)"},{"path":"https://nacnudus.github.io/tidyxl/reference/xlex.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Parse xlsx (Excel) formulas into tokens — xlex","text":"x Character vector length 1, giving formula.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlex.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Parse xlsx (Excel) formulas into tokens — xlex","text":"data frame (tibble, use tidyverse) one row per token, giving token , type (e.g. number, error), level. class attribute xlex added, base::print() generic can specialised print tree prettily.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlex.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Parse xlsx (Excel) formulas into tokens — xlex","text":"different types tokens : ref cell reference/address e.g. A1 $B2:C$14. sheetA sheet name, e.g. Sheet1! 'Sheet'!. sheet different file, file included token -- usually normalized form [0]. name named range, properly named formula. function Excel user-defined function, e.g. MAX _xll.MY_CUSTOM_FUNCTION. complete list official Excel functions available vector excel_functions. error error, e.g. #N/#REF!. bool TRUE FALSE -- note also functions TRUE() FALSE(). number forms numbers, e.g. 1, 1.1, -1, 1.2E3. text Strings inside double quotes, e.g. \"Hello, World!\". operator usual infix operators, +, -, *, /, ^, <, <=, <>, etc. also range operator : used ranges cell addresses, e.g. INDEX(something):A1. union operator , symbol used separate function arguments array columns, tagged operator inside parentheses function parentheses array curly braces (see examples). paren_open open parenthesis ( indicating increase level nesting, directly enclosing function arguments. paren_close open, reducing level nesting. open_array open curly brace '{' indicating start array constants, increase level nesting. close_array open_array, ending array constants fun_open open parenthesis ( immediately function name, directly enclosing function arguments. fun_close fun_open immediately function arguments. separator comma , separating function arguments array columns, semicolon ; separating array rows. DDE call Dynamic Data Exchange server, usually normalized form [1]!'DDE_parameter=1', full form 'ABCD'|'EFGH'!'IJKL'. space old files stripped formulas meaningless spaces. returned space tokens original formula can always reconstructed concatenating tokens. see , something gone wrong -- please report https://github.com/nacnudus/tidyxl/issues reproducible example (e.g. using reprex package). Every part original formula returned token, original formula can reconstructed concatenating tokens. work, please report https://github.com/nacnudus/tidyxl/issues reproducible example (e.g. using reprex package). XLParser project great help creating grammar. https://github.com/spreadsheetlab/XLParser.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlex.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Parse xlsx (Excel) formulas into tokens — xlex","text":"","code":"# All explicit cell references/addresses are returned as a single 'ref' token. xlex(\"A1\") #> root #> °-- A1 ref xlex(\"A$1\") #> root #> °-- A$1 ref xlex(\"$A1\") #> root #> °-- $A1 ref xlex(\"$A$1\") #> root #> °-- $A$1 ref xlex(\"A1:B2\") #> root #> °-- A1:B2 ref xlex(\"1:1\") # Whole row #> root #> °-- 1:1 ref xlex(\"A:B\") # Whole column #> root #> °-- A:B ref # If one part of an address is a name or a function, then the colon ':' is # regarded as a 'range operator', so is tagged 'operator'. xlex(\"A1:SOME.NAME\") #> root #> ¦-- A1 ref #> ¦-- : operator #> °-- SOME.NAME name xlex(\"SOME_FUNCTION():B2\") #> root #> ¦-- SOME_FUNCTION function #> ¦-- ( fun_open #> ¦-- ) fun_close #> ¦-- : operator #> °-- B2 ref xlex(\"SOME_FUNCTION():SOME.NAME\") #> root #> ¦-- SOME_FUNCTION function #> ¦-- ( fun_open #> ¦-- ) fun_close #> ¦-- : operator #> °-- SOME.NAME name # Sheet names are recognised by the terminal exclamation mark '!'. xlex(\"Sheet1!A1\") #> root #> ¦-- Sheet1! sheet #> °-- A1 ref xlex(\"'Sheet 1'!A1\") # Quoted names may contain some punctuation #> root #> ¦-- 'Sheet 1'! sheet #> °-- A1 ref xlex(\"'It''s a sheet'!A1\") # Quotes are escaped by doubling #> root #> ¦-- 'It''s a sheet'! sheet #> °-- A1 ref # Sheets can be ranged together in so-called 'three-dimensional formulas'. # Both sheets are returned in a single 'sheet' token. xlex(\"Sheet1:Sheet2!A1\") #> root #> ¦-- Sheet1:Sheet2! sheet #> °-- A1 ref xlex(\"'Sheet 1:Sheet 2'!A1\") # Quotes surround both (rather than each) sheet #> root #> ¦-- 'Sheet 1:Sheet 2'! sheet #> °-- A1 ref # Sheets from other files are prefixed by the filename, which Excel # normalizes the filenames into indexes. Either way, xlex() includes the # file/index in the 'sheet' token. xlex(\"[1]Sheet1!A1\") #> root #> ¦-- [1]Sheet1! sheet #> °-- A1 ref xlex(\"'[1]Sheet 1'!A1\") # Quotes surround both the file index and the sheet #> root #> ¦-- '[1]Sheet 1'! sheet #> °-- A1 ref xlex(\"'C:\\\\My Documents\\\\[file.xlsx]Sheet1'!A1\") #> root #> ¦-- 'C:\\My Documents\\[file.xlsx]Sheet1'! sheet #> °-- A1 ref # Function names are recognised by the terminal open-parenthesis '('. There # is no distinction between custom functions and built-in Excel functions. # The open-parenthesis is tagged 'fun_open', and the corresponding # close-parenthesis at the end of the arguments is tagged 'fun_close'. xlex(\"MAX(1,2)\") #> root #> ¦-- MAX function #> °-- ( fun_open #> ¦-- 1 number #> ¦-- , separator #> °-- 2 number #> °-- ) fun_close xlex(\"_xll.MY_CUSTOM_FUNCTION()\") #> root #> ¦-- _xll.MY_CUSTOM_FUNCTION function #> ¦-- ( fun_open #> °-- ) fun_close # Named ranges (properly called 'named formulas') are a last resort after # attempting to match a function (ending in an open parenthesis '(') or a # sheet (ending in an exclamation mark '!') xlex(\"MY_NAMED_RANGE\") #> root #> °-- MY_NAMED_RANGE name # Some cell addresses/references, functions and names can look alike, but # xlex() should always make the right choice. xlex(\"XFD1\") # A cell in the maximum column in Excel #> root #> °-- XFD1 ref xlex(\"XFE1\") # Beyond the maximum column, must be a named range/formula #> root #> °-- XFE1 name xlex(\"A1048576\") # A cell in the maximum row in Excel #> root #> °-- A1048576 ref xlex(\"A1048577\") # Beyond the maximum row, must be a named range/formula #> root #> °-- A1048577 name xlex(\"LOG10\") # A cell address #> root #> °-- LOG10 ref xlex(\"LOG10()\") # A log function #> root #> ¦-- LOG10 function #> ¦-- ( fun_open #> °-- ) fun_close xlex(\"LOG:LOG\") # The whole column 'LOG' #> root #> °-- LOG:LOG ref xlex(\"LOG\") # Not a cell address, must be a named range/formula #> root #> °-- LOG name xlex(\"LOG()\") # Another log function #> root #> ¦-- LOG function #> ¦-- ( fun_open #> °-- ) fun_close xlex(\"A1.2!A1\") # A sheet called 'A1.2' #> root #> ¦-- A1.2! sheet #> °-- A1 ref # Text is surrounded by double-quotes. xlex(\"\\\"Some text\\\"\") #> root #> °-- \"Some text\" text xlex(\"\\\"Some \\\"\\\"text\\\"\\\"\\\"\") # Double-quotes within text are escaped by #> root #> °-- \"Some \"\"text\"\"\" text # Numbers are signed where it makes sense, and can be scientific xlex(\"1\") #> root #> °-- 1 number xlex(\"1.2\") #> root #> °-- 1.2 number xlex(\"-1\") #> root #> °-- -1 number xlex(\"-1-1\") #> root #> ¦-- -1 number #> ¦-- - operator #> °-- 1 number xlex(\"-1+-1\") #> root #> ¦-- -1 number #> ¦-- + operator #> °-- -1 number xlex(\"MAX(-1-1)\") #> root #> ¦-- MAX function #> °-- ( fun_open #> ¦-- - operator #> ¦-- 1 number #> ¦-- - operator #> °-- 1 number #> °-- ) fun_close xlex(\"-1.2E-3\") #> root #> °-- -1.2E-3 number # Booleans can be constants or functions, and names can look like booleans, # but xlex() should always make the right choice. xlex(\"TRUE\") #> root #> °-- TRUE bool xlex(\"TRUEISH\") #> root #> °-- TRUEISH name xlex(\"TRUE!A1\") #> root #> ¦-- TRUE! sheet #> °-- A1 ref xlex(\"TRUE()\") #> root #> ¦-- TRUE function #> ¦-- ( fun_open #> °-- ) fun_close # Errors are tagged 'error' xlex(\"#DIV/0!\") #> root #> °-- #DIV/0! error xlex(\"#N/A\") #> root #> °-- #N/A error xlex(\"#NAME?\") #> root #> °-- #NAME? error xlex(\"#NULL!\") #> root #> °-- #NULL! error xlex(\"#NUM!\") #> root #> °-- #NUM! error xlex(\"#REF!\") #> root #> °-- #REF! error xlex(\"#VALUE!\") #> root #> °-- #VALUE! error # Operators with more than one character are treated as single tokens xlex(\"1<>2\") #> root #> ¦-- 1 number #> ¦-- <> operator #> °-- 2 number xlex(\"1<=2\") #> root #> ¦-- 1 number #> ¦-- <= operator #> °-- 2 number xlex(\"1<2\") #> root #> ¦-- 1 number #> ¦-- < operator #> °-- 2 number xlex(\"1=2\") #> root #> ¦-- 1 number #> ¦-- = operator #> °-- 2 number xlex(\"1&2\") #> root #> ¦-- 1 number #> ¦-- & operator #> °-- 2 number xlex(\"1 2\") #> root #> ¦-- 1 number #> ¦-- operator #> °-- 2 number xlex(\"(1,2)\") #> root #> °-- ( paren_open #> ¦-- 1 number #> ¦-- , operator #> °-- 2 number #> °-- ) paren_close xlex(\"1%\") # postfix operator #> root #> ¦-- 1 number #> °-- % operator # The union operator is a comma ',', which is the same symbol that is used # to separate function arguments or array columns. It is tagged 'operator' # only when it is inside parentheses that are not function parentheses or # array curly braces. The curly braces are tagged 'array_open' and # 'array_close'. tidyxl::xlex(\"A1,B2\") # invalid formula, defaults to 'union' to avoid a crash #> root #> ¦-- A1 ref #> ¦-- , operator #> °-- B2 ref tidyxl::xlex(\"(A1,B2)\") #> root #> °-- ( paren_open #> ¦-- A1 ref #> ¦-- , operator #> °-- B2 ref #> °-- ) paren_close tidyxl::xlex(\"MAX(A1,B2)\") #> root #> ¦-- MAX function #> °-- ( fun_open #> ¦-- A1 ref #> ¦-- , separator #> °-- B2 ref #> °-- ) fun_close tidyxl::xlex(\"SMALL((A1,B2),1)\") #> root #> ¦-- SMALL function #> °-- ( fun_open #> °-- ( paren_open #> ¦-- A1 ref #> ¦-- , operator #> °-- B2 ref #> ¦-- ) paren_close #> ¦-- , separator #> °-- 1 number #> °-- ) fun_close # Function arguments are separated by commas ',', which are tagged # 'separator'. xlex(\"MAX(1,2)\") #> root #> ¦-- MAX function #> °-- ( fun_open #> ¦-- 1 number #> ¦-- , separator #> °-- 2 number #> °-- ) fun_close # Nested functions are marked by an increase in the 'level'. The level # increases inside parentheses, rather than at the parentheses. Curly # braces, for arrays, have the same behaviour, as do subexpressions inside # ordinary parenthesis, tagged 'paren_open' and 'paren_close'. To see the # levels explicitly (rather than by the pretty printing), print as a normal # data frame or tibble by specifying `pretty = FALSE`. # class with as.data.frame. xlex(\"MAX(MIN(1,2),3)\") #> root #> ¦-- MAX function #> °-- ( fun_open #> ¦-- MIN function #> °-- ( fun_open #> ¦-- 1 number #> ¦-- , separator #> °-- 2 number #> ¦-- ) fun_close #> ¦-- , separator #> °-- 3 number #> °-- ) fun_close xlex(\"{1,2;3,4}\") #> root #> °-- { open_array #> ¦-- 1 number #> ¦-- , separator #> ¦-- 2 number #> ¦-- ; separator #> ¦-- 3 number #> ¦-- , separator #> °-- 4 number #> °-- } close_array xlex(\"1*(2+3)\") #> root #> ¦-- 1 number #> ¦-- * operator #> °-- ( paren_open #> ¦-- 2 number #> ¦-- + operator #> °-- 3 number #> °-- ) paren_close print(xlex(\"1*(2+3)\"), pretty = FALSE) #> # A tibble: 7 × 3 #> level type token #> #> 1 0 number 1 #> 2 0 operator * #> 3 0 paren_open ( #> 4 1 number 2 #> 5 1 operator + #> 6 1 number 3 #> 7 0 paren_close ) # Arrays are marked by opening and closing curly braces, with comma ',' # between columns, and semicolons ';' between rows Commas and semicolons are # both tagged 'separator'. Arrays contain only constants, which are # booleans, numbers, text, and errors. xlex(\"MAX({1,2;3,4})\") #> root #> ¦-- MAX function #> °-- ( fun_open #> °-- { open_array #> ¦-- 1 number #> ¦-- , separator #> ¦-- 2 number #> ¦-- ; separator #> ¦-- 3 number #> ¦-- , separator #> °-- 4 number #> °-- } close_array #> °-- ) fun_close xlex(\"=MAX({-1E-2,TRUE;#N/A,\\\"Hello, World!\\\"})\") #> root #> ¦-- = operator #> ¦-- MAX function #> °-- ( fun_open #> °-- { open_array #> ¦-- -1E-2 number #> ¦-- , separator #> ¦-- TRUE bool #> ¦-- ; separator #> ¦-- #N/A error #> ¦-- , separator #> °-- \"Hello, World!\" text #> °-- } close_array #> °-- ) fun_close # Structured references are surrounded by square brackets. Subexpressions # may also be surrounded by square brackets, but xlex() returns the whole # expression in a single 'structured_ref' token. xlex(\"[@col2]\") #> root #> °-- [@col2] structured_ref xlex(\"SUM([col22])\") #> root #> ¦-- SUM function #> °-- ( fun_open #> °-- [col22] structured_ref #> °-- ) fun_close xlex(\"Table1[col1]\") #> root #> °-- Table1[col1] structured_ref xlex(\"Table1[[col1]:[col2]]\") #> root #> °-- Table1[[col1]:[col2]] structured_ref xlex(\"Table1[#Headers]\") #> root #> °-- Table1[#Headers] structured_ref xlex(\"Table1[[#Headers],[col1]]\") #> root #> °-- Table1[[#Headers],[col1]] structured_ref xlex(\"Table1[[#Headers],[col1]:[col2]]\") #> root #> °-- Table1[[#Headers],[col1]:[col2]] structured_ref # DDE calls (Dynamic Data Exchange) are normalized by Excel into indexes. # Either way, xlex() includes everything in one token. xlex(\"[1]!'DDE_parameter=1'\") #> root #> °-- [1]!'DDE_parameter=1' DDE xlex(\"'Quote'|'NYSE'!ZAXX\") #> root #> °-- 'Quote'|'NYSE'!ZAXX DDE # Meaningless spaces that appear in some old files are returned as 'space' # tokens, so that the original formula can still be recovered by # concatenating all the tokens. Spaces between function names and their open # parenthesis have not been observed, so are not permitted. xlex(\" MAX( A1 ) \") #> root #> ¦-- operator #> ¦-- MAX function #> °-- ( fun_open #> ¦-- operator #> ¦-- A1 ref #> °-- operator #> ¦-- ) fun_close #> °-- operator # print.xlex() invisibly returns the original argument, so that it can be # used in magrittr pipelines. str(print(xlex(\"ROUND(A1*2\"))) #> root #> ¦-- ROUND function #> °-- ( fun_open #> ¦-- A1 ref #> ¦-- * operator #> °-- 2 number #> xlex [5 × 3] (S3: xlex/tbl_df/tbl/data.frame) #> $ level: int [1:5] 0 0 1 1 1 #> $ type : chr [1:5] \"function\" \"fun_open\" \"ref\" \"operator\" ... #> $ token: chr [1:5] \"ROUND\" \"(\" \"A1\" \"*\" ..."},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_cells.html","id":null,"dir":"Reference","previous_headings":"","what":"Import xlsx (Excel) cell contents into a tidy structure. — xlsx_cells","title":"Import xlsx (Excel) cell contents into a tidy structure. — xlsx_cells","text":"xlsx_cells() imports data spreadsheets without coercing rectangle. cell represented row data frame, giving cell's address, contents, formula, height, width, keys look cell's formatting return value xlsx_formats().","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_cells.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Import xlsx (Excel) cell contents into a tidy structure. — xlsx_cells","text":"","code":"xlsx_cells( path, sheets = NA, check_filetype = TRUE, include_blank_cells = TRUE )"},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_cells.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Import xlsx (Excel) cell contents into a tidy structure. — xlsx_cells","text":"path Path xlsx file. sheets Sheets read. Either character vector (names sheets), integer vector (positions sheets), NA (default, sheets). check_filetype Logical. Whether check filetype xlsx (xlsm) looking file , rather using filename extension. include_blank_cells Logical. Whether include cells value formula (might formatting comments). Useful whole column cells formatted, empty. Try setting FALSE spreadsheet seems large load.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_cells.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Import xlsx (Excel) cell contents into a tidy structure. — xlsx_cells","text":"data frame following columns. sheet worksheet cell . address cell address A1 notation. row row number cell address (integer). col column number cell address (integer). is_blank Whether cell value content Raw cell value type conversion, useful debugging. data_type type cell, referring following columns: error, logical, numeric, date, character, blank. error error value cell. logical boolean value cell. numeric numeric value cell. date date value cell. character string value cell. formula formula cell (see 'Details'). is_array Whether formula array formula. formula_ref address range cells group array formula shared formula applies (see 'Details'). formula_group formula group cell belongs (see 'Details'). comment text comment attached cell. height height cell's row, Excel's units. width width cell's column, Excel's units. row_outline_level outline level cells's row. col_outline_level outline level cells's column. style_format index table style formats x$formats$style (see 'Details'). local_format_id index table local cell formats x$formats$local (see 'Details'). Cell formatting returned xlsx_formats(). two types scopes formatting: 'style' formatting, Excel's built-styles 'normal', 'bad', etc., 'local' formatting, overrides particular elements style, e.g. making bold. types returned, $style $local sublists xlsx_formats(), identical structures. look local formatting given cell, take cell's 'local_format_id' value (my_cells$data$Sheet1[1, \"local_format_id\"]), use index format structure. E.g. look font size, my_formats$local$font$size[local_format_id]. see available formats, type str(my_formats$local).","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_cells.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Import xlsx (Excel) cell contents into a tidy structure. — xlsx_cells","text":"cell two 'values': content, sometimes also formula. also formatting applied 'style' level, can locally overridden.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_cells.html","id":"content","dir":"Reference","previous_headings":"","what":"Content","title":"Import xlsx (Excel) cell contents into a tidy structure. — xlsx_cells","text":"Depending cell, content may numeric value 365 365.25, may represent date/datetime one Excel's date/datetime systems, may index internal table strings. xlsx_cells() attempts infer correct data type cell, returning value appropriate column (error, logical, numeric, date, character). case cleverness unhelpful, unparsed value type information available 'content' 'data_type' columns.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_cells.html","id":"formula","dir":"Reference","previous_headings":"","what":"Formula","title":"Import xlsx (Excel) cell contents into a tidy structure. — xlsx_cells","text":"cell formula, value 'content' column result formula last time evaluated. Certain groups cells may share formula differs addresses referred formula; groups identified index, 'formula_group'. xlsx (Excel) file format records formula one cell group. xlsx_cells() propagates formulas cells group, making necessary changes relative addresses formula. Array formulas may also apply group cells, identified address 'formula_ref', xlsx (Excel) file format records formula one cell group. xlsx_cells() propagates formulas cells group. Unlike shared formulas, changes addresses array formulas necessary. Formulas refer workbooks currently name workbooks directly, instead via indices [1]. planned dereference .","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_cells.html","id":"formatting","dir":"Reference","previous_headings":"","what":"Formatting","title":"Import xlsx (Excel) cell contents into a tidy structure. — xlsx_cells","text":"Cell formatting returned xlsx_formats(). two types formatting: 'style' formatting, Excel's built-styles 'normal', 'bad', etc., 'local' formatting, overrides style. returned $style $local sublists xlsx_formats(), identical structures. look local formatting given cell, take cell's local_format_id value (my_cells$Sheet1[1, \"local_format_id\"]), use index format structure. E.g. look font size, my_formats$local$font$size[local_format_id]. see available formats, type str(my_formats$local). Strings can formatted within cell, single cell can contain substrings different formatting. -cell formatting available column character_formatted, list-column data frames. row data frame describes substring formatting. cells without character value, character_formatted NULL, processing might need filter NULLs first.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_cells.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Import xlsx (Excel) cell contents into a tidy structure. — xlsx_cells","text":"","code":"examples <- system.file(\"extdata/examples.xlsx\", package = \"tidyxl\") # All sheets str(xlsx_cells(examples)) #> tibble [586 × 24] (S3: tbl_df/tbl/data.frame) #> $ sheet : chr [1:586] \"Sheet1\" \"Sheet1\" \"Sheet1\" \"Sheet1\" ... #> $ address : chr [1:586] \"A1\" \"B1\" \"A2\" \"B2\" ... #> $ row : int [1:586] 1 1 2 2 3 3 4 4 5 5 ... #> $ col : int [1:586] 1 2 1 2 1 2 1 2 1 2 ... #> $ is_blank : logi [1:586] FALSE FALSE FALSE FALSE FALSE FALSE ... #> $ content : chr [1:586] \"#DIV/0!\" \"56\" \"1\" \"54\" ... #> $ data_type : chr [1:586] \"error\" \"character\" \"logical\" \"character\" ... #> $ error : chr [1:586] \"#DIV/0!\" NA NA NA ... #> $ logical : logi [1:586] NA NA TRUE NA FALSE NA ... #> $ numeric : num [1:586] NA NA NA NA NA ... #> $ date : POSIXct[1:586], format: NA NA ... #> $ character : chr [1:586] NA \"Error\" NA \"Boolean (true)\" ... #> $ character_formatted:List of 586 #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Error\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Boolean (true)\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Boolean (false)\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"integer\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"integer with higher-precision number formatting\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"default date format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Different built-in date format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"custom date format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"character\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"character\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"comment\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"comment with formatting\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Currency format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Percent format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Scientific format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"formula evaluating to logical\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"formula evaluating to a number\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"formula evaluating to date\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"formula evaluating to a string\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"some formulas that are stored in groups\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : NULL #> ..$ : NULL #> ..$ : NULL #> ..$ : NULL #> ..$ : NULL #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"single-cell array formula\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"multi-cell array formula\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"multi-cell array formula\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"formula that refers to another file\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"normal\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"normal' style but 'normal' has been modified from Excel's default to use Arial font\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"italic\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'normal' style but with local italics applied to this cell.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"normal\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'normal' style but with local bold applied to this cell.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"normal\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'normal' style but with local underline applied to this cell.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"normal\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'normal' style but with local double underline applied to this cell.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"bad\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'bad' style applied to this cell\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"badboldrightupindent\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'bad' style modified with bold font, right-and-up-aligned with an indent.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"custom style with custom date format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"auto-font\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Automatic font colour\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"standardred\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'indexed' or standard red text\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"themeblue\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Blue text from the theme\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"bluepattern\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Pattern but no background, blue from theme\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"stylealign\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Custom style 'stylealign' where the style is aligned to the centre.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [16 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr [1:16] \"in-cell\" \"bold\" \"italic\" \"underline\" ... #> .. ..$ bold : logi [1:16] FALSE TRUE FALSE FALSE FALSE FALSE ... #> .. ..$ italic : logi [1:16] FALSE FALSE TRUE FALSE FALSE FALSE ... #> .. ..$ underline : chr [1:16] NA NA NA \"single\" ... #> .. ..$ strike : logi [1:16] FALSE FALSE FALSE FALSE FALSE FALSE ... #> .. ..$ vertAlign : chr [1:16] NA NA NA NA ... #> .. ..$ size : num [1:16] 0 0 0 0 0 0 0 0 0 0 ... #> .. ..$ color_rgb : chr [1:16] NA \"FF000000\" \"FF000000\" \"FF000000\" ... #> .. ..$ color_theme : int [1:16] NA 2 2 2 2 2 2 2 2 2 ... #> .. ..$ color_indexed: int [1:16] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ color_tint : num [1:16] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ font : chr [1:16] \"Calibri\" \"Calibri\" \"Calibri\" \"Calibri\" ... #> .. ..$ family : int [1:16] 2 2 2 2 2 2 2 2 2 2 ... #> .. ..$ scheme : chr [1:16] \"minor\" \"minor\" \"minor\" \"minor\" ... #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"in-cellbolditalicunderlineunderlinedoublesingleaccountingdoubleaccountingstrikethroughsuperscriptsubscriptredth\"| __truncated__ #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"yellowfillunderline12arialstrikethroughsuperscript\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"More fancy inline-string formatting\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"bottomborderslant\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Slanted text\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"merged\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Cell merged into cell below\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"unprotected\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"A cell that is not 'protected'\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"unhidden\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"A cell that is not 'hidden'\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"locked\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"A cell that is 'locked'\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"themebackground1\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Text is formatted the colour 'Background1' from the theme, i.e. white.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [2 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr [1:2] \"in-cell-bold\" \"-not-bold\" #> .. ..$ bold : logi [1:2] TRUE FALSE #> .. ..$ italic : logi [1:2] FALSE FALSE #> .. ..$ underline : chr [1:2] NA NA #> .. ..$ strike : logi [1:2] FALSE FALSE #> .. ..$ vertAlign : chr [1:2] NA NA #> .. ..$ size : num [1:2] 0 0 #> .. ..$ color_rgb : chr [1:2] \"FF000000\" NA #> .. ..$ color_theme : int [1:2] 2 NA #> .. ..$ color_indexed: int [1:2] NA NA #> .. ..$ color_tint : num [1:2] NA NA #> .. ..$ font : chr [1:2] \"Calibri\" \"Arial\" #> .. ..$ family : int [1:2] 2 2 #> .. ..$ scheme : chr [1:2] \"minor\" NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Bold applied in inline string (not at cell level)\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [2 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr [1:2] \"in-cell-bold\" \"-not-bold\" #> .. ..$ bold : logi [1:2] NA FALSE #> .. ..$ italic : logi [1:2] NA FALSE #> .. ..$ underline : chr [1:2] NA NA #> .. ..$ strike : logi [1:2] NA FALSE #> .. ..$ vertAlign : chr [1:2] NA NA #> .. ..$ size : num [1:2] NA 0 #> .. ..$ color_rgb : chr [1:2] NA NA #> .. ..$ color_theme : int [1:2] NA NA #> .. ..$ color_indexed: int [1:2] NA NA #> .. ..$ color_tint : num [1:2] NA NA #> .. ..$ font : chr [1:2] NA \"Arial\" #> .. ..$ family : int [1:2] NA 2 #> .. ..$ scheme : chr [1:2] NA NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Bold applied at cell level\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"diagonal-up\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Diagonal-up border\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> .. [list output truncated] #> $ formula : chr [1:586] \"1/0\" NA NA NA ... #> $ is_array : logi [1:586] FALSE FALSE FALSE FALSE FALSE FALSE ... #> $ formula_ref : chr [1:586] NA NA NA NA ... #> $ formula_group : int [1:586] NA NA NA NA NA NA NA NA NA NA ... #> $ comment : chr [1:586] NA NA NA NA ... #> $ height : num [1:586] 14.2 14.2 14.2 14.2 14.2 ... #> $ width : num [1:586] 19.4 68 19.4 68 19.4 ... #> $ row_outline_level : num [1:586] 1 1 1 1 1 1 1 1 1 1 ... #> $ col_outline_level : num [1:586] 1 1 1 1 1 1 1 1 1 1 ... #> $ style_format : chr [1:586] \"Normal\" \"Normal\" \"Normal\" \"Normal\" ... #> $ local_format_id : int [1:586] 1 1 1 1 1 1 1 1 5 1 ... # Specific sheet either by position or by name str(xlsx_cells(examples, 2)) #> tibble [2 × 24] (S3: tbl_df/tbl/data.frame) #> $ sheet : chr [1:2] \"1~`!@#$%^&()_-+={}|;\\\"'<,>.\" \"1~`!@#$%^&()_-+={}|;\\\"'<,>.\" #> $ address : chr [1:2] \"B2\" \"B6\" #> $ row : int [1:2] 2 6 #> $ col : int [1:2] 2 2 #> $ is_blank : logi [1:2] FALSE FALSE #> $ content : chr [1:2] \"29\" \"30\" #> $ data_type : chr [1:2] \"character\" \"character\" #> $ error : chr [1:2] NA NA #> $ logical : logi [1:2] NA NA #> $ numeric : num [1:2] NA NA #> $ date : POSIXct[1:2], format: NA NA #> $ character : chr [1:2] \"empty first row and col\" \"This worksheet has a nasty name but can be imported nevertheless\" #> $ character_formatted:List of 2 #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"empty first row and col\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"This worksheet has a nasty name but can be imported nevertheless\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> $ formula : chr [1:2] NA NA #> $ is_array : logi [1:2] FALSE FALSE #> $ formula_ref : chr [1:2] NA NA #> $ formula_group : int [1:2] NA NA #> $ comment : chr [1:2] \"nacnudus:\\nComment3\" NA #> $ height : num [1:2] 14.2 14.2 #> $ width : num [1:2] 8.38 8.38 #> $ row_outline_level : num [1:2] 1 1 #> $ col_outline_level : num [1:2] 1 1 #> $ style_format : chr [1:2] \"Normal\" \"Normal\" #> $ local_format_id : int [1:2] 1 1 str(xlsx_cells(examples, \"Sheet1\")) #> tibble [395 × 24] (S3: tbl_df/tbl/data.frame) #> $ sheet : chr [1:395] \"Sheet1\" \"Sheet1\" \"Sheet1\" \"Sheet1\" ... #> $ address : chr [1:395] \"A1\" \"B1\" \"A2\" \"B2\" ... #> $ row : int [1:395] 1 1 2 2 3 3 4 4 5 5 ... #> $ col : int [1:395] 1 2 1 2 1 2 1 2 1 2 ... #> $ is_blank : logi [1:395] FALSE FALSE FALSE FALSE FALSE FALSE ... #> $ content : chr [1:395] \"#DIV/0!\" \"56\" \"1\" \"54\" ... #> $ data_type : chr [1:395] \"error\" \"character\" \"logical\" \"character\" ... #> $ error : chr [1:395] \"#DIV/0!\" NA NA NA ... #> $ logical : logi [1:395] NA NA TRUE NA FALSE NA ... #> $ numeric : num [1:395] NA NA NA NA NA ... #> $ date : POSIXct[1:395], format: NA NA ... #> $ character : chr [1:395] NA \"Error\" NA \"Boolean (true)\" ... #> $ character_formatted:List of 395 #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Error\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Boolean (true)\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Boolean (false)\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"integer\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"integer with higher-precision number formatting\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"default date format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Different built-in date format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"custom date format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"character\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"character\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"comment\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"comment with formatting\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Currency format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Percent format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Scientific format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"formula evaluating to logical\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"formula evaluating to a number\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"formula evaluating to date\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"formula evaluating to a string\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"some formulas that are stored in groups\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : NULL #> ..$ : NULL #> ..$ : NULL #> ..$ : NULL #> ..$ : NULL #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"single-cell array formula\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"multi-cell array formula\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"multi-cell array formula\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"formula that refers to another file\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"normal\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"normal' style but 'normal' has been modified from Excel's default to use Arial font\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"italic\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'normal' style but with local italics applied to this cell.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"normal\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'normal' style but with local bold applied to this cell.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"normal\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'normal' style but with local underline applied to this cell.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"normal\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'normal' style but with local double underline applied to this cell.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"bad\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'bad' style applied to this cell\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"badboldrightupindent\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'bad' style modified with bold font, right-and-up-aligned with an indent.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"custom style with custom date format\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"auto-font\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Automatic font colour\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"standardred\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"'indexed' or standard red text\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"themeblue\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Blue text from the theme\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"bluepattern\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Pattern but no background, blue from theme\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"stylealign\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Custom style 'stylealign' where the style is aligned to the centre.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [16 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr [1:16] \"in-cell\" \"bold\" \"italic\" \"underline\" ... #> .. ..$ bold : logi [1:16] FALSE TRUE FALSE FALSE FALSE FALSE ... #> .. ..$ italic : logi [1:16] FALSE FALSE TRUE FALSE FALSE FALSE ... #> .. ..$ underline : chr [1:16] NA NA NA \"single\" ... #> .. ..$ strike : logi [1:16] FALSE FALSE FALSE FALSE FALSE FALSE ... #> .. ..$ vertAlign : chr [1:16] NA NA NA NA ... #> .. ..$ size : num [1:16] 0 0 0 0 0 0 0 0 0 0 ... #> .. ..$ color_rgb : chr [1:16] NA \"FF000000\" \"FF000000\" \"FF000000\" ... #> .. ..$ color_theme : int [1:16] NA 2 2 2 2 2 2 2 2 2 ... #> .. ..$ color_indexed: int [1:16] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ color_tint : num [1:16] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ font : chr [1:16] \"Calibri\" \"Calibri\" \"Calibri\" \"Calibri\" ... #> .. ..$ family : int [1:16] 2 2 2 2 2 2 2 2 2 2 ... #> .. ..$ scheme : chr [1:16] \"minor\" \"minor\" \"minor\" \"minor\" ... #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"in-cellbolditalicunderlineunderlinedoublesingleaccountingdoubleaccountingstrikethroughsuperscriptsubscriptredth\"| __truncated__ #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"yellowfillunderline12arialstrikethroughsuperscript\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"More fancy inline-string formatting\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"bottomborderslant\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Slanted text\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"merged\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Cell merged into cell below\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : NULL #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"unprotected\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"A cell that is not 'protected'\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"unhidden\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"A cell that is not 'hidden'\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"locked\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"A cell that is 'locked'\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"themebackground1\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Text is formatted the colour 'Background1' from the theme, i.e. white.\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [2 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr [1:2] \"in-cell-bold\" \"-not-bold\" #> .. ..$ bold : logi [1:2] TRUE FALSE #> .. ..$ italic : logi [1:2] FALSE FALSE #> .. ..$ underline : chr [1:2] NA NA #> .. ..$ strike : logi [1:2] FALSE FALSE #> .. ..$ vertAlign : chr [1:2] NA NA #> .. ..$ size : num [1:2] 0 0 #> .. ..$ color_rgb : chr [1:2] \"FF000000\" NA #> .. ..$ color_theme : int [1:2] 2 NA #> .. ..$ color_indexed: int [1:2] NA NA #> .. ..$ color_tint : num [1:2] NA NA #> .. ..$ font : chr [1:2] \"Calibri\" \"Arial\" #> .. ..$ family : int [1:2] 2 2 #> .. ..$ scheme : chr [1:2] \"minor\" NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Bold applied in inline string (not at cell level)\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [2 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr [1:2] \"in-cell-bold\" \"-not-bold\" #> .. ..$ bold : logi [1:2] NA FALSE #> .. ..$ italic : logi [1:2] NA FALSE #> .. ..$ underline : chr [1:2] NA NA #> .. ..$ strike : logi [1:2] NA FALSE #> .. ..$ vertAlign : chr [1:2] NA NA #> .. ..$ size : num [1:2] NA 0 #> .. ..$ color_rgb : chr [1:2] NA NA #> .. ..$ color_theme : int [1:2] NA NA #> .. ..$ color_indexed: int [1:2] NA NA #> .. ..$ color_tint : num [1:2] NA NA #> .. ..$ font : chr [1:2] NA \"Arial\" #> .. ..$ family : int [1:2] NA 2 #> .. ..$ scheme : chr [1:2] NA NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Bold applied at cell level\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"diagonal-up\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> ..$ : tibble [1 × 14] (S3: tbl_df/tbl/data.frame) #> .. ..$ character : chr \"Diagonal-up border\" #> .. ..$ bold : logi NA #> .. ..$ italic : logi NA #> .. ..$ underline : chr NA #> .. ..$ strike : logi NA #> .. ..$ vertAlign : chr NA #> .. ..$ size : num NA #> .. ..$ color_rgb : chr NA #> .. ..$ color_theme : int NA #> .. ..$ color_indexed: int NA #> .. ..$ color_tint : num NA #> .. ..$ font : chr NA #> .. ..$ family : int NA #> .. ..$ scheme : chr NA #> .. [list output truncated] #> $ formula : chr [1:395] \"1/0\" NA NA NA ... #> $ is_array : logi [1:395] FALSE FALSE FALSE FALSE FALSE FALSE ... #> $ formula_ref : chr [1:395] NA NA NA NA ... #> $ formula_group : int [1:395] NA NA NA NA NA NA NA NA NA NA ... #> $ comment : chr [1:395] NA NA NA NA ... #> $ height : num [1:395] 14.2 14.2 14.2 14.2 14.2 ... #> $ width : num [1:395] 19.4 68 19.4 68 19.4 ... #> $ row_outline_level : num [1:395] 1 1 1 1 1 1 1 1 1 1 ... #> $ col_outline_level : num [1:395] 1 1 1 1 1 1 1 1 1 1 ... #> $ style_format : chr [1:395] \"Normal\" \"Normal\" \"Normal\" \"Normal\" ... #> $ local_format_id : int [1:395] 1 1 1 1 1 1 1 1 5 1 ... # The formats of particular cells can be retrieved like this: Sheet1 <- xlsx_cells(examples, \"Sheet1\") formats <- xlsx_formats(examples) formats$local$font$bold[Sheet1$local_format_id] #> [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [49] FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE #> [61] FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [73] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [85] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE #> [97] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [109] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [121] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [133] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [145] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [157] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [169] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [181] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [193] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [205] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [217] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [229] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [241] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [253] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [265] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [277] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [289] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [301] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [313] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [325] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [337] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [349] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [361] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [373] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [385] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE formats$style$font$bold[Sheet1$style_format] #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Percent Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Bad Normal Bad Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> styledate Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal styledate Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal 2 Normal Normal 2 #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal 2 Normal 2 Normal 2 Normal 2 Normal 2 Normal 2 Normal 2 Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal 2 Normal Normal 2 Normal Normal 2 Normal Normal 2 Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal 2 Normal Normal 2 Normal Normal 2 Normal Normal 2 Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal 2 Hyperlink Normal 2 Hyperlink Normal 2 Normal Normal 2 Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal 2 Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal #> FALSE FALSE FALSE # To filter for cells of a particular format, first filter the formats to get # the relevant indices, and then filter the cells by those indices. bold_indices <- which(formats$local$font$bold) Sheet1[Sheet1$local_format_id %in% bold_indices, ] #> # A tibble: 3 × 24 #> sheet address row col is_blank content data_type error logical numeric #> #> 1 Sheet1 A28 28 1 FALSE 0 character NA NA NA #> 2 Sheet1 A32 32 1 FALSE 6 character NA NA NA #> 3 Sheet1 A49 49 1 FALSE 12 character NA NA NA #> # ℹ 14 more variables: date , character , #> # character_formatted , formula , is_array , #> # formula_ref , formula_group , comment , height , #> # width , row_outline_level , col_outline_level , #> # style_format , local_format_id # In-cell formatting is available in the `character_formatted` column as a # data frame, one row per substring. xlsx_cells(examples)$character_formatted[77] #> [[1]] #> # A tibble: 16 × 14 #> character bold italic underline strike vertAlign size color_rgb color_theme #> #> 1 \"in-cell\" FALSE FALSE NA FALSE NA 0 NA NA #> 2 \"bold\" TRUE FALSE NA FALSE NA 0 FF000000 2 #> 3 \"italic\" FALSE TRUE NA FALSE NA 0 FF000000 2 #> 4 \"underli… FALSE FALSE single FALSE NA 0 FF000000 2 #> 5 \"underli… FALSE FALSE double FALSE NA 0 FF000000 2 #> 6 \"singlea… FALSE FALSE singleAc… FALSE NA 0 FF000000 2 #> 7 \"doublea… FALSE FALSE doubleAc… FALSE NA 0 FF000000 2 #> 8 \"striket… FALSE FALSE NA TRUE NA 0 FF000000 2 #> 9 \"subscri… FALSE FALSE NA FALSE subscript 0 FF000000 2 #> 10 \"supersc… FALSE FALSE NA FALSE superscr… 0 FF000000 2 #> 11 \"red\" FALSE FALSE NA FALSE NA 0 FFFF0000 NA #> 12 \"theme\" FALSE FALSE NA FALSE NA 0 FFC0504D 6 #> 13 \"tint\" FALSE FALSE NA FALSE NA 0 FFC0504D 6 #> 14 \"size\" FALSE FALSE NA FALSE NA 0 FFFF0000 NA #> 15 \"arial\" FALSE FALSE NA FALSE NA 0 FFFF0000 NA #> 16 \"UTF8Sté… FALSE FALSE NA FALSE NA 0 FFFF0000 NA #> # ℹ 5 more variables: color_indexed , color_tint , font , #> # family , scheme #>"},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_color_standard.html","id":null,"dir":"Reference","previous_headings":"","what":"Names and RGB values of Excel standard colours — xlsx_color_standard","title":"Names and RGB values of Excel standard colours — xlsx_color_standard","text":"dataset containing names RGB colour values Excel's standard palette.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_color_standard.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Names and RGB values of Excel standard colours — xlsx_color_standard","text":"","code":"xlsx_color_standard xlsx_colour_standard"},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_color_standard.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Names and RGB values of Excel standard colours — xlsx_color_standard","text":"data frame 10 rows 2 variables: name Name colour rgb RGB value colour object class tbl_df (inherits tbl, data.frame) 10 rows 2 columns.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_color_theme.html","id":null,"dir":"Reference","previous_headings":"","what":"Import theme color definitions from xlsx (Excel) files — xlsx_color_theme","title":"Import theme color definitions from xlsx (Excel) files — xlsx_color_theme","text":"xlsx_color_theme() (alias xlsx_colour_theme() returns names RGB values theme colours defined xlsx (Excel) files. example, \"accent6\" name theme colour Excel, resolve RGB colour defined author file. Themes often defined comply corporate standards.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_color_theme.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Import theme color definitions from xlsx (Excel) files — xlsx_color_theme","text":"","code":"xlsx_color_theme(path, check_filetype = TRUE) xlsx_colour_theme(path, check_filetype = TRUE)"},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_color_theme.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Import theme color definitions from xlsx (Excel) files — xlsx_color_theme","text":"path Path xlsx file. check_filetype Logical. Whether check filetype xlsx (xlsm) looking file , rather using filename extension.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_color_theme.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Import theme color definitions from xlsx (Excel) files — xlsx_color_theme","text":"data frame, one row per colour, following columns. name name theme. rgb RGB colour set theme file.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_color_theme.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Import theme color definitions from xlsx (Excel) files — xlsx_color_theme","text":"","code":"examples <- system.file(\"extdata/examples.xlsx\", package = \"tidyxl\") xlsx_color_theme(examples) #> # A tibble: 12 × 2 #> name rgb #> #> 1 background1 FFFFFFFF #> 2 text1 FF000000 #> 3 background2 FFEEECE1 #> 4 text2 FF1F497D #> 5 accent1 FF4F81BD #> 6 accent2 FFC0504D #> 7 accent3 FF9BBB59 #> 8 accent4 FF8064A2 #> 9 accent5 FF4BACC6 #> 10 accent6 FFF79646 #> 11 hyperlink FF0000FF #> 12 followed-hyperlink FF800080 xlsx_colour_theme(examples) #> # A tibble: 12 × 2 #> name rgb #> #> 1 background1 FFFFFFFF #> 2 text1 FF000000 #> 3 background2 FFEEECE1 #> 4 text2 FF1F497D #> 5 accent1 FF4F81BD #> 6 accent2 FFC0504D #> 7 accent3 FF9BBB59 #> 8 accent4 FF8064A2 #> 9 accent5 FF4BACC6 #> 10 accent6 FFF79646 #> 11 hyperlink FF0000FF #> 12 followed-hyperlink FF800080"},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_formats.html","id":null,"dir":"Reference","previous_headings":"","what":"Import xlsx (Excel) formatting definitions. — xlsx_formats","title":"Import xlsx (Excel) formatting definitions. — xlsx_formats","text":"xlsx_formats() imports formatting definitions spreadsheets. structure nested list, e.g. bold vector within list font, within list local, within list returned xlsx_formats(). can look cell's formatting indexing bottom-level vectors. See 'Details' examples.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_formats.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Import xlsx (Excel) formatting definitions. — xlsx_formats","text":"","code":"xlsx_formats(path, check_filetype = TRUE)"},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_formats.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Import xlsx (Excel) formatting definitions. — xlsx_formats","text":"path Path xlsx file. check_filetype Logical. Whether check filetype xlsx (xlsm) looking file , rather using filename extension.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_formats.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Import xlsx (Excel) formatting definitions. — xlsx_formats","text":"nested list vectors, beginning top level $style $local, drilling vectors hold definitions. E.g. my_formats$local$font$size.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_formats.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Import xlsx (Excel) formatting definitions. — xlsx_formats","text":"two types formatting: 'style' formatting, Excel's built-styles 'normal', 'bad', etc., 'local' formatting, overrides style. returned $style $local sublists xlsx_formats(), identical structures. look local formatting given cell, take cell's local_format_id value (my_cells$Sheet1[1, \"local_format_id\"]), use index format structure. E.g. look font size, my_formats$local$font$size[local_format_id]. see available formats, type str(my_formats$local). Colours may recorded three ways: hexadecimal RGB string without alpha, 'indexed' colour, index 'theme'. xlsx_formats() dereferences 'indexed' 'theme' colours hexadecimal RGB string representation, standardises RGB strings alpha channel first two characters. 'index' 'theme' name still provided. filter RGB string, look RGB values spreadsheet program (e.g. Excel, LibreOffice, Gnumeric), use grDevices::rgb() function convert hexadecimal string.","code":"A <- 1; R <- 0.5; G <- 0; B <- 0 rgb(A, R, G, B) # [1] \"#FF800000\""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_formats.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Import xlsx (Excel) formatting definitions. — xlsx_formats","text":"","code":"examples <- system.file(\"extdata/examples.xlsx\", package = \"tidyxl\") str(xlsx_formats(examples)) #> List of 2 #> $ local:List of 6 #> ..$ numFmt : chr [1:173] \"General\" \"d-mmm-yy\" \"[$-1409]d mmmm yyyy;@\" \"yyyy mmmm dddd\" ... #> ..$ font :List of 10 #> .. ..$ bold : logi [1:173] FALSE FALSE FALSE FALSE FALSE FALSE ... #> .. ..$ italic : logi [1:173] FALSE FALSE FALSE FALSE FALSE FALSE ... #> .. ..$ underline: chr [1:173] NA NA NA NA ... #> .. ..$ strike : logi [1:173] FALSE FALSE FALSE FALSE FALSE FALSE ... #> .. ..$ vertAlign: chr [1:173] NA NA NA NA ... #> .. ..$ size : num [1:173] 11 11 11 11 11 11 11 11 11 11 ... #> .. ..$ color :List of 4 #> .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ name : chr [1:173] \"Arial\" \"Arial\" \"Arial\" \"Arial\" ... #> .. ..$ family : int [1:173] 2 2 2 2 2 2 2 2 2 2 ... #> .. ..$ scheme : chr [1:173] NA NA NA NA ... #> ..$ fill :List of 2 #> .. ..$ patternFill :List of 3 #> .. .. ..$ fgColor :List of 4 #> .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. ..$ bgColor :List of 4 #> .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. ..$ patternType: chr [1:173] NA NA NA NA ... #> .. ..$ gradientFill:List of 8 #> .. .. ..$ type : chr [1:173] NA NA NA NA ... #> .. .. ..$ degree: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. ..$ left : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. ..$ right : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. ..$ top : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. ..$ bottom: num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. ..$ stop1 :List of 2 #> .. .. .. ..$ position: num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ color :List of 4 #> .. .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. ..$ stop2 :List of 2 #> .. .. .. ..$ position: num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ color :List of 4 #> .. .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> ..$ border :List of 12 #> .. ..$ diagonalDown: logi [1:173] FALSE FALSE FALSE FALSE FALSE FALSE ... #> .. ..$ diagonalUp : logi [1:173] FALSE FALSE FALSE FALSE FALSE FALSE ... #> .. ..$ outline : logi [1:173] FALSE FALSE FALSE FALSE FALSE FALSE ... #> .. ..$ left :List of 2 #> .. .. ..$ style: chr [1:173] NA NA NA NA ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ right :List of 2 #> .. .. ..$ style: chr [1:173] NA NA NA NA ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ start :List of 2 #> .. .. ..$ style: chr [1:173] NA NA NA NA ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ end :List of 2 #> .. .. ..$ style: chr [1:173] NA NA NA NA ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ top :List of 2 #> .. .. ..$ style: chr [1:173] NA NA NA NA ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ bottom :List of 2 #> .. .. ..$ style: chr [1:173] NA NA NA NA ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ diagonal :List of 2 #> .. .. ..$ style: chr [1:173] NA NA NA NA ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ vertical :List of 2 #> .. .. ..$ style: chr [1:173] NA NA NA NA ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. ..$ horizontal :List of 2 #> .. .. ..$ style: chr [1:173] NA NA NA NA ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ theme : chr [1:173] NA NA NA NA ... #> .. .. .. ..$ indexed: int [1:173] NA NA NA NA NA NA NA NA NA NA ... #> .. .. .. ..$ tint : num [1:173] NA NA NA NA NA NA NA NA NA NA ... #> ..$ alignment :List of 8 #> .. ..$ horizontal : chr [1:173] \"general\" \"general\" \"general\" \"general\" ... #> .. ..$ vertical : chr [1:173] \"bottom\" \"bottom\" \"bottom\" \"bottom\" ... #> .. ..$ wrapText : logi [1:173] FALSE FALSE FALSE FALSE FALSE FALSE ... #> .. ..$ readingOrder : chr [1:173] \"context\" \"context\" \"context\" \"context\" ... #> .. ..$ indent : int [1:173] 0 0 0 0 0 0 0 0 0 1 ... #> .. ..$ justifyLastLine: logi [1:173] FALSE FALSE FALSE FALSE FALSE FALSE ... #> .. ..$ shrinkToFit : logi [1:173] FALSE FALSE FALSE FALSE FALSE FALSE ... #> .. ..$ textRotation : int [1:173] 0 0 0 0 0 0 0 0 0 0 ... #> ..$ protection:List of 2 #> .. ..$ locked: logi [1:173] TRUE TRUE TRUE TRUE TRUE TRUE ... #> .. ..$ hidden: logi [1:173] FALSE FALSE FALSE FALSE FALSE FALSE ... #> $ style:List of 6 #> ..$ numFmt : Named chr [1:6] \"General\" \"General\" \"yyyy-mm-dd hh:mm:ss\" \"0%\" ... #> .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> ..$ font :List of 10 #> .. ..$ bold : Named logi [1:6] FALSE FALSE FALSE FALSE FALSE FALSE #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ italic : Named logi [1:6] FALSE FALSE FALSE FALSE FALSE FALSE #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ underline: Named chr [1:6] NA NA NA NA ... #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ strike : Named logi [1:6] FALSE FALSE FALSE FALSE FALSE FALSE #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ vertAlign: Named chr [1:6] NA NA NA NA ... #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ size : Named num [1:6] 11 11 11 11 11 11 #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ color :List of 4 #> .. .. ..$ rgb : Named chr [1:6] NA \"FF9C0006\" \"FF000000\" NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ theme : Named chr [1:6] NA NA \"text1\" NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ name : Named chr [1:6] \"Arial\" \"Calibri\" \"Calibri\" \"Arial\" ... #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ family : Named int [1:6] 2 2 2 2 2 2 #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ scheme : Named chr [1:6] NA \"minor\" \"minor\" NA ... #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> ..$ fill :List of 2 #> .. ..$ patternFill :List of 3 #> .. .. ..$ fgColor :List of 4 #> .. .. .. ..$ rgb : Named chr [1:6] NA \"FFFFC7CE\" NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ bgColor :List of 4 #> .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ patternType: Named chr [1:6] NA \"solid\" NA NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ gradientFill:List of 8 #> .. .. ..$ type : Named chr [1:6] NA NA NA NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ degree: Named int [1:6] NA NA NA NA NA NA #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ left : Named num [1:6] NA NA NA NA NA NA #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ right : Named num [1:6] NA NA NA NA NA NA #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ top : Named num [1:6] NA NA NA NA NA NA #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ bottom: Named num [1:6] NA NA NA NA NA NA #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ stop1 :List of 2 #> .. .. .. ..$ position: Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ color :List of 4 #> .. .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ stop2 :List of 2 #> .. .. .. ..$ position: Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ color :List of 4 #> .. .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> ..$ border :List of 12 #> .. ..$ diagonalDown: Named logi [1:6] FALSE FALSE FALSE FALSE FALSE FALSE #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ diagonalUp : Named logi [1:6] FALSE FALSE FALSE FALSE FALSE FALSE #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ outline : Named logi [1:6] FALSE FALSE FALSE FALSE FALSE FALSE #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ left :List of 2 #> .. .. ..$ style: Named chr [1:6] NA NA NA NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ right :List of 2 #> .. .. ..$ style: Named chr [1:6] NA NA NA NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ start :List of 2 #> .. .. ..$ style: Named chr [1:6] NA NA NA NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ end :List of 2 #> .. .. ..$ style: Named chr [1:6] NA NA NA NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ top :List of 2 #> .. .. ..$ style: Named chr [1:6] NA NA NA NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ bottom :List of 2 #> .. .. ..$ style: Named chr [1:6] NA NA NA NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ diagonal :List of 2 #> .. .. ..$ style: Named chr [1:6] NA NA NA NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ vertical :List of 2 #> .. .. ..$ style: Named chr [1:6] NA NA NA NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ horizontal :List of 2 #> .. .. ..$ style: Named chr [1:6] NA NA NA NA ... #> .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. ..$ color:List of 4 #> .. .. .. ..$ rgb : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ theme : Named chr [1:6] NA NA NA NA ... #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ indexed: Named int [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. .. .. ..$ tint : Named num [1:6] NA NA NA NA NA NA #> .. .. .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> ..$ alignment :List of 8 #> .. ..$ horizontal : Named chr [1:6] \"general\" \"general\" \"center\" \"general\" ... #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ vertical : Named chr [1:6] \"bottom\" \"bottom\" \"bottom\" \"bottom\" ... #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ wrapText : Named logi [1:6] FALSE FALSE TRUE FALSE FALSE FALSE #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ readingOrder : Named chr [1:6] \"context\" \"context\" \"left-to-right\" \"context\" ... #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ indent : Named int [1:6] 0 0 0 0 0 0 #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ justifyLastLine: Named logi [1:6] FALSE FALSE FALSE FALSE FALSE FALSE #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ shrinkToFit : Named logi [1:6] FALSE FALSE FALSE FALSE FALSE FALSE #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ textRotation : Named int [1:6] 0 0 0 0 0 0 #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> ..$ protection:List of 2 #> .. ..$ locked: Named logi [1:6] TRUE TRUE FALSE TRUE TRUE TRUE #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... #> .. ..$ hidden: Named logi [1:6] FALSE FALSE FALSE FALSE FALSE FALSE #> .. .. ..- attr(*, \"names\")= chr [1:6] \"Normal\" \"Bad\" \"styledate\" \"Percent\" ... # The formats of particular cells can be retrieved like this: cells <- xlsx_cells(examples) formats <- xlsx_formats(examples) formats$local$font$bold[cells$local_format_id] #> [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [49] FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE #> [61] FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [73] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [85] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE #> [97] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [109] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [121] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [133] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [145] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [157] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [169] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [181] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [193] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [205] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [217] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [229] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [241] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [253] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [265] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [277] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [289] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [301] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [313] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [325] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [337] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [349] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [361] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [373] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [385] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [397] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [409] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [421] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [433] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [445] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [457] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [469] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [481] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [493] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [505] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [517] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [529] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [541] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [553] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [565] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> [577] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE formats$style$font$bold[cells$style_format] #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Percent Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Bad Normal Bad Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> styledate Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal styledate Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal 2 Normal Normal 2 #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal 2 Normal 2 Normal 2 Normal 2 Normal 2 Normal 2 Normal 2 Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal 2 Normal Normal 2 Normal Normal 2 Normal Normal 2 Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal 2 Normal Normal 2 Normal Normal 2 Normal Normal 2 Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal 2 Hyperlink Normal 2 Hyperlink Normal 2 Normal Normal 2 Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal 2 Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal Normal Normal Normal Normal Normal Normal #> FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE #> Normal Normal #> FALSE FALSE # To filter for cells of a particular format, first filter the formats to get # the relevant indices, and then filter the cells by those indices. bold_indices <- which(formats$local$font$bold) cells[cells$local_format_id %in% bold_indices, ] #> # A tibble: 3 × 24 #> sheet address row col is_blank content data_type error logical numeric #> #> 1 Sheet1 A28 28 1 FALSE 0 character NA NA NA #> 2 Sheet1 A32 32 1 FALSE 6 character NA NA NA #> 3 Sheet1 A49 49 1 FALSE 12 character NA NA NA #> # ℹ 14 more variables: date , character , #> # character_formatted , formula , is_array , #> # formula_ref , formula_group , comment , height , #> # width , row_outline_level , col_outline_level , #> # style_format , local_format_id "},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_names.html","id":null,"dir":"Reference","previous_headings":"","what":"Import named formulas from xlsx (Excel) files — xlsx_names","title":"Import named formulas from xlsx (Excel) files — xlsx_names","text":"xlsx_names() returns names definitions named formulas (aka named ranges) xlsx (Excel) files. names refer ranges cells, can also defined formulas. xlsx_names() tells whether range, using is_range() work . Names scoped either globally (used file), locally sheet (can reused different definitions different sheets). sheet-scoped names, xlsx_names() provides name sheet.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_names.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Import named formulas from xlsx (Excel) files — xlsx_names","text":"","code":"xlsx_names(path, check_filetype = TRUE)"},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_names.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Import named formulas from xlsx (Excel) files — xlsx_names","text":"path Path xlsx file. check_filetype Logical. Whether check filetype xlsx (xlsm) looking file , rather using filename extension.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_names.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Import named formulas from xlsx (Excel) files — xlsx_names","text":"data frame, one row per name, following columns. sheet name defined specific sheet, name sheet. Otherwise NA names defined globally. name formula Usually range cells, sometimes whole formula, e.g. MAX(A2,1). comment description given spreadsheet author. hidden Whether name visible user spreadsheet applications. Hidden names usually ones created automatically spreadsheet application. is_range Whether formula range cells. handy joining set cells referred name. context, commas cell addresses always regarded union operators -- differs xlex(), see help file details.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_names.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Import named formulas from xlsx (Excel) files — xlsx_names","text":"","code":"examples <- system.file(\"extdata/examples.xlsx\", package = \"tidyxl\") xlsx_names(examples) #> rId sheet name formula comment #> 1 1 Sheet1 named_local_formula MAX(Sheet1!$A$129:$A$130)+1 #> 2 4 E09904.2 sheet_beyond_chart E09904.2!$A$1,E09904.2!$C$1 #> 3 NA intersection Sheet1!$B:$B Sheet1!$8:$8 #> 4 NA named_global_formula Sheet1!$A$129-1 #> 5 NA named_range Sheet1!$A$129 My comment #> hidden is_range #> 1 FALSE FALSE #> 2 FALSE TRUE #> 3 FALSE TRUE #> 4 FALSE FALSE #> 5 FALSE TRUE"},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_sheet_names.html","id":null,"dir":"Reference","previous_headings":"","what":"List sheets in an xlsx (Excel) file — xlsx_sheet_names","title":"List sheets in an xlsx (Excel) file — xlsx_sheet_names","text":"xlsx_sheets() returns names sheets workbook, character vector. order appear spreadsheet opened spreadsheet application like Excel LibreOffice.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_sheet_names.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"List sheets in an xlsx (Excel) file — xlsx_sheet_names","text":"","code":"xlsx_sheet_names(path, check_filetype = TRUE)"},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_sheet_names.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"List sheets in an xlsx (Excel) file — xlsx_sheet_names","text":"path Path xlsx file. check_filetype Logical. Whether check filetype xlsx (xlsm) looking file , rather using filename extension.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_sheet_names.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"List sheets in an xlsx (Excel) file — xlsx_sheet_names","text":"character vector names worksheets file.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_sheet_names.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"List sheets in an xlsx (Excel) file — xlsx_sheet_names","text":"","code":"examples <- system.file(\"extdata/examples.xlsx\", package = \"tidyxl\") xlsx_sheet_names(examples) #> [1] \"Sheet1\" \"1~`!@#$%^&()_-+={}|;\\\"'<,>.\" #> [3] \"E09904.2\" \"gradientFill\""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_validation.html","id":null,"dir":"Reference","previous_headings":"","what":"Import data validation rules of cells in xlsx (Excel) files — xlsx_validation","title":"Import data validation rules of cells in xlsx (Excel) files — xlsx_validation","text":"xlsx_validation() returns data validation rules applied cells xlsx (Excel) files. Data validation rules control constants can entered cell, e.g. whole number 0 9, one several values another part spreadsheet.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_validation.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Import data validation rules of cells in xlsx (Excel) files — xlsx_validation","text":"","code":"xlsx_validation(path, sheets = NA)"},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_validation.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Import data validation rules of cells in xlsx (Excel) files — xlsx_validation","text":"path Path xlsx file. sheets Sheets read. Either character vector (names sheets), integer vector (positions sheets), NA (default, sheets).","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_validation.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Import data validation rules of cells in xlsx (Excel) files — xlsx_validation","text":"data frame following columns. sheet worksheet validation rule cell . ref Comma-delimited cell addresses rules apply, e.g. A106 A115,A121:A122`. type Data type input, one whole, decimal, list, date, time, textLength, custom, whole`. operator Unless type list custom, operator one , notBetween, equal, notEqual, greaterThan, lessThan, greaterThanOrEqual, lessthanOrEqual. formula1 type list, range cells whose values allowed rule. type custom, formula determine allowable values. Otherwise, cell address constant, coerced character. Dates times formatted like \"2017-01-27 13:30:45\". Times without dates formatted like \"13:30:45\". formula2 operator notBetween, cell address constant formula1, otherwise NA. allow_blank Boolean, whether rule allows blanks. show_input_message Boolean, whether rule shows message user begins entering value. prompt_title Text appear title bar popup message box user begins entering value. prompt_body Text appear popup message box user begins entering value. NA, default text shown. show_error_message Boolean, whether rule shows message user entered forbidden value. NA, default text shown. error_title Text appear title bar popup message box user enters forbidden value. NA, default text shown. error_body Text appear popup message box user enters forbidden value. NA, default text shown. error_symbol Name symbol appear popup error message user enters forbidden value.","code":""},{"path":"https://nacnudus.github.io/tidyxl/reference/xlsx_validation.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Import data validation rules of cells in xlsx (Excel) files — xlsx_validation","text":"","code":"examples <- system.file(\"extdata/examples.xlsx\", package = \"tidyxl\") xlsx_validation(examples) #> # A tibble: 15 × 14 #> sheet ref type operator formula1 formula2 allow_blank show_input_message #> #> 1 Sheet1 A106 whole between 0 9 TRUE TRUE #> 2 Sheet1 A108 list NA $B$108 NA TRUE TRUE #> 3 Sheet1 A110 date between 2017-01… 2017-01… TRUE TRUE #> 4 Sheet1 A111 time between 00:00:00 09:00:00 TRUE TRUE #> 5 Sheet1 A112 text… between 0 9 TRUE TRUE #> 6 Sheet1 A114 whole notBetw… 0 9 TRUE TRUE #> 7 Sheet1 A115,… whole equal 0 NA TRUE TRUE #> 8 Sheet1 A116 whole notEqual 0 NA TRUE TRUE #> 9 Sheet1 A117 whole greater… 0 NA TRUE TRUE #> 10 Sheet1 A119 whole greater… 0 NA TRUE TRUE #> 11 Sheet1 A120 whole lessTha… 0 NA TRUE TRUE #> 12 Sheet1 A118 whole lessThan 0 NA TRUE TRUE #> 13 Sheet1 A107 deci… notBetw… 0 9 FALSE FALSE #> 14 Sheet1 A113 cust… NA A113<=L… NA TRUE TRUE #> 15 Sheet1 A109 list NA $B$108 NA TRUE TRUE #> # ℹ 6 more variables: prompt_title , prompt_body , #> # show_error_message , error_title , error_body , #> # error_symbol xlsx_validation(examples, 1) #> # A tibble: 15 × 14 #> sheet ref type operator formula1 formula2 allow_blank show_input_message #> #> 1 Sheet1 A106 whole between 0 9 TRUE TRUE #> 2 Sheet1 A108 list NA $B$108 NA TRUE TRUE #> 3 Sheet1 A110 date between 2017-01… 2017-01… TRUE TRUE #> 4 Sheet1 A111 time between 00:00:00 09:00:00 TRUE TRUE #> 5 Sheet1 A112 text… between 0 9 TRUE TRUE #> 6 Sheet1 A114 whole notBetw… 0 9 TRUE TRUE #> 7 Sheet1 A115,… whole equal 0 NA TRUE TRUE #> 8 Sheet1 A116 whole notEqual 0 NA TRUE TRUE #> 9 Sheet1 A117 whole greater… 0 NA TRUE TRUE #> 10 Sheet1 A119 whole greater… 0 NA TRUE TRUE #> 11 Sheet1 A120 whole lessTha… 0 NA TRUE TRUE #> 12 Sheet1 A118 whole lessThan 0 NA TRUE TRUE #> 13 Sheet1 A107 deci… notBetw… 0 9 FALSE FALSE #> 14 Sheet1 A113 cust… NA A113<=L… NA TRUE TRUE #> 15 Sheet1 A109 list NA $B$108 NA TRUE TRUE #> # ℹ 6 more variables: prompt_title , prompt_body , #> # show_error_message , error_title , error_body , #> # error_symbol xlsx_validation(examples, \"Sheet1\") #> # A tibble: 15 × 14 #> sheet ref type operator formula1 formula2 allow_blank show_input_message #> #> 1 Sheet1 A106 whole between 0 9 TRUE TRUE #> 2 Sheet1 A108 list NA $B$108 NA TRUE TRUE #> 3 Sheet1 A110 date between 2017-01… 2017-01… TRUE TRUE #> 4 Sheet1 A111 time between 00:00:00 09:00:00 TRUE TRUE #> 5 Sheet1 A112 text… between 0 9 TRUE TRUE #> 6 Sheet1 A114 whole notBetw… 0 9 TRUE TRUE #> 7 Sheet1 A115,… whole equal 0 NA TRUE TRUE #> 8 Sheet1 A116 whole notEqual 0 NA TRUE TRUE #> 9 Sheet1 A117 whole greater… 0 NA TRUE TRUE #> 10 Sheet1 A119 whole greater… 0 NA TRUE TRUE #> 11 Sheet1 A120 whole lessTha… 0 NA TRUE TRUE #> 12 Sheet1 A118 whole lessThan 0 NA TRUE TRUE #> 13 Sheet1 A107 deci… notBetw… 0 9 FALSE FALSE #> 14 Sheet1 A113 cust… NA A113<=L… NA TRUE TRUE #> 15 Sheet1 A109 list NA $B$108 NA TRUE TRUE #> # ℹ 6 more variables: prompt_title , prompt_body , #> # show_error_message , error_title , error_body , #> # error_symbol "},{"path":[]},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-108","dir":"Changelog","previous_headings":"","what":"tidyxl 1.0.8","title":"tidyxl 1.0.8","text":"CRAN release: 2022-09-01 tidyxl now licensed MIT (#63). Fixed unicode bug (#64) Fixed two crashes (#71, #73) Fixed rare bug number formats (#52, #75, @da11an) New feature: Import outline levels rows columns (#77, #78) New feature: Import raw cell value content column (#80) Compatibility upcoming Rcpp release (#86, @Enchufa2)","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-107","dir":"Changelog","previous_headings":"","what":"tidyxl 1.0.7","title":"tidyxl 1.0.7","text":"CRAN release: 2020-11-16 Update namespace C++ code compatibility latest version PEGTL, wrapped {piton} package.","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-106","dir":"Changelog","previous_headings":"","what":"tidyxl 1.0.6","title":"tidyxl 1.0.6","text":"CRAN release: 2020-05-09 Fix compiler warnings.","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-105","dir":"Changelog","previous_headings":"","what":"tidyxl 1.0.5","title":"tidyxl 1.0.5","text":"CRAN release: 2020-04-02 Fix tests xlex() (#57).","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-104","dir":"Changelog","previous_headings":"","what":"tidyxl 1.0.4","title":"tidyxl 1.0.4","text":"CRAN release: 2019-01-02 Compatibility: imports cell data validation rules files created Office 365 (#46).","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-103","dir":"Changelog","previous_headings":"","what":"tidyxl 1.0.3","title":"tidyxl 1.0.3","text":"CRAN release: 2018-06-21 Noticeably faster large files. Omission blank cells include_blank_cells = FALSE bug returned blank cells empty row xlsx_cells() data frame.","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-102","dir":"Changelog","previous_headings":"","what":"tidyxl 1.0.2","title":"tidyxl 1.0.2","text":"Correctly constructs formulas references preceded operators, e.g. -F10 (#26 @cablegui). longer misinterprets date formats use underscores _ dates underscore followed date-ish character like M (#24). Optionally omits blank cells include_blank_cells = FALSE xlsx_cells() (#25). Doesn’t crash reading files certain colour themes (#34 @dan-fahey).","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-101","dir":"Changelog","previous_headings":"","what":"tidyxl 1.0.1","title":"tidyxl 1.0.1","text":"CRAN release: 2018-03-26 Filetype checking based file signature “magic number”, rather filename extension. new function maybe_xlsx() provided checking whether file might xlsx format. impossible sure magic number alone, magic numbers either common zip files, common Microsoft Office files (e.g. .doc, .ppt). Fixed CRAN warning.","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-100","dir":"Changelog","previous_headings":"","what":"tidyxl 1.0.0","title":"tidyxl 1.0.0","text":"CRAN release: 2017-11-25","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"new-features-1-0-0","dir":"Changelog","previous_headings":"","what":"New features","title":"tidyxl 1.0.0","text":"xlsx_cells() xlsx_formats() replace tidy_xlsx(), deprecated. xlsx_cells() returns single data frame cells scope (whole workbook, chosen sheets), rather list separate data frames sheet. xlsx_formats() performs orders magnitude faster. xlsx_validation() imports validation rules cells restrict data input, cells require selection drop-list. See vignette vignette(\"data-validation-rules\", package = \"tidyxl\"). xlsx_names() imports defined names (aka named ranges/formulas), can used filter particular ranges cells name. Use is_range() filter ones named ranges, read joining rules cells join cell ranges cell addresses. become easier future release. is_range() checks whether formula simply ranges cells. xlex() tokenises formulas. useful detecting spreadsheet smells like embedded constants deep nesting. demo Shiny app, vignette vignette(\"smells\", package = \"tidyxl\"). vector Excel function names excel_functions can used separated built-functions custom functions. experimental features implemented -CRAN package lexl becoming part tidyxl. xlsx_cells()$character_formatted new column -cell formatting text (#5). different parts text single cell formatted differently one another. is_date_format() checks whether number format string date format. useful cell formula contains number formatting string (e.g. TEXT(45678,\"yyyy\")), need know constant 45678 date order recover full resolution (rather parsing character output “2025” year). xlsx_color_theme() ’s British alias xlsx_colour_theme() returns theme colour palette used file. useful monitor use corporate standard theme. xlsx_color_standard ’s British alias xlsx_colour_standard data frames standard Excel palette (red, blue, etc.). Shared formulas propogated cells use formula definition. Relative cell references handled, formula =A1*2 cell B1 becomes =A2*2 cell B2 (details see issue #7). Formatting alignment cell protection returned (#20).","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"breaking-changes-and-deprecations-1-0-0","dir":"Changelog","previous_headings":"","what":"Breaking changes and deprecations","title":"tidyxl 1.0.0","text":"tidy_xlsx() deprecated favour xlsx_cells(), returns data frame cells workbook (requested sheets), xlsx_formats(), returns lookup list cell formats. column content replaced is_blank, logical value indicating whether cell contains data. Please replace !.na(content) !is_blank filter blank cells (ones formatting value). column formula_type replaced is_array, logical value indicating whether cell’s formula array formula . Excel array formulas represented visually surrounded curly braces {}. order columns changed useful columns visible narrow consoles. xlsx_formats() tidy_xlsx(), theme colours given name rather number, e.g. \"accent6\" instead 4.","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"minor-fixes-and-improvements-1-0-0","dir":"Changelog","previous_headings":"","what":"Minor fixes and improvements","title":"tidyxl 1.0.0","text":"Certain unusual custom number formats specify colours (e.g. \"[Cyan]0%\") longer mis-detect dates (#21). is_date_format() tests whether number format date format. xlsx_formats() now thoroughly tested, several relatively minor bugs fixed. example, xlsx_formats(path)$local$fill$patternFill$patternType consistently returns NA never \"none\" pattern fill set, escape-backslashes consistently omitted numFmts.","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"new-dependency-1-0-0","dir":"Changelog","previous_headings":"","what":"New dependency","title":"tidyxl 1.0.0","text":"xlex(), is_range() handling relative references shared formulas requires dependency piton package, wraps PEGTL C++ parser generator.","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-023","dir":"Changelog","previous_headings":"","what":"tidyxl 0.2.3","title":"tidyxl 0.2.3","text":"CRAN release: 2017-07-08 Imports dates 1900-02-28 dates correctly, warns impossible date 1900-02-29, returning NA (following readxl). Fixes subsecond rounding (following readxl (fixes #14)) Imports styles correctly LibreOffice files (interprets ‘true’ ‘false’ booleans, well 0 1 used Microsoft Excel, defaults ‘true’ present, e.g. applyFill) Fixes bug caused LibreOffice files crash R, styles declared gaps sequence xfIds. Imports comments attached blank cells (fixes #10) Includes sheet cell address warnings impossible datetimes 1900-02-29.","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-0219000","dir":"Changelog","previous_headings":"","what":"tidyxl 0.2.1.9000","title":"tidyxl 0.2.1.9000","text":"Checks value date1904 attribute \"false\" \"1\" support files created openxlsx package (#8). Fixed bug imported first line multiline comments (#9). Encodes cell comment text UTF-8 (#12). Finds worksheets reliably files created Excel (part #13). Falls back default styles none defined (#13). Imports dates greater precision (part #14). Fixed order worksheets (#15)","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-021","dir":"Changelog","previous_headings":"","what":"tidyxl 0.2.1","title":"tidyxl 0.2.1","text":"CRAN release: 2017-01-29 Fixed major bug: dates parsed incorrectly offsets 1900 1904 systems wrong way around. Added warning dates suffer Excel --one bug. Fixed bug misinterpreted number formats dates (confused ‘d’ ‘[Red]’, looks like ‘d’ ‘d/m/y’.) Added support xlsx files created Gnumeric (single, unnamed cell formatting style). Fixed checkUserInterrupt work every 1000th cell. Added many tests. Removed lots redundant code.","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-020","dir":"Changelog","previous_headings":"","what":"tidyxl 0.2.0","title":"tidyxl 0.2.0","text":"Breaking change: Look style formats style name (e.g. \"Normal\") instead index integer. vectors x$formats$style named according style names. x$data$sheet$style_format_id renamed x$data$sheet$style_format type changed integer (index style formats) character (still index, looking named vectors name). examples README vignette. Simplified variable names C++ code.","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-011","dir":"Changelog","previous_headings":"","what":"tidyxl 0.1.1","title":"tidyxl 0.1.1","text":"Fixed many compilation errors Travis/AppVeyor/r-hub Many small non-breaking changes","code":""},{"path":"https://nacnudus.github.io/tidyxl/news/index.html","id":"tidyxl-010","dir":"Changelog","previous_headings":"","what":"tidyxl 0.1.0","title":"tidyxl 0.1.0","text":"Added NEWS.md file track changes package.","code":""}]