Home > Blockchain >  How to make a trigger that run when there is changes on specific column of different Spreadsheet
How to make a trigger that run when there is changes on specific column of different Spreadsheet

Time:10-31

I want to ask about how to make a trigger that run when there are changes on different spreadsheet (Source spreadsheet) and on specific column.
I have 2 different spreadsheet (Source Spreadsheet and Target spreadsheet) and the trigger will working on target spreadsheet when there are changes that happened in the specific column of the source spreadsheet. I've just made the code, but it's not working. This code was made on the target spreadsheet. I've already use the onEdit() and onChange() trigger, but nothing happen or run this script.
This code still show some error like:

TypeError: e.source.openById is not a function


Here is the code that I've been made on the target spreadsheet:
function inChange(e) {
 var source_spreadsheet_sheetName = e.source.openById('').getName(); //ID of source spreadsheet
 var Row = e.source.getActiveCell().getRow();
 var Column = e.source.getActiveCell().getColumn();
 if (source_spreadsheet_sheetName == '' && Row >= 2 && Column == 2) { //the name of sheet from source spreadsheet and the specific column that has changes on it.
  myFunction(); //It will run the process of this myFunction script that I've been made on target spreadsheet
 }
}

CodePudding user response:

Your trigger runs. But it fails on first line of code because you're calling a method that you cannot.

Several problems.

Problem #1

var source_spreadsheet_sheetName = e.source.openById('').getName();

the openById probably does not work because source is already of type Spreadsheet so you can directly call getName on it.

It should be

var source_spreadsheet_sheetName = e.source.getName();

Problem #2

There is no getActiveCell on a Spreadsheet, only on a Sheet.

// if you know the sheet name in advance
let sheet = e.source.getSheetByName(YOUR_SHEET_NAME)
// or if you don't, get the active sheet (and don't use the line before)
let sheet = e.source.getActiveSheet()

let row = sheet.getActiveCell().getRow();
let column = sheet.getActiveCell().getColumn();

Problem #3

if (source_spreadsheet_sheetName == ''

A sheet name cannot be empty so this will never be true

CodePudding user response:

source_spreadsheet == '' cannot be true because it's the name of a spreadsheet

  • Related