Show HN: Display any CSV file as a searchable, filterable, pretty HTML table

120 indigodaddy 21 5/22/2025, 12:31:01 AM github.com ↗
I combined this with a simple API to update a CSV file using Deno/deno-csv library, allowing an Ansible job to easily update a CSV file via the API with Ansible URI module, and then have that same CSV file viewable/downloadable in a simple and easy/dashboardy way (with CSV-to-html-table). Copilot created the Deno/deno-csv CSV API code and then with a little back and forth I added static website functionality (to serve the CSV table), and I had a /view and a /update route. I'm just a sysadmin but I love piecing together stuff like this. Thanks Derek!

Comments (21)

indigodaddy · 4h ago
Dang, I'm not the author, so do not think this should be a show HN, at least not with me remaining as the submitter. I did not submit it as such, and then later an admin edited it to a show HN, and put my comment (that I added for context later for how I made use of the tool) as the description. That blurb currently as the description should probably be returned to a plain comment. All I did was stumble upon Derek's repo when I was looking for something to stitch together for a particular use-case.
nurettin · 1h ago
The confusion arises from your paragraph explaining what you made, then linking to a repo that contains the component you used. Why don't you show the thing that you made? An Ansible job sounds interesting.
szszrk · 25m ago
I know PowerShell is surrounded with polarized opinions, but that's one of the things it's amazing for. Import-Csv with Out-GridView gives nice results and it can be just a one-liner wrote from memory.

Just a reminder that it's possible and often built into our work environments, while we pretend it's not there.

magesh_magi1 · 28m ago
Ha, I'm working on a similar utility with some extra features also enabling WASM that might help in case of larger files.
34f34f3 · 1h ago
Alternatively, feed your spreadsheet file (CSV, XLS, whatever) to Google Sheets and then select File > Download > Web Page (.html) – especially when you have a ton of formatting (font, colors, borders, whatnot)... the result looks great!
strunz · 3h ago
Love this idea, wish I could pipe a CSV right to the tool though!
sn0n · 2h ago
This is amazing!! I finally have an excuse to use spreadsheets again! I've been avoiding them for years, Legitimately.
dddw · 1h ago
What did you use instead?
promiseofbeans · 4h ago
How does this handle CSV's with no headers, or data that's offset from the top? (e.g. a row for title and subtitle, before the table headers & data)
mokanfar · 4h ago
That is classified as an edge use-case. Realistically speaking I don't think the point of this hastily whipped up demo was to be a replacement for google sheets.
Bimos · 4h ago
Yeah but since it claims "any CSV file", and CSV files are widely known to be variate, I didn't expect it fails to work on edge use-cases.
brothrock · 4h ago
Great question. If it can’t skip lines, I’m out.
6510 · 1h ago
I wrote this long ago. Looking at it I'm really a master spaghetti coder.

https://jsfiddle.net/ypfr98su/5/

joseangel_sc · 2h ago
i’m gonna test this on a 52k rows document, very curious if it can handle that
indigodaddy · 2h ago
Perhaps turn paging on in the config for a very large CSV?
neilv · 4h ago
Obligatory suggestion to developers who use this: Don't copy&paste reuse that custom formatting code from the demo for arbitrary CSV, since the code inserts arbitrary strings into both HTML attribute value and CDATA contexts, without escaping special characters.

    return "<a href='" + link + "' target='_blank'>" + link + "</a>";
65 · 2h ago
Pretty cool. I'm wondering how large of a CSV you could feasibly load with this. I always have to manually open CSVs in text editors if they're too large for Excel, so if this is a better UI for it that can handle large files I will definitely use this.
indigodaddy · 2h ago
Perhaps setting paging to true would improve the handling of a very large CSV
pphysch · 4h ago
I was wondering why this wasn't expressed as a webcomponent, then saw it's a decade old. Nice.