我们有两个AL表格,本地和国家。我正在尝试获取它,以便在完成本地AL“日历”后,将数据复制到国家日历中。将检查已编辑的单元格是否在也位于国民中的某人的行中,然后将其复制到国民电子表格中的相应行中。我不断收到“您没有权限调用SpreadsheetApp.openByID”。
function onEdit(e) {
var range = e.range
var rowNum = range.getRow()
var colNum = range.getColumn()
var sheetEdit = range.getSheet().getName()
var rowEdit = parseInt(rowNum)
var colEdit = parseInt(colNum)
Logger.log(rowEdit)
Logger.log(colEdit)
Logger.log(sheetEdit)
var locSheet = "ID_Local_AL"
var natSheet = "ID_National_AL" //test
var copyEdit = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetEdit).getRange(rowEdit, colEdit, 1, 1).getValue()
//national Rows
var rhRowSMT = SpreadsheetApp.openById(natSheet).getSheetByName(sheetEdit).getCell(12,colEdit)
var jpRowSMT = SpreadsheetApp.openById(natSheet).getSheetByName(sheetEdit).getCell(13,colEdit)
var sahRowSMT = SpreadsheetApp.openById(natSheet).getSheetByName(sheetEdit).getCell(14,colEdit)
var hlRowSMT = SpreadsheetApp.openById(natSheet).getSheetByName(sheetEdit).getCell(15,colEdit)
if (rowEdit = 10) {
rhRowSMT.setValue(copyEdit)
}
else if (rowEdit = 11) {
jpRowSMT.setValue(copyEdit)
}
else if (rowEdit = 12) {
sahRowSMT.setValue(copyEdit)
}
else if (rowEdit = 13) {
hlRowSMT.setValue(copyEdit)
}
}
理论上,如果一个小组放进AL,则将检查是否要复制该单元格,它会将该单元格的内容复制到“国家”表的同一日期。
相反,我得到您没有调用SpreadsheetApp.openById的权限。所需权限:https://www.googleapis.com/auth/spreadsheets 在onEdit(Code:28)
我了解这是因为它们是两个不同的电子表格,但是有解决方法吗?
答案 0 :(得分:3)
权限不足,无法调用SpreadsheetApp.openById()
。
该脚本以Simple Trigger的身份运行,并以authMode = LIMITED
的身份运行。
为此设置一个Installable Trigger,以便它与authMode = FULL
一起运行。
我建议更改脚本名称,例如:
function syncSheets(e) {
然后运行以下脚本(改编自Google's example)来设置新的可安装触发器:
/**
* Creates a trigger for when a spreadsheet is edited.
*/
function createSpreadsheetEditTrigger() {
var ss = SpreadsheetApp.getActive();
ScriptApp.newTrigger('syncSheets')
.forSpreadsheet(ss)
.onEdit()
.create();
}