{"id":22061160,"url":"https://github.com/xavier/xlsx_reader","last_synced_at":"2025-10-21T17:49:23.736Z","repository":{"id":54577629,"uuid":"221536246","full_name":"xavier/xlsx_reader","owner":"xavier","description":"A production-ready XLSX file reader for Elixir.","archived":false,"fork":false,"pushed_at":"2024-07-14T13:25:12.000Z","size":454,"stargazers_count":90,"open_issues_count":0,"forks_count":15,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-07-14T15:11:05.631Z","etag":null,"topics":["elixir","excel","openoffice","parser","spreadsheet","spreadsheetml","xlsx"],"latest_commit_sha":null,"homepage":"","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xavier.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-11-13T19:32:09.000Z","updated_at":"2024-07-14T13:25:15.000Z","dependencies_parsed_at":"2023-10-16T04:07:20.087Z","dependency_job_id":"62ee00e3-0892-4fba-b343-540d1cb50000","html_url":"https://github.com/xavier/xlsx_reader","commit_stats":{"total_commits":123,"total_committers":7,"mean_commits":"17.571428571428573","dds":0.04878048780487809,"last_synced_commit":"bd6ab539969ac7d1d6864bd616350519c57b786e"},"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xavier%2Fxlsx_reader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xavier%2Fxlsx_reader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xavier%2Fxlsx_reader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xavier%2Fxlsx_reader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xavier","download_url":"https://codeload.github.com/xavier/xlsx_reader/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":227390953,"owners_count":17773034,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["elixir","excel","openoffice","parser","spreadsheet","spreadsheetml","xlsx"],"created_at":"2024-11-30T18:02:17.722Z","updated_at":"2025-10-21T17:49:18.661Z","avatar_url":"https://github.com/xavier.png","language":"Elixir","funding_links":[],"categories":["Elixir"],"sub_categories":[],"readme":"![XlsxReader logo](https://raw.githubusercontent.com/xavier/xlsx_reader/master/assets/logo.png)\n\n# XlsxReader\n\n![Build status](https://github.com/xavier/xlsx_reader/workflows/CI/badge.svg)\n\nAn XLSX reader in Elixir.\n\nFeatures:\n\n- Accepts XLSX data located on the file system or in memory\n- Automatic type conversions (numbers, date \u0026 times, booleans)\n- Optional support for arbitrary precision [decimal](https://github.com/ericmj/decimal) numbers\n- Straightforward architecture: no ETS tables, no race-conditions, no manual resource management\n\nThe docs can be found at [https://hexdocs.pm/xlsx_reader](https://hexdocs.pm/xlsx_reader).\n\n## Installation\n\nAdd `xlsx_reader` as a dependency in your `mix.exs`:\n\n```elixir\ndef deps do\n  [\n    {:xlsx_reader, \"~\u003e 0.8.0\"}\n  ]\nend\n```\n\nRun `mix deps.get` in your shell to fetch and compile XlsxReader.\n\n## Examples\n\n### Loading from the file system\n\n```elixir\n\n{:ok, package} = XlsxReader.open(\"test.xlsx\")\n\nXlsxReader.sheet_names(package)\n# [\"Sheet 1\", \"Sheet 2\", \"Sheet 3\"]\n\n{:ok, rows} = XlsxReader.sheet(package, \"Sheet 1\")\n# [\n#   [\"Date\", \"Temperature\"],\n#   [~D[2019-11-01], 8.4],\n#   [~D[2019-11-02], 7.5],\n#   ...\n# ]\n```\n\n### Loading from memory\n\n```elixir\nblob = File.read!(\"test.xlsx\")\n\n{:ok, package} = XlsxReader.open(blob, source: :binary)\n```\n\n### Loading all sheets at once\n\n```elixir\n{:ok, sheets} = XlsxReader.sheets(package)\n# [\n#   {\"Sheet 1\", [[\"Date\", \"Temperature\"], ...]},\n#   {\"Sheet 2\", [...]},\n#   ...\n# ]\n```\n\n### Loading sheets selectively\n\n```elixir\n{:ok, sheets} = XlsxReader.sheets(package, only: [\"Parameters\", ~r/Sheet \\d+/], except: [\"Sheet 2\"])\n# [\n#   {\"Parameters\", [...]},\n#   {\"Sheet 1\", [...]},\n#   {\"Sheet 3\", [...]},\n#   {\"Sheet 4\", [...]},\n#   ...\n# ]\n```\n\n### Loading all sheets at once concurrently\n\n```elixir\n{:ok, sheets} = XlsxReader.async_sheets(package)\n# [\n#   {\"Sheet 1\", [[\"Date\", \"Temperature\"], ...]},\n#   {\"Sheet 2\", [...]},\n#   ...\n# ]\n```\n\n### Using arbitrary precision numbers\n\n```elixir\n{:ok, rows} = XlsxReader.sheet(package, \"Sheet 1\", number_type: Decimal)\n# [\n#   [\"Date\", \"Temperature\"],\n#   [~D[2019-11-01], %Decimal{coef: 84, exp: -1, sign: 1}],\n#   [~D[2019-11-02], %Decimal{coef: 75, exp: -1, sign: 1}],\n#   ...\n# ]\n```\n\n### Access cell formulas\n\n```elixir\n{:ok, rows} = XlsxReader.sheet(package, \"Sheet 1\", cell_data_format: :cell)\n# [\n#   [%Cell{value: 1234.0, formula: \"SUM(B1, B10)\", ref: \"A1\"}, ...],\n#   ...\n# ]\n```\n\n## Development\n\n### Benchmarking\n\n1. `mix run benchmark/init.exs` to create the benchmarking dataset\n2. `mix run benchmark/run.exs` to run the [Benchee](https://github.com/bencheeorg/benchee) suite\n\n## Contributors\n\nIn order of appearance:\n\n- Xavier Defrang ([xavier](https://github.com/xavier))\n- Darragh Enright ([darraghenright](https://github.com/darraghenright))\n- Patryk Woziński ([patrykwozinski](https://github.com/patrykwozinski))\n- Evaldo Bratti ([evaldobratti](https://github.com/evaldobratti))\n- Zach Liss ([ZachLiss](https://github.com/ZachLiss))\n- [Paranojik](https://github.com/paranojik)\n- Juan Barrios ([03juan](https://github.com/03juan))\n- Dylan Harness ([dharness](https://github.com/dharness))\n- Victor Rodrigues ([rodrigues](https://github.com/rodrigues))\n- Jose Valim ([josevalim](https://github.com/josevalim))\n- Vinicius Moraes ([ding-an-sich](https://github.com/ding-an-sich))\n- [Gladear](https://github.com/gladear)\n- [Alessandro Agnelli](https://github.com/aleagnelli)\n- [Wei Huang](https://github.com/weih-kahoot)\n\n## License\n\nCopyright 2020 Xavier Defrang\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxavier%2Fxlsx_reader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxavier%2Fxlsx_reader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxavier%2Fxlsx_reader/lists"}