Xlite: Query Excel and Open Document spreadsheets as SQLite virtual tables
github.com
github.com
An annoying thing about this extension-based style of file support is needing to create a new table for every new file if the schema is different. This is a limitation [2] of sqlite unfortunately. dsq doesn't work this way so it doesn't have that limit.
On the other hand, if you go this route you can more easily combine with other extensions. That's not really possible with dsq right now.
[0] https://github.com/multiprocessio/dsq
Is there a way to hook lower in the SQLite stack, and make it think that your DS is something it already understands?
What about a function that returns a view that it dynamically generates?
That forum post is a request I made to them to allow dynamic columns but they don't seem interested so far.
Still thinking and reading through sqlite source ...
You could give them all a unique name though. Like call "the importX family": import1, import2, import3, etc...
Still not ideal but at least possible.
Edit: Actually if you just transform the query to add the suffix then that's pretty reasonable a UX. This might give me a way forward to try out TVFs!
[1] https://www.infoq.com/news/2015/05/cling-cpp-interpreter/
Some kind of fork of DirtyLittleSQL looks like it is the solution!
Can you expand on this? How would people express the searches and filters? SQL? or some other way?
Assuming SQL, all the work's done for you already! :D A single static page that serves sqlite3-in-wasm to the client browser, with, I donno, A text box to enter SQL queries and a file picker.
Querying Excel spreadsheets with SQL, however, is something that can already be done with no additional tools, no custom plugins, just good old fashioned command line knowledge.
(first, download superstore.xls, some test data I found [0])
loxias@host:~$ sqlite3 -csv :memory: -cmd ".import '| ssconvert -T Gnumeric_stf:stf_csv superstore.xls fd://1' orders" -cmd '.mode column' 'SELECT State, AVG(Profit), COUNT(*) FROM orders GROUP BY State ORDER BY AVG(Profit) DESC LIMIT 5'
State AVG(Profit) COUNT(*)
------------ ---------------- --------
Vermont 204.088936363636 11
Rhode Island 130.100523214286 56
Indiana 123.375411409396 149
Montana 122.2219 15
Minnesota 121.608847191011 89
loxias@host:~$ sqlite3 -csv :memory: -cmd ".import '| ssconvert -T Gnumeric_stf:stf_csv superstore.xls fd://1' orders" -cmd '.mode column' 'SELECT State, AVG(Profit), COUNT(*) FROM orders GROUP BY State ORDER BY AVG(Profit) ASC LIMIT 5'
State AVG(Profit) COUNT(*)
-------------- ----------------- --------
Ohio -36.1863040511728 469
Colorado -35.8673510989011 182
North Carolina -30.0839847389558 249
Tennessee -29.1895825136612 183
Pennsylvania -26.5075984667803 587
And there you have the 5 top and 5 worst performing states by profit margin.Look ma! No code! No temp files even! :D
[0] https://community.tableau.com/s/question/0D54T00000CWeX8SAL/...*
> You just went from requiring one bit of code to requiring another
Not in the slightest. I went from requiring customized code, including a whole build framework for a specific programming language to requiring only the tools one can assume are installed, and no code.
For the task of "querying spreadsheets with sqlite", there are only two programs you can assume the user already has: Sqlite, and spreadsheet software. :) I think that's a safe and reasonable assumption, no?
ssconvert is part of Gnumeric. One can do the same thing with libreoffice but I didn't know the syntax offhand. [0]
[0] loxias@host:~$ libreoffice --convert-to csv superstore.xls[1]: https://csvkit.readthedocs.io/en/latest/tutorial/1_getting_s...
So much potential and efficiency lost. as in likely hundreds of billions of dollars.
Practically every single office in the world uses office suite products. There's probably a 10s to 100s of billions of person-hours or more of collective work invested in office suite documents and spreadsheets, and getting at it programmatically is not easy.
Not easy is a bad term.
Intentionally walled, obfuscated, undocumented, and constantly changed to maintain monopolies in core Office software as well as other "back office" products.
And it's still willingly accepted by virtually all corporations and organizations worldwide.
https://gist.github.com/mojavelinux/8856117
I use this as a "centralized parts repository" for big ol' maintenance manuals. Refresh from PDM/PLM/LSA/Whatever. Rebuild for new parts data.
Built on TextQL, natch
I would assume SQLite has some optimisations for native tables (rather than reading the data from another virtual table backed file)?
It is more convenient if you do this regularly for your job.
Please check it out: https://superintendent.app
There’s a sample file at the end of that thread.
How much organizational (not technical, we'll get to that) control/authority/input/stakeholder role do you have on the source document templates?
Also, you might want to check out https://github.com/microsoft/advanced-formula-environment/
Yeah in the VisiData ticket I link to a post[1] with some code to handle hidden rows and columns in Pandas+openpyxl.
[1] https://towardsdatascience.com/how-to-load-excel-files-with-...