Show HN: React SpreadSheet – Google Sheets-like performance
rowsncolumns.app
rowsncolumns.app
I am the developer behind SpreadSheet Grid. It's a React Library for users who want to develop an Excel-like DataGrid in their application.
The reality is it's very hard to get users off Microsoft Excel, and especially during these times, it's good to have an online Excel viewer and editor in your, private and secure.
Demo - https://rowsncolumns.app/demo
1. The library is built using React, and due to its declarative nature, it is very easy to customise and integrate it within your app
2. It is fast. Canvas is used for rendering.
3. Supports Autofilters, Frozen rows, columns, data validation, conditional formatting etc
4. Custom cell renderer
5. Formula support is coming soon with web worker support
6. Grouping Columns and Rows is coming soon
We support 2 licenses. Non-commercial use (FREE) and Commercial use (USD 199 with 1 year support)
Would love to answer any questions you have :)
:)
Does that mean accessibility tools are out the window? How much of it is rendered to canvas? When i double clicked a cell, and right clicked the text, the normal browser menu appeared.
I noticed I get both context menus, yours and the browsers when I right click the font size.
We are planning to use Aria Live Region to support a11y
https://developer.mozilla.org/en-US/docs/Web/Accessibility/A...
Cool idea, though, once I could see it.
Thanks for letting me know and sorry u were not able to access the site.
Mind educating me on this? I am new to this. Any examples and what they use?
I do like the feel of this rowsncolumns.app
Copying columns between Excel and rowsncolumns.app works nicely (minus formatting)
Right now, i strip out formatting during paste
https://github.com/rowsncolumns/grid/blob/master/packages/gr...
Hope to get to it soon
Like, I just did a test, and it takes, more than 5 seconds from a "refresh" to all the UI elements of gdocs showing up, versus less than 3 seconds from a fresh start of libreoffice, and less than 2 seconds if I'm having the LO daemon running in the background. And LO is much more featureful, & my install has a few additional plug-ins, some of them using freaking java. It also takes 4-5 seconds to make an export of that doc from docx to odt while it's pretty instantaneous with LO.
And, before anyone comments on my specs, I have gigabit fiber internet, an HEDT i7, 64 gigs of RAM and a GTX 1080. Everything should be instant on these specs.
LO feels like it's from the 90's - the UI feels outdated and hard to use. It's probably great as a regular user, but I have probably only three 10 minute sessions per year of use. At least half of that time is spent hunting for some feature that I know where to locate in Google Sheets or Excel.
I use it just because it's default on my Ubuntu machine for some file types, and would use it more if I found it more effective.
<shrug> what is a team to do ? :-)
Also come hang out on the #libreoffice IRC channel if you need help.
To cater for users like me, you need to do user studies (watch a user try to complete a task, and time how long it takes them). Then adjust the software to minimize that time.
There are a lot of users like me, but each user isn't super valuable - we're the ones who would fire up LO Writer, type "Party Next Tuesday", set the font size big, hit print, then close without saving. Then don't open LO again for a few weeks.
You may decide I'm not the type of user LO is designed for, and that's a perfectly valid choice, especially for an opensource project with limited resources.
We're also fighting the usual battles - people for whom the "old" way is perfect and they hate change - people for whom anything other than 100% the same as Microsoft is wrong
But feel free to log issues in our bugtracker if you have concrete suggestions.
Historically, their performance has been downright awful (especially in non-Chrome browsers).
How many rows do you usually manipulate at the same time?
If you have highly interactive data in cells, (eg: svg graphs), scroll performance can be improved by enabling `snap`. With this only one row/column will scroll at a time.
Maybe not performance, but responsiveness ? The UI was lagging.
It was in Firefox, a few years ago, and I never went back to it.
MS Office 2010 is much snappier.
You get to feel a certain kind of pride when your bootstrapped business product has better performance than the multi billion dollar company product.
Of course, nowhere near the amount of features G sheets has.
Still lots of optimisations to be done, but i will never sacrifice anything for a smooth scrolling experience :)
I doubt a lot of people edit excel files on mobile. I maybe wrong.
In those use cases you just want to be able to click a link to the spreadsheet and quickly fill your information, regardless of what device you're using.
[1] https://stackoverflow.com/questions/2402953/javascript-data-...
1. Scroll performance is much better than HTML
2. Drawing on canvas is cheap compared to modifying DOM or attributes
3. Streaming updates are much smoother in canvas as drawing is quick. I had used Canvas as an interface for high-frequency trading
4. Canvas is easy to work with. And with Konva - https://github.com/konvajs/react-konva/, any React developer will find it at home
5. No Browser bugs :)
6. Performance tuning is quicker with Canvas
7. In the future, we can decide to use WebGL (using PixiJS)
Some problems with canvas IMO
1. There is no relative positioning :(. It sounds silly, but coming from HTML, any element can be positioned relative to its parent.
2. Styling/Pixel ratio/Stroke - can be hard to figure out first. And the 0.5px crisp stroke workaround on DPR 1 devices. Took me a long time to figure out
There are pros and cons for both, I guess it all comes down to your personal preference and picking the right tools for the task in hand.
You can see a demo here of One Million Cells - https://www.datagridxl.com/demos/one-million-cells.
Granted, it does not have as many features as the React grid, but it's super fast & super reliable and comes with decent touch support.
When I type =SUM( in cell A1 and hit arrow right (before hitting enter or tab), I expect the address of the formula to change to =SUM(A2
F2 should work for editing formulas instead of actually entering "F2" into the cell's content
Many other little "expected behaviors" need to be implemented for this to be a frustration-free experience. You should get a team of experienced Excel users involved so you can see how they work / or they can tell you how they work
Multi-Selection mode is a WIP
So F2 once to switch to editing a cell, then F2 again to switch between edit and enter, then start typing a formula and click around
Am I doing something wrong?
Edit: Okay, I can use formulas in the demo spreadsheet on the Formula documentation page, but not the demo linked from the main page. I'm not sure how to reference other cells though.
In the demo you see, I am using hot-formula-parser to parse formula during render. This won't scale for large applications, cos any parent render will re-render the grid and trigger a recalc
Am working on adding a Directed Acyclic Graph to manage cell dependencies, so that Grid knows which cells needs to be re-rendered.
Proper keybindings for copy and paste, undo, redo, column insert as well as image support inside cells. Get in touch with me via my bio if you can implement.
Keybindings can be added easily. I disabled global key handler for copy/paste/undo/redo for now, but that can be enabled.
Images inside cells are pretty straightforward. I will update the docs.
Please signup for our newsletter and I will keep you updated on formula support
https://rmdort.typeform.com/to/H5TjLoun
I will keep u updated too. Saved your bio :)
What is the timing for adding formulas / calculations?
Do note that this wont scale for larger applications. You would not want to calculate formulas everytime during render.
You could signup for our newsletter and I will keep you updated
Imagine populating the table using a graphql query to the backend for example. Not sure if that would make sense as a formula by itself but I can see that there are many nice possibilities here.
Some questions:
1. Is commercial pricing (USD 199) per developer or per application?
2. Is there a different license needed for SaaS products? handsontable needs something like that.
3. `fast-formula-parser` looks great. How do you plan to handle writing complex formulas on the front-end?
1. Commercial pricing is per developer. Otherwise it can be misused
2. No
3. Formula parsing module that I am building is capable of running in a Web Worker or in the same UI thread. For lag-free calculations, Web Worker is preferred.
Basically Calculations are async. The calc engine can also reside in your own server (future :P)
`fast-formula-parser` does support adding custom formulas, So i think you will have control over it.
1. It can be a used to build Apps that render multiple tables in a Sheet. Or a CryptoCurrency trading app where numbers tick at high frequency.
2. It can be used to edit and download Excel files
3. Quick slice/dice of csv/excel data for DataScience projects
4. Formula can be used to run Custom calculations or to fetch data from a third-party server and display them on a Sheet.
Most corporates do not allow Google Suites in the workplace due to privacy concerns. The only alternative is Microsoft Excel, which are not shareable. (unless u send them as attachment :P)
2 or more characters, the value is set like expected
- select all (ctrl A) and change font, it freeze for a few seconds
1. Fixed
2. Thats because React State of all the cells are updated. One way is to reduce the number of columns. Currently the grid size is 1000 x 1000, which means 1 million objects needs to change.
Need to think of a proper optimization technique.
Some kind of a Layout Component that has top/left/right/bottom bounds, and access to sheet data
And congrats on your launch too. Wish you all the best.
Pgup/Pgdn, ctrl-down etc just inputs the keycode on my machine.
I did not add this options to the Context Menu yet.