Hi Community,
I am running into a conundrum.
I made a button that turns a database into JSON structure and saves it in a canvas cell.
Everytime I run the button, I consistently get the error:
“Attempted to make a modification that is too large. Reduce to proceed.”
BUT, as you can see in the GIF, when I access the button to see “what’s wrong”, the preview result (of the button action itself) give me the entire thing I want, without blinking an eye.
Out of curiosity, the string is around 52kb in size.
I don’t know if that’s related to a problem already mentioned here concerning cross-doc.
Nonetheless, I am reaching out for ideas. It doesn’t seem that complicated, but somehow it is.
There is a limit on the length of the row, which is about 70 KB. This is for all cell storage collectively. The reason for this limit is how addresses work in cell storage format codabuf. IIRC, formulas are not included because their values are calculated in memory, not stored. Canvas columns are also excluded because they are technically pages whose content lives separately, not in cell data.
Also, when you ModifyRows(), you set the value onto the cell, which stores it as cell data — even if the column type is Canvas! That’s why setting it onto JSON Raw doesn’t work, as it doesn’t actually create a page there. (P.S. although wait, this used to work for me under some circumstances, i.e. when the canvas was already initiated )
Unrelated: your JSON doesn’t look valid, there are trailing commas in the end that mustn’t be there. It’s better to not just concatenate things but rather use a mix of lists and Object() formulas to create a JSON
Thank you Paul for your wisdom.
Is there another way I can store such big strings?
Is “chunking” a good option in this case? In the end, it is just a list of objects with the same structure and properties. I don’t mind if I had to figure out a “pagination” system to store those items, but I’d rather save them all together in one “payload”.
Unrelated: It’s ulgy, I know, but I attached a RegexpReplace to deal with the trailling commas and it just works.
Yeah, you could split it down. You could also try utilizing page storage (i.e. a canvas value) for that somehow, but I’m not sure yet if that’s possible. Would need to test. I sometimes run into this limitation myself when I generate SVG+HTML invoices
Does anyone have any solutions to this?
I have a big Coda doc of Events an attendees. On the Attendees table I have an SVG calculating a timeline diagram. For Attendees who have gone to a lot of events I am getting the same error
I could technically put a formula on the SVG Timeline Diagrams Column but it was refreshing automatically all the time and causing slow downs. I thought a button that stores the diagram SVG was better but now I am worried I am going to max out the 70kb per line.
Worst case scenario is almost maxing out a row with this diagram then trying to add data later and failing to update the row with important changes.
Any ideas for how to work with this? E.g.
A way to force the canvas column type to behave normally (like a mini page of its own)
A way to put a formula on the column but stop it from updating unless that row is updated