xlsx lens
JetBrains Marketplaceplugin 33721free viewer, Pro subscription
Install from the JetBrains Marketplacefree to read; the Pro trial runs 30 days
Somewhere past column ZZ the cells stop being empty. Rope first: the sheet streams once, and the first page is up while the rest is still on its way.
XLSX Lens opens an Excel workbook in the editor tab of IntelliJ IDEA and the other JetBrains IDEs, streamed, read-only until you turn Edit on. The first page renders while a 500,000-row sheet is still loading behind it. Every sheet is one click away, merged cells are rendered, a date cell is read by the date system the workbook declares, 1900 or 1904, and the built-in and the common custom number formats are applied. The workbook is neither locked nor recalculated. Pro writes a sheet out as CSV, JSONL, Markdown or Parquet and profiles its columns into a report. It also sorts and filters every row rather than the loaded page, diffs two workbooks sheet by sheet, shows the formulas grid-wide, and reloads the file when it changes on disk.
- opens
- .xlsx and .xlsm workbooks, the .xltx and .xltm templates and .xlam add-in workbooks, a .xlsm, .xltm or .xlam as data with its macros never read; no legacy .xls, and .csv is never claimed
- runs on
- IntelliJ IDEA, PyCharm, WebStorm, Rider, GoLand, Android Studio and every IntelliJ-based IDE from 2024.2 on
- store
- JetBrains Marketplace, plugin 33721
- newest version
- 1.7.0, published 2026-10-27
- pro
- a subscription with its own 30-day trial; the price is quoted below as the store shows it
Before a release ships we run it on IntelliJ IDEA Community 2024.2, IntelliJ IDEA Ultimate 2026.2 and Android Studio 2026.1.

free
- Any size: one streaming pass; the first page renders while a 500,000-row sheet is still loading, and memory stays flat
- Read-only by default: Edit is off on every open; while you browse, the workbook is never locked or recalculated, and nothing is written until you click Save (Pro)
- All sheets: every tab listed, hidden ones named as hidden, each with its size in rows and columns once read
- Fidelity: merged cells, cached formula values, the 1900 and 1904 date systems, builtin and common custom number formats, currency, accounting and fraction formats
- Find in sheet: a streaming search across every row over values, formatted text and formulas, with a live match count and next and previous jumps
- Cell inspector: the full value, the raw stored text, the formula and the format pattern of any cell, unclipped
- In-page sort, filter and copy: sort or filter the loaded page, copy a row as JSON or the page as TSV
- Named ranges: listed in the Info tab, name and reference as the workbook stores them
- Open Workbook: File | Open Workbook opens an .xlsx or .xlsm from anywhere on disk, attaching nothing to the project
- Named errors: an encrypted workbook, a legacy .xls or a mislabeled zip reports what it is, in the panel
- Themes: twelve looks for the grid; trying one is free for the open window
pro
- Saving edits: with Edit on, cells take a new value, a block pastes in, rows go on at the end; Review lists each change next to the value in the file, and Save (Pro) writes the workbook in place, the rest of it carried over unchanged
- Export: the sheet, the search matches or the current filtered view to CSV, JSONL, Markdown or Parquet; a column of dates goes out as dates and a column of numbers as numbers
- Profile report: rows and nulls for every column, ranges, histograms and an outlier count for the numeric ones, the largest gap in a timestamp column, a duplicate-row count and a correlation matrix, as HTML, Markdown or JSON
- Diff two workbooks: sheets matched by name, exact added, removed and changed row counts with drill-in, and the cells that differ marked
- Whole-sheet sort and multi-column filter: every row, not just the loaded page, in spreadsheet type order
- Column stats: kinds, min, max, sum, mean and distinct counts for any column
- Formula view: formulas grid-wide instead of values
- Watch mode: reload when the file changes on disk, on the sheet that was open
- Kept themes: a chosen look stays set from file to file
price, as the store shows it
The viewer is free and stays free. Pro is a subscription for this plugin: USD 2.90 a month or USD 29 a year for individual use. For organizations it is, per user, USD 5.80 a month or USD 58 a year.
where it stops
- No formula edits, no row deletes, no edits inside merged cells or protected sheets
- No formula recalculation: cached results are shown
- No legacy .xls
- No font and color fidelity: values and layout, not print styling

what's new
- 1.7.0published 2026-10-27
With 1.7.0, cells can be edited in XLSX Lens. Read-only stays the default; "Edit" in the toolbar turns it on, and the workbook is untouched until you click "Save… (Pro)". While Edit is on, a double-click or F2 opens a cell, Ctrl+V stages a block copied from a spreadsheet, "Add row" appends a row at the end of the sheet, and "Set column for visible rows…" puts one value on every row the loaded page shows. "Review" shows each change next to what the file holds now. The save writes the file in place: the IDE's Local History keeps the version before it, "Keep a copy of the file before saving" leaves a copy beside the workbook, and "Undo last save… (Pro)" takes the save back until the file is closed or reloaded. A formula cell, a cell inside a merged range and a protected sheet cannot be edited and say why; a cell that feeds a formula can, and Excel recomputes the formula when the workbook opens. Edit mode, "Review", paste, "Add row" and "Set column for visible rows…" are free; saving is Pro.
- 1.6.12published 2026-10-27
A date or time format with fractional seconds now renders as the date it is: a cell under yyyy-mm-dd hh:mm:ss.000 shows its milliseconds, where 1.6.11 showed the pattern text with the serial glued on. The built-in date formats numbered 27 to 36 and 50 to 58, the ones East Asian workbooks carry with no format element of their own, render as dates instead of serial numbers. The two-file sheet diff now pairs a sheet sorted another way with itself: a row that moved counts as the same row, and the rows after it are no longer marked as changed. An export started while a sheet is still loading says so and writes nothing; before, it wrote the rows read so far and reported the file complete. An export that fails or is cancelled leaves an existing file as it was: the file is written beside it first and moved into place only when complete. The 1.6.11 guard against a part that unpacks past its declared size now holds on the two parts the sheet pass streams and on every part the open reads whole. A problem report from the IDE's error dialog can go to the Marketplace, and only when you choose to send it.
- 1.6.11published 2026-10-17
A workbook built to unpack to gigabytes, a zip bomb, is refused at once with one line naming the part and both sizes; 1.6.10 could run the IDE out of memory opening it. A part read whole stops at 64 MB even when the zip entry lies about its size, and a sheet too large for the IDE's memory says so in the status line. A workbook whose XML breaks a line inside a sheet tag opens now, and so does one with a part saved in UTF-16; 1.6.10 refused both as "workbook has no sheets". A sheet name written as a numeric character reference past Unicode no longer stops the open, and an emoji written that way shows as the emoji. A damaged sheet says what is wrong in one line, "the workbook's XML ends early", "holds bytes that are not valid text" or "a part of the workbook does not unpack", where 1.6.10 showed the XML parser's own message. A file deleted or locked while its tab is open reads "the file is no longer there (deleted or moved)" or "no permission to read the file", not "corrupt zip". An Excel binary workbook (.xlsb) is named as one, with the way to view it (save it as .xlsx). When the temp folder cannot be written, picking a sheet says so in the status line. A sheet whose table sits under a title opens with its columns sized by the table, where the title sized column A at the 420 px cap and the first screen of a mailed report showed two columns. Copy row as JSON keeps a zero-padded number as the grid shows it: 2134 under the format 00000 copies as "02134", as 1.6.9 did; 1.6.10 copied 2134.
more
Pricing, invoices and licensing questions go to sales@twilightventures.dev; anything else about the product to support@twilightventures.dev.