搜索

首页  >  问答  >  正文

Google Sheets 代码:解决权限问题和数据放置错误

我正在使用 Google 脚本编写我的第一个代码。我的代码遇到问题,它没有访问 Google 表格所需的权限。尝试执行代码时,我收到错误消息“异常:您无权调用 SpreadsheetApp.openById”。该代码旨在修改和检索 Google 表格电子表格中的数据。

除了权限问题之外,代码中还有一个特定行为需要解决。该代码旨在将信息传输到 Google Sheets 电子表格中的特定行,但目前正在将数据传输到电子表格之外的位置。例如,如果电子表格中第 9 行有可用的空白空间,则代码会错误地将信息传输到表外没有格式或结构的其他位置。我在下面附上了我的代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

function onEdit(e) {

  var sourceSheet = e.source.getActiveSheet();

  var editedRange = e.range;

  var column = editedRange.getColumn();

  var row = editedRange.getRow();

   

  if (column > 1 && row > 1) {

    var technicianNameCell = sourceSheet.getRange(row, 13);

    var technicianName = technicianNameCell.getValue();

    var dataValues = [];

     

    var columnsToCopy = [1, 2, 3, 4, 5, 6, 7, 11, 12]; // A, B, C, D, E, F, G, J

     

    for (var i = 0; i < columnsToCopy.length; i++) {

      var value = sourceSheet.getRange(row, columnsToCopy[i]).getValue();

      dataValues.push(value);

    }

     

    var targetSpreadsheetIds = {

      "technicianName": {

        "spreadsheetId": "spreadsheetId",

        "sheetName": "sheetName"

      },

      "technicianName": {

        "spreadsheetId": "spreadsheetId",

        "sheetName": "sheetName"

      },

      "technicianName": {

        "spreadsheetId": "spreadsheetId",

        "sheetName": "sheetName"

      }

    };

     

    var targetSpreadsheet = targetSpreadsheetIds[technicianName];

     

    if (targetSpreadsheet) {

      var targetSheet = SpreadsheetApp.openById(targetSpreadsheet.spreadsheetId).getSheetByName(targetSpreadsheet.sheetName);

      var lastRow = targetSheet.getLastRow();

      var firstEmptyRow = lastRow + 1;

       

      var targetRange = targetSheet.getRange(firstEmptyRow, 1, 1, dataValues.length);

      targetRange.setValues([dataValues]);

    }

  }

}

我尝试实现一个代码来修改和检索 Google 表格电子表格中的数据。我希望代码具有访问电子表格并执行所需操作的必要权限。具体来说,我希望代码能够使用传输的信息填充电子表格中的空白空间,同时保留表格的格式和结构。

然而,实际的结果是代码遇到了权限问题。执行代码时出现“Exception: You do not have permission to call SpreadsheetApp.openById”错误。此外,传输的信息被放置在表格之外的位置,没有格式或结构。

Google 表格代码中的数据放置

好吧,事情就这样了。我正在使用的代码非常擅长查找表中的空白点。唯一的问题是,它最终将数据放在我拥有的实际表之外。您看,代码认为表中的格式是完整的行,因此它没有将数据准确地放置在我希望的行中的位置。在此处输入图像描述

我现在拥有的代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

function myEditTrigger(e) {

  const sh = e.range.getSheet();

  if (sh.getName() == "Sheet Name" && e.range.columnStart > 1 && e.range.rowStart > 1) {

    const [a, b, c, d, e, f, g, , , k, l, m] = sh.getRange(e.range.rowStart, 1, 1, sh.getLastColumn()).getValues()[0];

    let vs = [a, b, c, d, e, f, g, k, l];

    var tObjs = {

      "techname": {

        "spreadsheetId": "spreadsheetId",

        "sheetName": "sheetName"

      },

    

    };

    var tObj = tObjs[m];

    if (tObj) {

      var tsh = SpreadsheetApp.openById(tObj.spreadsheetId).getSheetByName(tObj.sheetName);

      tsh.getRange(tsh.getLastRow() + 1, 1, 1, vs.length).setValues([vs]);

    }

  }

}

P粉896751037P粉896751037319 天前537

全部回复(1)我来回复

  • P粉521697419

    P粉5216974192024-04-04 00:36:31

    使用可安装的触发器并重命名触发器函数,不要使用onEdit

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    function onMyEdit(e) {

      const sh = e.range.getSheet();

      if (sh.getName() == "Sheet Name" && e.range.columnStart > 1 && e.range.rowStart > 1) {

        const [a,b,c,d,e,f,g,,,,k,l,m] = sh.getRange(e.range.rowStart, 1 , 1, sh.getLastColumn()).getValues()[0];

        let vs = [a,b,c,d,e,f,g,k,l];

        var tObjs = {"technicianName": {"spreadsheetId": "spreadsheetId","sheetName": "sheetName" },...};//Hard code the objs or make them global

        var tObj = tObjs[m];

        if (tObj) {

          var tsh = SpreadsheetApp.openById(tObj.spreadsheetId).getSheetByName(tObj.sheetName);

          tsh.getRange(tsh.getLastRow() + 1, 1, 1, vs.length).setValues(vs);

        }

      }

    }

    回复
    0
  • 取消回复