[HN Gopher] Display any CSV file as a searchable, filterable, pr...
___________________________________________________________________
Display any CSV file as a searchable, filterable, pretty HTML table
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!
Author : indigodaddy
Score : 249 points
Date : 2025-05-22 00:31 UTC (22 hours ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| promiseofbeans wrote:
| 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)
| brothrock wrote:
| Great question. If it can't skip lines, I'm out.
| nxpnsv wrote:
| or like contribute...
| mokanfar wrote:
| 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 wrote:
| 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.
| hk1337 wrote:
| I was thinking of it as competition for GitHub's CSV reader
| in repositories.
| indigodaddy wrote:
| 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!
| neilv wrote:
| 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>";
| rafaelgoncalves wrote:
| the creator even acknowledged the risk in the sample... but i
| do not understand why not create a more secure sample first
| time? since people will absolutely copy to test.
| indigodaddy wrote:
| 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.
| gnabgib wrote:
| [flagged]
| indigodaddy wrote:
| Eh? I'm not Derek.
| dang wrote:
| Just in case it's unclear: when we see someone submitting
| their own work, we often put Show HN in the title. But
| occasionally we misidentify the submitter as the author and
| do this incorrectly. That's what happened here. It's fixed
| now!
| nurettin wrote:
| 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.
| tomhow wrote:
| OK, that was my screwup, I'm sorry.
|
| I saw your comment and didn't quite clock that you're not the
| author. Sorry about that. We've reversed the changes to make it
| a normal post again.
| indigodaddy wrote:
| As nurettin said, I think I (unintentionally) made it too
| easy to connote that I might have been the author. I should
| have been more clear about it.
| pphysch wrote:
| I was wondering why this wasn't expressed as a webcomponent, then
| saw it's a decade old. Nice.
| vasvir wrote:
| Ha I didn't notice the date but I did notice that was based on
| datatables.net a very cool library.
| strunz wrote:
| Love this idea, wish I could pipe a CSV right to the tool though!
| stevenpetryk wrote:
| Could be easy enough to make a CLI tool that opens a browser to
| an HTML file in /tmp
| sn0n wrote:
| This is amazing!! I finally have an excuse to use spreadsheets
| again! I've been avoiding them for years, Legitimately.
| dddw wrote:
| What did you use instead?
| 65 wrote:
| 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 wrote:
| Perhaps setting paging to true would improve the handling of a
| very large CSV
| joseangel_sc wrote:
| i'm gonna test this on a 52k rows document, very curious if it
| can handle that
| indigodaddy wrote:
| Perhaps turn paging on in the config for a very large CSV?
| hermitcrab wrote:
| 52k rows is a large CSV? BWAHAHAHA. I guess it is all
| relative.
| 34f34f3 wrote:
| 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!
| bryanhogan wrote:
| But does this include options for sorting and filtering?
| nathell wrote:
| Alternatively, use visidata (https://www.visidata.org/) in the
| terminal. Supports xls/xlsx too! One of my favourite tools for
| terminal data exploration (along with jq, fx, and jet).
| ThrowawayTestr wrote:
| Does that do the Excel thing where it crushes all the numbers
| to exponents?
| 6510 wrote:
| I wrote this long ago. Looking at it I'm really a master
| spaghetti coder.
|
| https://jsfiddle.net/ypfr98su/5/
| Propelloni wrote:
| Spaghetti code is underrated.
| magesh_magi1 wrote:
| Ha, I'm working on a similar utility with some extra features
| also enabling WASM that might help in case of larger files.
| szszrk wrote:
| 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.
| rahimnathwani wrote:
| I don't use Windows as my daily driver, so I had no idea
| Import-Csv existed until last week, when I pasted a shell
| command that I had run on my Mac, and asked it to write
| something that would work for Windows (for my colleague).
|
| I hadn't understood how different Powershell is, compared with
| cmd.exe of old.
| razakel wrote:
| They should really have called it PowerScript. It's the full
| blown .NET ecosystem.
| bblb wrote:
| PowerShell is the first thing I install on my Linux
| workstation/jump host because of those built-in
| Import/Export/Convertto goodies. Import-Excel module works on
| Linux too. Too bad the Invoke-WebRequest uses basic parsing
| only, it used to parse the actual DOM with JS and all, but I
| guess that was a security issue.
| majkinetor wrote:
| Nah, that required IE which isn't available on Linux.
| porridgeraisin wrote:
| Does it write UTF16 on linux too? That's my biggest gripe
| with powershell redirections and Out-File's on windows.
| MstWntd wrote:
| install tabview?..
| jayd16 wrote:
| Pwsh is actually pretty good.
|
| My hottest of takes...Powershell is the easiest way to write
| consistent scripts across the big three OSes.
| tailspin2019 wrote:
| I have a simultaneous respect for the _power_ and capabilities
| of PowerShell while also for some reason harbouring a very
| strong loathing of it. I just viscerally dislike it. Maybe it's
| the syntax... or perhaps just some latent decades-old Windows
| admin trauma...
| bryanhogan wrote:
| I was actually looking for something like this! It seems to be a
| bit old though, does it work well? Also I can't seem to filter
| columns?
|
| Are there other tools like it?
|
| Got a collection of larger CSV files that I wanted to include on
| a Astro Starlight project of mine.
| waltbosz wrote:
| > I'm just a sysadmin but I love piecing together stuff like
| this.
|
| I'm a developer and piecing stuff together is my favorite part of
| the job. The joy is in the design, the actual coding is just a
| means to an end.
|
| I've written similar browser tools for handing tabular data. One
| neat thing I've learned is if you copy and paste from Excel into
| an html `textarea`, you get the data as tab delimited text. Add a
| `paste` event handler to the `textarea` then parse the data in
| code.
| datax2 wrote:
| Not for nothing, you could do this with Streamlit and 30 seconds
| of vibe coding.
|
| you can also use Kanaries if you are looking for some more
| detailed "Tableau" like analytics platform.
| indigodaddy wrote:
| Why would you want to vibe code a whole python server setup
| when someone already made this that you can just plug and play?
| Id understand if you need a lot of different features, but to
| me this is neat and ticks a lot of boxes.
| hk1337 wrote:
| I kind of want to fork it and work out the jQuery dependency.
|
| *EDIT* Would probably be easier to start a new one and maybe use
| PapaParse to parse the CSV.
| catapart wrote:
| My first thought too. Though, I'll probably write it as a
| custom element so that I can pass a csv path to it via an
| attribute. Seems like a really handy thing to have, and I'm
| already working on a similar type of thing for pdfs. Definitely
| in the 'everything is a nail' phase of building a library of
| custom elements.
| hk1337 wrote:
| I was thinking just a table element with data attributes and
| maybe a class name.
| catapart wrote:
| For sure! I was just thinking of wrapping that table with
| an element so I don't have to call "load" or "init" or
| whatever from a separate script. I'm a big fan of html that
| works well and tables are pretty awesome for tabular data.
| indigodaddy wrote:
| I think this fork actually uses papaparse. I actually thought
| it was slightly less attractive though and also it did not have
| the download csv capability:
|
| https://github.com/pavelsr/csv-to-tablesorter
| mattsouth wrote:
| Nice. Its interesting to me that searching and filtering isnt
| something that http://csvbase.com has.
| indigodaddy wrote:
| I looked at that too for my use case. It was super cool, but I
| needed something to utilize a CSV that I did not have to
| initially upload through webui, and also wanted it to be
| downloadable, so this hit those checkboxes for me.
| RUnconcerned wrote:
| This is neat. I had a recent need to do something similar, but
| ended up using Grist CSV Viewer[1], which I think is a bit more
| feature complete. I had ChatGPT create an HTML file that would
| let me paste the CSV instead of loading a specific file and it
| worked pretty well while being more convenient than loading the
| CSV into Google Sheets or whatever.
|
| [1] https://www.getgrist.com/csv-viewer/
| hilti wrote:
| Thank you for sharing this! I'm using pivottable.js but I
| noticed that it's sometimes hard to understand by my
| colleagues. Will Grist definitely give try.
| CommenterPerson wrote:
| Nice work! Immediately usable.
| nashashmi wrote:
| Custom formatting should be called js column wrapper.
|
| I thought custom formatting would be changing colors and widths
| text wrappings.
|
| And maybe add a head wrapper?
| 1vuio0pswjnm7 wrote:
| I use sqlite3 for this task because I use a text-only browser to
| read HTML. It has no Javascript engine. The HTML tables prooduced
| by sqlite3 do not require Javascript.
| davidcollantes wrote:
| If the author is here, I would love a JSON to pretty HTML table
| too (with all the features this one has)!
| cbeach wrote:
| Datasette (open source project by @simonw, 10K stars on GitHub)
| excels at this: https://datasette.io/
|
| Plugins like datasette-extract (AI powered data extraction) are
| amazing: https://www.youtube.com/watch?v=g3NtJatmQR0
| indigodaddy wrote:
| Datasette isn't really comparable to this. This is just about a
| simple, clean, webview of a CSV. Datasette isn't exactly that,
| and for sure not out of the box like that nor as simple to plug
| and play for this exact use case. Datasette is obviously
| awesome and very powerful, it's just a different tool and don't
| think it overlaps much with most use cases of this particular
| project.
| ederderek wrote:
| hey all - I'm the creator of this tool. very cool to see a
| project I wrote 10 years ago get some recognition. Sorry about
| the jQuery. Pull Requests welcome!
___________________________________________________________________
(page generated 2025-05-22 23:01 UTC)