This isn’t a perfect solution, but I think it is a reasonable enough compromise. Here we use Data Validation coupled with an OnChange event for the sheet. Then, since obviously all this cannot be in a CSV file, we have an export option to CSV so that the original file is always kept as an ODS. The macro also models selecting sheets by some part of the sheet name. This can easily just be removed if not needed.
Really, it could all be done in OnChange, I suspect, but this seems tidy enough. Notice that the Truncate() macro has to be assigned under Data Validity. That assignment will, though, get copied to another cell along with the rest of the Data Validity just by doing format painting from a cell that is already setup.
Naturally, instead of having a push button for export that might cover some of your cell entries, you would launch the export macro by customizing your Toolbar or assigning it to a keystroke.
CharacterLimitCSV.ods (15.6 KB)
[Edit: Remove a line of zombie code, etc.]