Firstly, If you're creating a long list of attributes where players fill in name and value, you might be better served by looking into repeating sections. The sheet worker needed for them would be very simple, and you only need create the HTML for one set of attributes not all 56 or 57 of them. But assuming you aren't using a repeating section, and we need to build a sheet worker for each linked set of attributes: Firstly, I assume you haven't tested the sheet workers you have there? Because the syntax for them is wrong, and won't work as listed. Here's what one of them should look like: on ( "change:skillattr56_name change:skillattr56_total" , function () { getAttrs ([ "skillattr56_name" , "skillattr56_total" ], function ( value ) { setAttrs ({ skillattr_name56 : value . skillattr56_name , skillattr_value56 : value . skillattr56_total }); }); }); Seeing that makes me wonder what exactly you are doing - it looks like you are just copying the attributes from one place to another, and I'm wondering if you really need to do this. I'd like to see the HTML for this section of the sheet , because there is probably a better way to do this. But if this is really what you need, the most efficient way will be to use eventInfo to identify which attribute triggered, and update its corresponding value. Here's a quick-and-dirty method, with no error checking. const skillattrs = [ 'skillattr56' , 'skillattr57' ]; const skillattrsArray = skillattrs . reduce (( arr , item ) => [... arr , ` ${ item } _name` , ` ${ item } _total` ], []); const skillattrsChanges = skillattrsArray . reduce (( changes , item ) => ` ${ changes ? ` ${ changes } ` : '' } change: ${ item } ` , '' ); on ( skillattrsChanges , function ( eventInfo ) { getAttrs ( skillattrsArray , function ( value ) { const attname = eventInfo . sourceAttribute ; const attvalue = eventInfo . newValue ; const parts = attname . split ( '_' ); const num = parts [ 0 ]. replace ( 'skillattr' , '' ); const which = parts [ 1 ] === 'total' ? 'value' : 'name' ; setAttrs ({ [ `skillattr_ ${ which }${ num } ` ]: attvalue }); }); }); If you haven't supplied the actual attribute names, this won't really work for you. But if those are your actual attributes, you just need to change this part: const skillattrs = ['skillattr56', 'skillattr57']; and add in all the attribute bases you need. Again though, I suggest posting the HTML for your attributes, and describing what you're actually trying to achieve because there may be a much simpler or more appropriate way to do what you need.