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_fods()
(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_fods()
can be used to write Flat ODS files
write_fods(PlantGrowth, "plant.fods")
Use the function list_ods_sheets()
or list_fods_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")
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.