If possibility #2 isnt changing the values or type, it would be simple enough, and you don't need a version script (especially since the attribute value can be changed again, and a new text value might be entered). Just create a sheet worker to run on sheet:opened and attribute change, check if its a valid number or not, set a hidden error attribute to 0 or 1, and use CSS to check that value and style the original input to show a warning value. error checking: Then in your sheet workers where you actually use the attribute value, have your number check to see if the worker can proceed (parseInt, Number(), whatever), and end it if not. Practically speaking, #3 is the same as #2, except you dont do the first paragraph. You still need to do the error checking paragraph. For version #4, do what I earlier suggested with an addition: 1) create a second attribute, which is number type, and hide or remove the first 2) create an error attribute, and have a worker that converts the original text attribute to a number attribute. If the first value isnt valid as a number, set the error attribute to 1, otherwise set it to 0. 3) Have a CSS rule, where if error is 0, it hides the old attribute and shows the new one, and if 1, it hides the new attribute and shows the original text input and prompts the user to change its value to a legal value. (And when they do, that value is captured and passed over to the new attribute, the error is set to 0, and that attribute is hidden never to be shown again. In your sheet worker where you actually use the attribute, you still need to error check if the value is a number- but you'd probably be doing that anyway.