… not sure how I missed .getDisplayValues() and this change will make this a lot cleaner. With this I think it makes sense to switch to just using SpreadsheetApp to limit the scopes.

Thanks also for highlighting how to make placeholders case-insensitive. Personally, I prefer having them case sensitive but other might want to make this mod.

Merging for doc is also a common use case I see so thanks for sharing the link to your post :)