【问题标题】:Execution problem with button and trigger按钮和触发器的执行问题
【发布时间】:2021-08-23 19:30:14
【问题描述】:

我承认我根本不是专业人士,我只是尝试为我的公司编写一些应用脚本,但遇到了一个我真的不明白的问题。

我无法执行我使用按钮或触发器创建的功能,而只能通过我自己使用应用脚本界面中的执行按钮来执行。

问题总是一样的:

错误目标范围的坐标超出了工作表的尺寸。

但正如我上面所说,当我自己执行时,我没有收到任何错误消息并且代码运行良好。

代码如下:

function Colle() {
   var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
   var lastRow = spreadsheet.getLastRow()+1;
   spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Data GC'), true);
   spreadsheet.getRange('A1').activate
   spreadsheet.getSheetByName("Data GC").getRange('A1:F500').activate(); // I know that my 
       //data will never exceed more than 400 so just as a security I've put 500
   spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Sauvegarde GC'), true);
   spreadsheet.getRange('A' + lastRow).activate();
   spreadsheet.getSheetByName("Data GC").getRange('A1:F500').copyTo(spreadsheet.getActiveRange(), 
   SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
   SuppDoubl(); //Delete the dupplicates
   spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Sauvegarde GC'), true);
   spreadsheet.getRange('A1').activate();
 };

*对不起我的英语

function SuppDoubl() {
    var spreadsheet = SpreadsheetApp.getActive();
    spreadsheet.getRange('A:F').activate();
    spreadsheet.getActiveRange().removeDuplicates().activate();
    spreadsheet.getRange('A1').activate();
};

【问题讨论】:

  • 你能显示函数SuppDoubl()吗?错误究竟出现在哪里?你能告诉行号吗?
  • 您好,感谢您的回答,SuppDoubl 的脚本是基于 app 脚本中的 removeDupplicates 函数:function SuppDoubl() { var spreadsheet = SpreadsheetApp.getActive();电子表格.getRange('A:F').activate();电子表格.getActiveRange().removeDuplicates().activate();电子表格.getRange('A1').activate(); };
  • 这似乎有很多代码,可能可以简化很多(或以不同的方式制作)。这样做也应该可以解决问题。你能解释一下你追求的结果吗?脚本应该做什么?
  • 我已经通过简化代码解决了这个问题,感谢您的关注。该脚本正在将数据从工作表复制到另一个工作表并取最后一行,以免删除以前的数据。它旨在保存我的数据。

标签: google-apps-script google-sheets execution


【解决方案1】:

为什么需要这么多activate()s?如果您只想将某个范围从一张纸复制到另一张纸,则可以在没有activate() 的情况下完成:

function colle() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var source = ss.getSheetByName('Data GC').getRange('A1:F500');
  var target = ss.getSheetByName('Sauvegarde GC').getRange('A1'); // or A + last row
  source.copyTo(target, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);

  // SuppDoubl(); // <-- probably the error is here?

  ss.setActiveSheet(ss.getSheetByName('Sauvegarde GC'), true);
  ss.getRange('A1').activate();
}

通过按钮和任何方式对我来说都很好(没有SupDoubl())。

【讨论】:

  • 通常一个脚本有很多activate()方法是使用宏记录器的结果。一些用户使用这些脚本示例来创建新脚本。
  • Rubén 是对的,我使用了一个宏,然后管理它来生成我的脚本。
  • 我试过你的脚本。即使没有与 removeDupplicate() 一起使用的 SupDoubl()、按钮和触发器,同样的问题仍然存在:目标范围的坐标超出了工作表的尺寸。
  • 唉。我无法用测试数据在我的测试表上重现问题。也许您的数据有一些特别之处。或者您的代码中有一些错字。例如,当我尝试以类似方式定义范围时,我遇到了类似的错误:getRange('A' + n),结果发现'n'是一个字符串,然后是 A1,然后是 A12,然后是 A123 ,然后是 A1234... 等,并且迅速升级(而不是 A1、A2、A3、A4...)。
猜你喜欢
  • 2011-11-02
  • 1970-01-01
  • 2021-11-23
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-28
相关资源
最近更新 更多