Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

readxl versus openxlsx #419

Open
ericemc3 opened this issue Mar 5, 2022 · 6 comments · Fixed by #453
Open

readxl versus openxlsx #419

ericemc3 opened this issue Mar 5, 2022 · 6 comments · Fixed by #453

Comments

@ericemc3
Copy link

ericemc3 commented Mar 5, 2022

Cette affirmation pose la supériorité de openxlsx::read.xlsx sur readxl::read_excel :

Il est recommandé d’utiliser la fonction read_excel() du package readxl pour importer des fichiers xls. Cette fonction peut également importer des fichiers xlsx, mais elle est moins rapide que la fonction read.xlsx() du package openxlsx.

Cela ne correspond pas à mon ressenti. Avez-vous un exemple ?

Voici un test sur un tableau détaillé RP de 36 Mo accessible sur https://www.insee.fr/fr/statistiques/5395834?sommaire=5395894,
readxl apparait deux fois plus rapide :

microbenchmark(
  read_excel = read_excel("data/xlsx/BTX_TD_FOR2_2018.xlsx"),
  read.xlsx = read.xlsx("data/xlsx/BTX_TD_FOR2_2018.xlsx"),
  times = 2
)

image

@linogaliana
Copy link
Contributor

@CTassart et @oliviermeslin : c'est vous qui aviez fait le comparatif. Vous avez encore les tests de perf ?

@ddotta
Copy link
Contributor

ddotta commented Mar 7, 2022

Il me semble aussi que readxl::read_excel est plus performant que openxlsx::read.xlsx
Cette page fournit un bon exemple dont je reprends ici les résultats :
Mais peut-être que {openxlsx} présente d'autres avantages comparativement à {readxl}
image

@ericemc3
Copy link
Author

ericemc3 commented Mar 7, 2022

En effet, je trouve pour ma part openxlsx intéressant en écriture de fichiers xlsx, openxlsx ::write.xlsx présente de multiples options bien pratiques pour personnaliser ses exports.

@py-b
Copy link
Member

py-b commented Mar 7, 2022

Pour en revenir à la lecture, une différence importante entre les 2 fonctions n'est pas dans la sélection par plage pour readxl::read_excel contre la spécification des lignes et colonnes par openxlsx::read.xlsx ? Pas de hiérarchie selon moi, seulement des possibilités différentes selon la localisation des données dans les fichiers qu'on veut importer.

@ddotta
Copy link
Contributor

ddotta commented Mar 8, 2022

En effet, je trouve pour ma part openxlsx intéressant en écriture de fichiers xlsx, openxlsx ::write.xlsx présente de multiples options bien pratiques pour personnaliser ses exports.

Oui je confirme dans mon équipe un collègue a écrit quelques fonctions d'export à partir d'openxlxs et c'est assez puissant en terme de choix de styles possibles (formats des colonnes/lignes/cellules, personnalisation des titres/notes de lecture/sources...).

Peut-être à signaler un jour dans un paragraphe ou fiche sur les exports ?

@linogaliana
Copy link
Contributor

En effet, je trouve pour ma part openxlsx intéressant en écriture de fichiers xlsx, openxlsx ::write.xlsx présente de multiples options bien pratiques pour personnaliser ses exports.

Oui je confirme dans mon équipe un collègue a écrit quelques fonctions d'export à partir d'openxlxs et c'est assez puissant en terme de choix de styles possibles (formats des colonnes/lignes/cellules, personnalisation des titres/notes de lecture/sources...).

Peut-être à signaler un jour dans un paragraphe ou fiche sur les exports ?

Au vu du débat, j'ai l'impression que les éléments suivants semblent émerger

  • readxl plus performant en lecture pourrait être privilégié. La spécification des lignes ou colonnes à sélectionner semble quand même riche (ci-dessous)
  • openxlsx fait consensus pour l'écriture

A cell range to read from, as described in cell-specification. Includes typical Excel ranges like "B3:D87", possibly including the sheet name like "Budget!B2:G14", and more. Interpreted strictly, even if the range forces the inclusion of leading or trailing empty rows or columns. Takes precedence over skip, n_max and sheet.

Ravi d'accepter une PR qui irait dans ce sens (promis plus rapidement que ma participation à ce débat)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants