From 57ad1a02b15faa59f89733d5308fe250444287c2 Mon Sep 17 00:00:00 2001 From: Abdulfatah Bahbouh <60443686+abooodbah@users.noreply.github.com> Date: Sat, 7 Nov 2026 23:02:59 -0600 Subject: [PATCH 1/4] Add a page on opening CSV files too large for Excel Plain HTML at site/open-csv-too-large-for-excel/ with the common options (Power Query, splitting, DuckDB, Python, a large-file viewer). LeanRows numbers are the measured run already on the main page. Listed in the sitemap; lastmod set to 2026-11-08 for both pages. --- site/open-csv-too-large-for-excel/index.html | 147 +++++++++++++++++++ site/sitemap.xml | 6 +- site/styles.css | 23 +++ 3 files changed, 175 insertions(+), 1 deletion(-) create mode 100644 site/open-csv-too-large-for-excel/index.html diff --git a/site/open-csv-too-large-for-excel/index.html b/site/open-csv-too-large-for-excel/index.html new file mode 100644 index 0000000..f582a89 --- /dev/null +++ b/site/open-csv-too-large-for-excel/index.html @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + + + + + How to open a CSV file that is too large for Excel + + + + + + +
+
+
+

Large CSV files · Windows

+

How to open a CSV file that is too large for Excel

+

+ An Excel worksheet holds at most 1,048,576 rows. When a CSV file has + more, Excel opens the first 1,048,576 rows, warns that the file was + not loaded completely, and leaves the rest out. Saving that workbook + back over the CSV loses the missing rows. +

+

+ Which way works best depends on whether you need to read the rows, + analyse them, or change them. These are the common options on Windows. +

+ +

1. Load it with Power Query

+

+ In Excel, use Data > Get Data > From Text/CSV, then Load To and + choose the Data Model or a connection only. The rows stay in the data + model, not on a worksheet, so the row limit does not apply. You can + filter and summarise with PivotTables. You cannot scroll through every + row on a sheet, and very large files take time and memory to load. +

+ +

2. Split the file into parts

+

+ Cut the file into pieces under the row limit and open each in Excel. + This works when the rows are independent. Keep the header row in every + part, and take care with quoted fields that contain line breaks: a + tool that splits on every line break will cut such a record in two. +

+ +

3. Query it with DuckDB

+

+ DuckDB runs SQL directly on a CSV file without importing it first. + For example, SELECT * FROM read_csv('data.csv') LIMIT 100; + shows the first rows, and a WHERE or + GROUP BY clause filters or summarises the whole file. + This suits people who are comfortable with SQL. +

+ +

4. Read it in chunks with Python

+

+ With pandas, pd.read_csv('data.csv', chunksize=1_000_000) + reads the file one block of rows at a time, so you can filter or + aggregate a file larger than memory. This needs Python and some + scripting. +

+ +

5. Open it in a large-file viewer

+

+ If you only need to look at the rows, search them, or copy a few out, + a viewer built for large files avoids loading the whole file. LeanRows + is one of these: a free, open-source, read-only viewer for Windows 10 + and 11. It reads the file in blocks, keeps only the visible rows in + memory, shows the first rows while it is still indexing, and can + search, jump to a row number, and sort by a column without changing + the file. +

+

+ On the developer's Windows PC, LeanRows fully indexed a generated CSV + of 20,000,001 rows and 1,532,454,643 bytes (1.5 GB) with a peak working + set of 18.4 MB. The + 0.2.0 release notes + record two more runs on a 20,000,001-row CSV at 18.15 to 18.18 MiB. + The PC's hardware is not recorded. LeanRows does not edit files, + calculate formulas, or run on macOS or Linux. Other large-file viewers + and text editors exist too, some of them paid; compare their limits + before you choose. +

+

+ + See LeanRows and how to install it + +

+ +

Which one to use

+

+ To analyse the data inside Excel, use Power Query. To query or + transform it repeatedly, use DuckDB or Python. To look at the rows + quickly without writing anything, use a viewer. Splitting the file is + a last resort, because it is easy to break quoted records. +

+
+
+
+ + + + diff --git a/site/sitemap.xml b/site/sitemap.xml index ef226e8..3c37e12 100644 --- a/site/sitemap.xml +++ b/site/sitemap.xml @@ -2,6 +2,10 @@ https://abooodbah.github.io/leanrows/ - 2026-11-06 + 2026-11-08 + + + https://abooodbah.github.io/leanrows/open-csv-too-large-for-excel/ + 2026-11-08 diff --git a/site/styles.css b/site/styles.css index 9b28417..34bbcfd 100644 --- a/site/styles.css +++ b/site/styles.css @@ -1151,3 +1151,26 @@ pre { .android-join { margin: 1.5rem 0 1rem; } + +/* Task pages, such as open-csv-too-large-for-excel/. */ +.task-copy { + max-width: 46rem; +} + +.task-copy h1 { + font-size: clamp(2.25rem, 4vw, 3rem); + line-height: 1.1; +} + +.task-copy h2 { + max-width: none; + margin-top: var(--space-10); + margin-bottom: var(--space-4); + font-size: clamp(1.5rem, 2.6vw, 2rem); +} + +.task-copy p { + color: var(--text-secondary); + font-size: 1.125rem; + line-height: 1.6; +} From 273db19ba867141307b2f9b23dda661e4f441105 Mon Sep 17 00:00:00 2001 From: Abdulfatah Bahbouh <60443686+abooodbah@users.noreply.github.com> Date: Sat, 7 Nov 2026 23:02:59 -0600 Subject: [PATCH 2/4] Site: winget command, v0.5.1 facts and structured data - winget install abooodbah.LeanRows next to the Store and Chocolatey lines - v0.5.1 in the download note and checksum command - executable size from the v0.5.1 release ZIP: 1,024,512 bytes - JSON-LD: version 0.5.1, sameAs instead of codeRepository, screenshot, image, author url - fetchpriority=high on the 20 million row capture, releases feed link - FAQ links the new task page; validate.mjs pins each of these --- site/index.html | 32 +++++++++++++++----- site/validate.mjs | 76 +++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 98 insertions(+), 10 deletions(-) diff --git a/site/index.html b/site/index.html index c1f4f09..55c2f68 100644 --- a/site/index.html +++ b/site/index.html @@ -24,6 +24,7 @@ + @@ -34,10 +35,9 @@ "name": "LeanRows", "description": "A free, read-only Windows viewer for large CSV, TSV, JSONL, NDJSON, log, and text files and Excel .xlsx workbooks, including CSV files too big for Excel.", "url": "https://abooodbah.github.io/leanrows/", - "codeRepository": "https://github.com/abooodbah/leanrows", "applicationCategory": "UtilitiesApplication", "operatingSystem": "Windows 10 and Windows 11 (x64)", - "softwareVersion": "0.5.0", + "softwareVersion": "0.5.1", "offers": { "@type": "Offer", "price": "0", @@ -45,9 +45,18 @@ }, "license": "https://github.com/abooodbah/leanrows/blob/main/LICENSE", "downloadUrl": "https://github.com/abooodbah/leanrows/releases/latest", + "screenshot": "https://abooodbah.github.io/leanrows/assets/leanrows-20m-rows.webp", + "image": "https://abooodbah.github.io/leanrows/assets/social-preview.png", + "sameAs": [ + "https://github.com/abooodbah/leanrows", + "https://apps.microsoft.com/detail/9NMV8GKJXSN0", + "https://github.com/microsoft/winget-pkgs/tree/master/manifests/a/abooodbah/LeanRows", + "https://community.chocolatey.org/packages/leanrows" + ], "author": { "@type": "Person", - "name": "Abdulfatah Bahbouh" + "name": "Abdulfatah Bahbouh", + "url": "https://abooodbah.github.io/" } } @@ -104,7 +113,7 @@

- v0.5.0 is an unsigned Windows x64 ZIP. Verify the accompanying + v0.5.1 is an unsigned Windows x64 ZIP. Verify the accompanying .sha256 file before running it. LeanRows is also in the Microsoft Store, signed by Microsoft. @@ -173,6 +182,7 @@

20 million rows in 18.4 MB of memory.

src="assets/leanrows-20m-rows.webp" width="1400" height="792" + fetchpriority="high" decoding="async" alt="LeanRows in Dark appearance with demo_events_20M.csv open, showing the first rows of an event log, with the status bar reading Ready, 20000001 rows, 1532454643 of 1532454643 bytes, 100 percent" > @@ -412,7 +422,7 @@

The release is built around reproducible checks.

-

Before installing v0.5.0

+

Before installing v0.5.1

The Windows build is intentionally unsigned.

@@ -421,7 +431,13 @@

The Windows build is intentionally unsigned.

matching SHA-256 sidecar from the same GitHub Release, then compare the published value before running or installing LeanRows.

-
Get-FileHash .\LeanRows-v0.5.0-windows-x64-unsigned.zip -Algorithm SHA256
+
Get-FileHash .\LeanRows-v0.5.1-windows-x64-unsigned.zip -Algorithm SHA256
+

+ LeanRows is also in the winget community repository. winget installs + the portable ZIP from the GitHub Release after checking its SHA-256 + and adds a leanrows command. +

+
winget install abooodbah.LeanRows

To avoid the warning, install LeanRows from the Microsoft Store @@ -453,7 +469,7 @@

Opening large CSV files on Windows

How do I open a CSV file that is too large for Excel?

-

Excel shows at most 1,048,576 rows. LeanRows reads the file in blocks and keeps only the visible rows in memory, so the row count is not limited by RAM. On the developer's PC it fully indexed a 1.5 GB, 20 million row CSV with an 18.4 MB peak working set.

+

Excel shows at most 1,048,576 rows. LeanRows reads the file in blocks and keeps only the visible rows in memory, so the row count is not limited by RAM. On the developer's PC it fully indexed a 1.5 GB, 20 million row CSV with an 18.4 MB peak working set. Other ways to open a CSV that is too large for Excel include Power Query, splitting the file, and DuckDB or Python.

Is LeanRows free?

@@ -469,7 +485,7 @@

Which formats does it open?

Do I need to install anything?

-

No. Extract the portable ZIP and run its single 618 KB executable; it needs no administrator rights, and an optional per-user installer is included. Outside its folder it writes only its appearance setting under HKCU\Software\LeanRows and a search scratch folder under %LOCALAPPDATA%\LeanRows.

+

No. Extract the portable ZIP and run its single executable (1,024,512 bytes in v0.5.1); it needs no administrator rights, and an optional per-user installer is included. Outside its folder it writes only its appearance setting under HKCU\Software\LeanRows and a search scratch folder under %LOCALAPPDATA%\LeanRows.

Can I search and jump to a row?

diff --git a/site/validate.mjs b/site/validate.mjs index 5c8e72a..307eafc 100644 --- a/site/validate.mjs +++ b/site/validate.mjs @@ -23,6 +23,7 @@ for (const required of [ "assets/leanrows-icon.svg", "assets/leanrows-20m-rows.webp", "assets/social-preview.png", + "open-csv-too-large-for-excel/index.html", ]) { try { const entry = await stat(resolve(siteRoot, required)); @@ -180,6 +181,26 @@ requireMatch( /winget install --id 9NMV8GKJXSN0 --source msstore<\/code>/, "the page must give the winget command for the Microsoft Store build", ); +requireMatch( + html, + /winget install abooodbah\.LeanRows<\/code>/, + "the page must give the winget community package command", +); +requireMatch( + html, + /src="assets\/leanrows-20m-rows\.webp"\s+width="1400"\s+height="792"\s+fetchpriority="high"/, + "the 20 million row capture is the largest image on the page and must load with fetchpriority high", +); +requireMatch( + html, + //, + "the page must link the GitHub releases feed", +); +requireMatch( + html, + /href="open-csv-too-large-for-excel\/"/, + "the page must link the open-csv-too-large-for-excel task page", +); requireMatch(css, /:focus-visible\s*\{[^}]*outline:/s, "visible focus styles are required"); requireMatch(css, /prefers-reduced-motion:\s*reduce/i, "reduced-motion support is required"); requireMatch(css, /@media\s*\(max-width:\s*48rem\)/i, "mobile layout rules are required"); @@ -194,9 +215,26 @@ if (structuredDataMatch) { if (structuredData["@type"] !== "SoftwareApplication") { failures.push("JSON-LD must describe a SoftwareApplication"); } - if (structuredData.name !== "LeanRows" || structuredData.softwareVersion !== "0.5.0") { + if (structuredData.name !== "LeanRows" || structuredData.softwareVersion !== "0.5.1") { failures.push("JSON-LD name and release version must match the product"); } + if ("codeRepository" in structuredData) { + failures.push("JSON-LD codeRepository is not a SoftwareApplication property; use sameAs"); + } + if ("aggregateRating" in structuredData || "review" in structuredData) { + failures.push("JSON-LD must not carry ratings or reviews; there are none to show"); + } + const sameAs = Array.isArray(structuredData.sameAs) ? structuredData.sameAs : []; + for (const expected of [ + "https://github.com/abooodbah/leanrows", + "https://apps.microsoft.com/detail/9NMV8GKJXSN0", + "https://community.chocolatey.org/packages/leanrows", + ]) { + if (!sameAs.includes(expected)) failures.push(`JSON-LD sameAs must include ${expected}`); + } + if (structuredData.screenshot !== "https://abooodbah.github.io/leanrows/assets/leanrows-20m-rows.webp") { + failures.push("JSON-LD screenshot must be the 20 million row capture shown on the page"); + } if (structuredData.downloadUrl !== "https://github.com/abooodbah/leanrows/releases/latest") { failures.push("JSON-LD downloadUrl must use the latest GitHub release"); } @@ -251,6 +289,39 @@ try { const sitemap = await readFile(resolve(siteRoot, "sitemap.xml"), "utf8"); requireMatch(sitemap, /\d{4}-\d{2}-\d{2}<\/lastmod>/, "sitemap.xml must give a lastmod date"); +requireMatch( + sitemap, + /https:\/\/abooodbah\.github\.io\/leanrows\/open-csv-too-large-for-excel\/<\/loc>/, + "sitemap.xml must list the open-csv-too-large-for-excel task page", +); + +// The task page is plain HTML beside index.html; check its own basics and local references. +const taskDir = resolve(siteRoot, "open-csv-too-large-for-excel"); +const taskHtml = await readFile(resolve(taskDir, "index.html"), "utf8").catch(() => ""); +requireMatch(taskHtml, /^/i, "the task page must start with an HTML5 doctype"); +requireMatch( + taskHtml, + //, + "the task page must declare its canonical URL", +); +requireMatch(taskHtml, / Date: Sat, 7 Nov 2026 23:02:59 -0600 Subject: [PATCH 3/4] README: keyword-first lead, badges, winget command, exe size - lead names the task, the measured run and .xlsx support - badge line: winget, release, license, downloads - links the releases page and its Atom feed - winget install abooodbah.LeanRows first in Install - executable size 1,024,512 bytes (v0.5.1), matching the site - links the new task page and the 0.5.1 release notes --- README.md | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 4e9cba9..bf438e5 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,22 @@ # LeanRows: a free large CSV viewer for Windows -**Open a 1.5 GB CSV with 20 million rows using 18 MB of RAM. No installer, no -runtime, no admin rights.** +**Open CSV files too big for Excel. A 1.5 GB CSV with 20 million rows opens +using 18 MB of RAM. Also TSV, JSONL, logs and Excel `.xlsx` workbooks (read-only, +one sheet at a time). No installer, no runtime, no admin rights.** -[Website](https://abooodbah.github.io/leanrows/) · [Microsoft Store](https://apps.microsoft.com/detail/9NMV8GKJXSN0) · [All Lean apps](https://abooodbah.github.io/) +[Website](https://abooodbah.github.io/leanrows/) · [Microsoft Store](https://apps.microsoft.com/detail/9NMV8GKJXSN0) · [Releases](https://github.com/abooodbah/leanrows/releases) ([feed](https://github.com/abooodbah/leanrows/releases.atom)) · [All Lean apps](https://abooodbah.github.io/) + +[![winget](https://img.shields.io/winget/v/abooodbah.LeanRows)](https://github.com/microsoft/winget-pkgs/tree/master/manifests/a/abooodbah/LeanRows) [![GitHub release](https://img.shields.io/github/v/release/abooodbah/leanrows)](https://github.com/abooodbah/leanrows/releases/latest) [![License: MIT](https://img.shields.io/github/license/abooodbah/leanrows)](LICENSE) [![Downloads](https://img.shields.io/github/downloads/abooodbah/leanrows/total)](https://github.com/abooodbah/leanrows/releases) ![LeanRows with a 20 million row CSV open](docs/images/leanrows-20m-rows.png) *20,000,001 rows, 1,532,454,643 bytes, fully indexed. Peak working set: 18.4 MB.* Excel stops at about 1.05 million rows. Most tools that go further are paid, need -an installer, or live in a terminal. LeanRows is a single 1,025 KB executable you -can copy onto a locked-down work machine and run. +an installer, or live in a terminal. LeanRows is a single executable (1,024,512 +bytes in v0.5.1) you can copy onto a locked-down work machine and run. For the +other options, see +[how to open a CSV file that is too large for Excel](https://abooodbah.github.io/leanrows/open-csv-too-large-for-excel/). It is strictly read-only, so it cannot alter the file it is inspecting. There is no telemetry and no network access of any kind. @@ -25,6 +30,16 @@ theme and zoom settings, under `HKCU\Software\LeanRows`, and a scratch folder fo search results, under `%LOCALAPPDATA%\LeanRows`. Column sorting also keeps temporary sort data there. +### winget + +LeanRows is in the winget community repository. winget installs the portable +ZIP from the GitHub Release after checking its SHA-256 and adds a `leanrows` +command: + +```powershell +winget install abooodbah.LeanRows +``` + ### Microsoft Store Download from the Microsoft Store @@ -320,6 +335,7 @@ cargo +1.97.1 clippy --workspace --all-targets --locked -- -D warnings - [Architecture](docs/ARCHITECTURE.md) - [Acceptance and assurance](docs/ACCEPTANCE.md) - [Validation status](docs/VALIDATION_STATUS.md) +- [LeanRows 0.5.1 release notes](docs/releases/v0.5.1.md) - [LeanRows 0.5.0 release notes](docs/releases/v0.5.0.md) - [LeanRows 0.4.0 release notes](docs/releases/v0.4.0.md) - [LeanRows 0.3.0 release notes](docs/releases/v0.3.0.md) From 24f7fd68a72a3c85c56c885b68f73bce254cebc0 Mon Sep 17 00:00:00 2001 From: Abdulfatah Bahbouh <60443686+abooodbah@users.noreply.github.com> Date: Sat, 7 Nov 2026 23:04:09 -0600 Subject: [PATCH 4/4] Site: keep html-validate errors at the main-branch count The task page uses an uppercase DOCTYPE and the new winget block drops its aria-label, so the change adds no html-validate findings. --- site/index.html | 2 +- site/open-csv-too-large-for-excel/index.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/site/index.html b/site/index.html index 55c2f68..0aa87c8 100644 --- a/site/index.html +++ b/site/index.html @@ -437,7 +437,7 @@

The Windows build is intentionally unsigned.

the portable ZIP from the GitHub Release after checking its SHA-256 and adds a leanrows command.

-
winget install abooodbah.LeanRows
+
winget install abooodbah.LeanRows

To avoid the warning, install LeanRows from the Microsoft Store diff --git a/site/open-csv-too-large-for-excel/index.html b/site/open-csv-too-large-for-excel/index.html index f582a89..ee4f971 100644 --- a/site/open-csv-too-large-for-excel/index.html +++ b/site/open-csv-too-large-for-excel/index.html @@ -1,4 +1,4 @@ - +