{"id":20417023,"url":"https://github.com/smourier/sheetreader","last_synced_at":"2026-04-11T07:11:43.610Z","repository":{"id":187041436,"uuid":"676202367","full_name":"smourier/SheetReader","owner":"smourier","description":"A simple CSV, XLSX or JSON data sheet reader, and a WPF Sheet Control to display the tabular data","archived":false,"fork":false,"pushed_at":"2026-02-28T18:34:04.000Z","size":3011,"stargazers_count":11,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-28T21:37:11.618Z","etag":null,"topics":["csv-parser","csv-reader","dotnet","dotnetcore","wpf","xlsx","xlsxreader"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/smourier.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-08-08T16:52:46.000Z","updated_at":"2026-02-28T18:34:08.000Z","dependencies_parsed_at":null,"dependency_job_id":"6d103c5c-35bd-4dea-a5ce-56754ad6730f","html_url":"https://github.com/smourier/SheetReader","commit_stats":null,"previous_names":["smourier/sheetreader"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/smourier/SheetReader","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smourier%2FSheetReader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smourier%2FSheetReader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smourier%2FSheetReader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smourier%2FSheetReader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/smourier","download_url":"https://codeload.github.com/smourier/SheetReader/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/smourier%2FSheetReader/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31671919,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-10T17:19:37.612Z","status":"online","status_checked_at":"2026-04-11T02:00:05.776Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["csv-parser","csv-reader","dotnet","dotnetcore","wpf","xlsx","xlsxreader"],"created_at":"2024-11-15T06:24:12.030Z","updated_at":"2026-04-11T07:11:43.606Z","avatar_url":"https://github.com/smourier.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SheetReader\nA CSV, XLSX or JSON data sheet reader. In the CSV and XLSX cases, it doesn't allocate memory for the whole input file (or stream) but reads rows and cells on demand.\n\nExample:\n\n    var book = new Book();\n    var visibleRows = 0;\n    var invisibleRows = 0;\n    foreach (var sheet in book.EnumerateSheets(@\"c:\\path\\blah.xlsx\")) // or .csv\n    {\n        Console.WriteLine(sheet + \" (visible:\" + sheet.IsVisible + \")\");\n        foreach (var row in sheet.EnumerateRows())\n        {\n            if (!row.IsVisible)\n            {\n                invisibleRows++;\n                continue;\n            }\n            \n            visibleRows++;\n            Console.WriteLine(string.Join(\"\\t\", row.EnumerateCells()));\n        }\n    }\n    Console.WriteLine(\"Visible rows:\" + visibleRows);\n    Console.WriteLine(\"Invisible rows:\" + invisibleRows);\n\nThe reader code (not the WPF control and sample) is also available as a single .cs file: [SheetReader.cs](Amalgamation/SheetReader.cs)\n\nThere's also a read-only WPF control that allows to see what's been read by the **SheetReader**, whatever the input was (CSV, XLSX or JSON):\n\n![image](https://github.com/smourier/SheetReader/assets/5328574/6c32c034-0703-4879-88b7-7a615bfffee1)\n\nSupports keyboard navigation, selection and focus (mouse \u0026 keyboard):\n\n![image](https://github.com/smourier/SheetReader/assets/5328574/0eca72a2-ff5f-46b0-9fda-6f8e404cfdf6)\n\nAlso supports column resizing, by mouse or programmatically.\nCan be programmatically customized to use different styles (color, alignement, etc.):\n\n![image](https://github.com/smourier/SheetReader/assets/5328574/dd2d5a2b-fb14-41a2-a116-9ab8d67ec4c4)\n\nAlso supports column sorting, by mouse double-click on column header or programmatically. Can be programmatically customized to use different comparison algorithms.\n\n![image](https://github.com/user-attachments/assets/9b06dd43-1bbb-47d3-bb6d-748c91aec8fd)\n\nAlso supports column moving, by mouse drag on column header or programmatically.\n\n![image](https://github.com/user-attachments/assets/cb1a7316-f8c7-4a4c-bf94-67994ca3049f)\n\nIt can also  export data back as .JSON or .CSV files with various options:\n\n![image](https://github.com/user-attachments/assets/f38780da-5fb7-41ce-97f7-59b8717624de)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsmourier%2Fsheetreader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsmourier%2Fsheetreader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsmourier%2Fsheetreader/lists"}