为什么表格中没有弹出此错误消息?
Why is this error message not popping up in Sheets?
我有一个 运行 编辑的脚本,它的触发器是可安装的。当它是 运行 时,它将一行复制到另一个文件中。如果由于某种原因没有通过,我希望弹出一条错误消息,以便用户知道它需要额外注意。
现在,我在执行日志中看到的错误表明它正在尝试编辑目标 sheet 中的受保护范围。我按如下方式添加了 try...catch
,但没有弹出任何内容。
function myfunction(e) {
try {
const startRow = 2;
const targetColumn = 11;
const ws = "Data"
//get modified row and column
const row = e.range.getRow();
const col = e.range.getColumn();
const s = e.source.getActiveSheet();
const cellValue = s.getActiveCell().getValue();
const salesPapeline = e.source.getActiveSheet().getRange(row, 1).getValue();
const branch = e.source.getActiveSheet().getRange(row, 13).getValue();
if (e.source.getActiveSheet().getName() === ws && col === 2 && row >= startRow) {
const timeStamp = new Date();
//This checks if the Job/Lead is to be transferred to Branch 2
if (salesPapeline == "4. Convert" && cellValue == "2. Branch 2"
&& e.source.getActiveSheet().getRange(row, 12).getValue() == "TRANSFERRED") {
const jobTagValue = e.source.getActiveSheet().getRange(row, 11).getValue();
let rowData = e.source.getActiveSheet().getRange(row, 1, 1, 12).getValues();
let newItems = [];
let jobTag = rowData[0][10];
let name = rowData[0][3];
let company = rowData[0][4];
let clientNotes = rowData[0][7];
let startDate = rowData[0][9];
newItems.push(jobTag, '3. Current needs', '', name, '', company, clientNotes, '', '', '', '', '', startDate)
e.source.getActiveSheet().getRange(row, 12).setValue('TRANSFERRED');
e.source.getActiveSheet().getRange(row, 13).setValue('2. Branch 2');
const salesSheet = SpreadsheetApp.openById(BRANCH2_FILE_ID);
const destSheet = salesSheet.getSheetByName('[MGT-use] Recruiting Funnel');
if (newItems.length > 0) {
const destRng = destSheet.getRange(destSheet.getLastRow() + 1, 1, 1, 13);
destRng.setValues([newItems]);
} else {
return;
}
}
}
} catch (e1) {
SpreadsheetApp.getUi().alert(e1.message);
}
}
这是触发器设置的屏幕截图:
触发器 onEdit()
以静默方式处理错误。您只能在执行部分看到错误消息(和日志):
为了调试,您可以使用 spreadsheet.toast()
工具代替(或与 console.log()
一起使用:
这会检查写入的范围是否为空白
我还在其中放置了一些调试标志,以备我们需要进一步进入该过程时使用。但我真的没有发现它有什么问题,只是您可以更好地利用事件对象并减少执行时间。
function myfunction(e) {
e.source.toast('entry');
try {
const sh = e.range.getSheet();
if (sh.getName() == "Data" && e.range.columnStart == 2 && e.range.rowStart >= 2) {
e.source.toast('Flag1');
const r = sh.getRange(e.range.rowStart, 1, 1, 12).getValues().flat();
if (r[0] == "4. Convert" && e.value == "2. Branch 2" && r[11] == "TRANSFERRED") {
e.source.toast('Flag2');
let newItems = [];
newItems.push(r[11], '3. Current needs', '', r[3], '', r[4], r[7], '', '', '', '', '', r[9]);
sh.getRange(e.range.rowStart, 12).setValue('TRANSFERRED');
sh.getRange(e.range.rowStart, 13).setValue('2. Branch 2');
const ssh = SpreadsheetApp.openById(BRANCH2_FILE_ID);
const dsh = ssh.getSheetByName('[MGT-use] Recruiting Funnel');
if (newItems.length > 0) {
e.source.toast('Flag3');
const wr = dsh.getLastRow() + 1
const drg = dsh.getRange(wr, 1, 1, 13);
drg.setValues([newItems]);
SpreadsheetApp.flush();
if(drg.isBlank()) {
SpreadsheetApp.getUi().alert("It did not go through");//warns you if the row that you just wrote to is blank.
}
}
}
}
} catch (e) {
console.log(e.message);
}
}
如果您想在 table 中分享一些数据,我不介意查看它。您可能还需要解释 sheet 的工作原理。
Note: I do not follow links to other google accounts.
我有一个 运行 编辑的脚本,它的触发器是可安装的。当它是 运行 时,它将一行复制到另一个文件中。如果由于某种原因没有通过,我希望弹出一条错误消息,以便用户知道它需要额外注意。
现在,我在执行日志中看到的错误表明它正在尝试编辑目标 sheet 中的受保护范围。我按如下方式添加了 try...catch
,但没有弹出任何内容。
function myfunction(e) {
try {
const startRow = 2;
const targetColumn = 11;
const ws = "Data"
//get modified row and column
const row = e.range.getRow();
const col = e.range.getColumn();
const s = e.source.getActiveSheet();
const cellValue = s.getActiveCell().getValue();
const salesPapeline = e.source.getActiveSheet().getRange(row, 1).getValue();
const branch = e.source.getActiveSheet().getRange(row, 13).getValue();
if (e.source.getActiveSheet().getName() === ws && col === 2 && row >= startRow) {
const timeStamp = new Date();
//This checks if the Job/Lead is to be transferred to Branch 2
if (salesPapeline == "4. Convert" && cellValue == "2. Branch 2"
&& e.source.getActiveSheet().getRange(row, 12).getValue() == "TRANSFERRED") {
const jobTagValue = e.source.getActiveSheet().getRange(row, 11).getValue();
let rowData = e.source.getActiveSheet().getRange(row, 1, 1, 12).getValues();
let newItems = [];
let jobTag = rowData[0][10];
let name = rowData[0][3];
let company = rowData[0][4];
let clientNotes = rowData[0][7];
let startDate = rowData[0][9];
newItems.push(jobTag, '3. Current needs', '', name, '', company, clientNotes, '', '', '', '', '', startDate)
e.source.getActiveSheet().getRange(row, 12).setValue('TRANSFERRED');
e.source.getActiveSheet().getRange(row, 13).setValue('2. Branch 2');
const salesSheet = SpreadsheetApp.openById(BRANCH2_FILE_ID);
const destSheet = salesSheet.getSheetByName('[MGT-use] Recruiting Funnel');
if (newItems.length > 0) {
const destRng = destSheet.getRange(destSheet.getLastRow() + 1, 1, 1, 13);
destRng.setValues([newItems]);
} else {
return;
}
}
}
} catch (e1) {
SpreadsheetApp.getUi().alert(e1.message);
}
}
这是触发器设置的屏幕截图:
触发器 onEdit()
以静默方式处理错误。您只能在执行部分看到错误消息(和日志):
为了调试,您可以使用 spreadsheet.toast()
工具代替(或与 console.log()
一起使用:
这会检查写入的范围是否为空白
我还在其中放置了一些调试标志,以备我们需要进一步进入该过程时使用。但我真的没有发现它有什么问题,只是您可以更好地利用事件对象并减少执行时间。
function myfunction(e) {
e.source.toast('entry');
try {
const sh = e.range.getSheet();
if (sh.getName() == "Data" && e.range.columnStart == 2 && e.range.rowStart >= 2) {
e.source.toast('Flag1');
const r = sh.getRange(e.range.rowStart, 1, 1, 12).getValues().flat();
if (r[0] == "4. Convert" && e.value == "2. Branch 2" && r[11] == "TRANSFERRED") {
e.source.toast('Flag2');
let newItems = [];
newItems.push(r[11], '3. Current needs', '', r[3], '', r[4], r[7], '', '', '', '', '', r[9]);
sh.getRange(e.range.rowStart, 12).setValue('TRANSFERRED');
sh.getRange(e.range.rowStart, 13).setValue('2. Branch 2');
const ssh = SpreadsheetApp.openById(BRANCH2_FILE_ID);
const dsh = ssh.getSheetByName('[MGT-use] Recruiting Funnel');
if (newItems.length > 0) {
e.source.toast('Flag3');
const wr = dsh.getLastRow() + 1
const drg = dsh.getRange(wr, 1, 1, 13);
drg.setValues([newItems]);
SpreadsheetApp.flush();
if(drg.isBlank()) {
SpreadsheetApp.getUi().alert("It did not go through");//warns you if the row that you just wrote to is blank.
}
}
}
}
} catch (e) {
console.log(e.message);
}
}
如果您想在 table 中分享一些数据,我不介意查看它。您可能还需要解释 sheet 的工作原理。
Note: I do not follow links to other google accounts.