knitr::opts_chunk$set( collapse = TRUE, comment = "#>" )
library(readODS)
You probably only need to use two functions from this package: read_ods
and write_ods
.
Write the data PlantGrowth (from the built-in datasets
package) as a new file plant.ods
in the current working directory of the user's session.
write_ods(PlantGrowth, "plant.ods")
You can then read it back from plant.ods
read_ods("plant.ods")
You can append another sheet into an existing ods file with the sheet name being "mtcars_ods".
write_ods(mtcars, "plant.ods", sheet = "mtcars_ods", append = TRUE)
Read from a specific sheet. Notice row names are missing.
read_ods("plant.ods", sheet = "mtcars_ods")
You can also integer for sheet
, e.g. 2 for the second sheet.
read_ods("plant.ods", sheet = 2)
Update an existing sheet and preserve row names
write_ods(mtcars, "plant.ods", sheet = "mtcars_ods", update = TRUE, row_names = TRUE)
Notice the information from the sheet mtcars_ods
is updated.
read_ods("plant.ods", sheet = "mtcars_ods")
Read from a specific range
read_ods("plant.ods", sheet = "mtcars_ods", range = "A1:C10")
You cannot append to an existing sheet.
write_ods(iris, "plant.ods", sheet = "mtcars_ods", append = TRUE)
You cannot update a missing sheet.
write_ods(iris, "plant.ods", sheet = "iris", update = TRUE)
It is much faster to write data frames into the same file by putting them in a (named) list.
write_ods(list("iris" = iris, "plant" = PlantGrowth), "plant_multi.ods") read_ods("plant_multi.ods", sheet = "plant")
.xml
or .fods
)Can be read with read_ods()
[^1] (note that the same function is used to read flat files, no matter the extension).
This has the same behaviour and arguments as read_ods()
read_fods("plant.fods")
write_ods()
can be used to write Flat ODS files
write_ods(PlantGrowth, "plant.fods")
Use the function list_ods_sheets()
to list out all sheets in an (F)ODS file.
list_ods_sheets("plant.ods")
Starting from 2.0.0, write_ods
writes NA
as empty by default.
PlantGrowth2 <- tibble::as_tibble(PlantGrowth) PlantGrowth2[1,1] <- NA PlantGrowth2$group <- as.character(PlantGrowth2$group) ## NA is preseved; weight is still <dbl> read_ods(write_ods(PlantGrowth2))
If you want NA
to be written literally as the string "NA", use na_as_string
. You should literally see the string "NA" when the file is opened with LibreOffice, for example.
But the string "NA" messes up the automatic type inference of read_ods
.
## NA is preseved; but weight is now <chr> read_ods(write_ods(PlantGrowth2, na_as_string = TRUE))
Of course you can fix this by specifying col_types
.
## NA is preseved; but weight is now <chr> read_ods(write_ods(PlantGrowth2, na_as_string = TRUE), col_types = readr::cols(weight = readr::col_double()))
Several functions were removed in readODS 2.0.0. Please consider the API of readODS
mature and there should not be any breaking change until readODS 3.0.0.
ods_sheets
Please use list_ods_sheets(path = "plant.ods")
instead.
## ods_sheets("plant.ods") list_ods_sheets("plant.ods")
get_num_sheets_in_ods
and getNrOfSheetsInODS
Please use list_ods_sheets
##get_num_sheets_in_ods("plant.ods") length(list_ods_sheets("plant.ods"))
read.ods
Please use read_ods
. In order to emulate the behaviours of read.ods
, the followings are recommended
## read.ods from 1.6 to 1.8 read_ods("plant.ods", col_names = FALSE, skip = 0, na = NULL, col_types = NA, as_tibble = FALSE)
## read.ods older than 1.6 lapply(list_ods_sheets("plant.ods"), function(x) read_ods(path = "plant.ods", sheet = x, col_names = FALSE, skip = 0, na = NULL, col_types = NA, as_tibble = FALSE))
unlink("plant.ods") unlink("plant.fods") unlink("plant_multi.ods")
[^1]: read_fods()
and list_fods_sheets()
are also available. But since version 2.2.0 read_ods()
and list_ods_sheets()
can determine whether the file at the path
argument is flat or not.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.