【问题标题】:How to copy edited cell data to new spreadsheet, into cell and sheet dependent on the edited cell?如何将编辑过的单元格数据复制到新的电子表格,复制到依赖于编辑过的单元格的单元格和工作表中?
【发布时间】:2019-08-08 08:44:59
【问题描述】:

我们有两张 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(代码:28)

我知道这是因为它们是两个不同的电子表格,但有解决方法吗?

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    问题:

    调用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();
    }
    

    参考资料:

    【讨论】:

    • 谢谢罗斯,已经解决了。好吧,代码中存在一些错误,我需要在它运行后对其进行排序,但在其他情况下已修复!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 2021-01-03
    相关资源
    最近更新 更多