Search code examples
javascriptgoogle-apps-scriptgoogle-sheetstriggersuppercase

How to uppercase a cell range, sheet except one single word


I found here,

How to uppercase a cell range even if user type or paste lowercase with no warning in Google Sheet

the following code which solved my problem that, with onEdit trigger to uppercase words only in a specific range & sheet, not within the entire spreadsheet:

function onEdit(e) {

  if (e.source.getActiveSheet().getName() === `Trade History`) {

    if ((e.range.columnStart >= 2 && e.range.columnEnd <= 3) && (e.range.rowStart >= 2 && e.range.rowEnd <= 1000)) {

      const values = e.range.getDisplayValues().map(i => i.map(item => String(item).toUpperCase()))

      e.range.setValues(values)

    }

  }

}

I need now one single word in that range not to be uppercased, like "Hello" - this word I need to be ignored by the onEdit uppercase code, every time I write that specific word in that range.

I have really no idea how to solve my problem.


Solution

  • Try this:

    function onEdit(e) {
      e.source.toast("Entry");
      if (e.range.getSheet().getName() == `Sheet0`) {
        const wd = "Hello";
        if (e.range.columnStart > 1 && e.range.columnEnd < 4 && e.range.rowStart > 1 && e.range.rowEnd < 1001) {
          e.source.toast("Gate1")
          const values = e.range.getDisplayValues().map(r => r.map(c => {
            let idx = c.toString().indexOf(wd);
            Logger.log(idx);
            if (~idx) {
              let t = c.toString().split(wd);
              Logger.log(JSON.stringify(t));
              return t[0].toString().toUpperCase() + wd + t[1].toString().toUpperCase();
            } else {
              return c.toString().toUpperCase();
            }
          }))
          e.range.setValues(values)
        }
      }
    }