minty instead of readr to reduce the number of dependenciescpp11 to avoid the "non-API calls"trim_ws for colnames behaves the same as readxl::read_xlsx().read_ods() and list_ods_sheets() can also be used to process flat ods files. read_fods() and list_fods_sheets() are still available, but not as the so-called "common interface."read_ods() and read_fods() have two arguments - trim_ws and n_max which are the same as the arguments of readxl::read_excel().cpp11 versionappend and update of write_ods in C++Significant speed improvement; also xml2 is no longer a dependency.
col_names / row_namesPrior the previous stable release, <= 1.9.0, reading single-row / single-column with col_names = TRUE / row_names = TRUE produced errors.
In v1.9.0 (and the stable version v2.0.0 on CRAN), reading single-row / single-column (F)ODS with col_names = TRUE / row_names = TRUE will
override the two parameters and return a non-empty data frame. This behaviour is consistent with other data reading R functions (see #146) such as readxl::read_xlsx(), readr::read_csv(), data.table::fread(), and openxlsx::read.xlsx(). For these functions, either a empty or zero-row data.frame is returned.
We changed this behaviour. The following will return a zero-row data.frame by default.
read_ods(write_ods(mtcars[0,])) ## col_names is TRUE by default
However, the previous behaviour is in the stable release and backward compatibility is needed. If you need that previous behaviour, please set the options("readODS.v200" = TRUE)
options("readODS.v200" = TRUE)
read_ods(write_ods(mtcars[0,])) ## col_names is TRUE by default
write_ods and write_fods allow list of data framesFix #56; and it is now the same as writexl::write_xlsx().
write_ods(list("some_car_data" = mtcars, "some_flower_data" = iris))
list_fods_sheets() and read_fods() cannot accept ~ as pathlist_fods_sheets() can't guard non-fods XML disguised as fodsods_sheetsSee discussion #133
col_types can be character ("shorthand") or listfix #135 and the review by Dr Ruedni
# Specifying col_types as shorthand, the third column as factor; other by guessing
read_ods("starwars.ods", col_types = "??f")
# Specifying col_types as list
read_ods("starwars.ods", col_types = list(species = "f"))
write_fods is available, fix #103
write_odswrite_ods has been partially rewritten in C++ #140
To ensure UTF-8 everywhere, fix #107
Bump requirement to R>=3.6
dttm column was incorrectly written with one more column. It's now fixed.
write_ods(na_as_string) behaviourThe default for na_as_string was getOption("write_ods_na", default = FALSE) in v1.8. The default now is FALSE, but it writes NA as blank cell (instead of the buggy behaviour of writing NA in the original type, which is rendered as 0 by LibreOffice for numeric types. see #79). This behaviour is compatible with the default of writexl::write_xlsx.
The behaviour of na_as_string = TRUE is the same as in v1.8: writes NA as string.
get_num_sheets_in_{f}ods()The descendant of getNrOfSheetsInODS() is not very useful. If you really need to have the similar function:
length(list_ods_sheets("starwars.ods"))
write_ods()overwrite: always TRUEverbose: always FALSEwrite_ods()as_tibble and .name_repair as arguments. If as_tibble is true, outputs as a tibble using tibble::as_tibble() passing on .name_repair (default being "unique"). By default as_tibble is set to TRUE.check_names argument. All name repairs are now dealt with using vctrs::vec_as_names(). This will significantly change the default names given to outputs. (Names in the style of check_names = TRUE can be obtained by setting .name_repair = minimal, although this is not advised)ods_sheets to v3There are many reverse dependencies using ods_sheets.
NEWS.md file to track changes to the package.These have been deprecated for several years.
include_external_data as an argument (FALSE by default). This hides stored data from external sources not normally accessible to the user.range argument, e.g. Range = "Sheet2!A2:B7". If this and the sheets argument are given, this is preferred.NA.as_tibble and .name_repair as arguments. If as_tibble is true, outputs as a tibble using tibble::as_tibble() passing on .name_repair (default being "check_unique").read_fods(), list_fods_sheets(), get_num_sheets_in_fods(). These work the same way as their analogue ODS functions. The extension does not need to be fods, however they do need to conform to the OO specification.Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.