提高我的脚本性能 Google Sheets 脚本

2024-04-29

我创建了一个函数,每当我运行 AppendRow 脚本时,AY 列中没有点(“.”)的每一行,包含我想要的每个信息/列的数组从该表将被转移到我的主表,其中有13k rows atm.

通常,每天大约有 20-40 行被粘贴到第一个工作表中,此脚本会自动将列重新排列到我的主工作表中。

PROBLEM:问题是附加到我的主表的每一行都需要大约8-15秒即可转移有时我会收到“超出最大执行时间”错误,这真的很烦人。

有什么方法可以让我的代码运行得更快,或者只是让脚本运行超过 5 分钟?

function AppendRow() {

  var app = SpreadsheetApp;
  var Sheet = app.getActiveSpreadsheet().getSheetByName("Sheet1");

  var ss2017 = SpreadsheetApp.openById("");
  var sheet2017 = ss2017.getSheetByName("2017");

  var lastSourceRow = Sheet.getLastRow();
  var lastSourceCol = Sheet.getLastColumn();

  var sourceRange = Sheet.getRange(1, 1, lastSourceRow, lastSourceCol);
  var sourceData = sourceRange.getValues();
  var lenght = sourceData.length;
  //Logger.log(lenght);

  var time = new Date();
  time = Utilities.formatDate(time, "GMT+01:00", "dd/MM/yy, HH:mm:ss");


      for(i=5326;i<=lenght;i++) 
//my i=5326 is just cuz I had already
// information on my sheet that was transfered before this script existed
      {

        var columnAY = Sheet.getRange(i,51).getValue();
        var checkReservation = Sheet.getRange(i,2).getValue();

           if(columnAY == ".")
           {
       }
       else
       {
      var B = Sheet.getRange(i,2).getValue();
      var F = Sheet.getRange(i,6).getValue();
      var E = Sheet.getRange(i,5).getValue();
      var K = Sheet.getRange(i,11).getValue();
      var L = Sheet.getRange(i,12).getValue();
      var V = Sheet.getRange(i,22).getValue();
      var O = Sheet.getRange(i,15).getValue();
      var P = Sheet.getRange(i,16).getValue();
      var Q = Sheet.getRange(i,17).getValue();
      var AF = Sheet.getRange(i,32).getValue();
      var AG = Sheet.getRange(i,33).getValue();
      var N = Sheet.getRange(i,14).getValue();
      var AI = Sheet.getRange(i,35).getValue();
      var AB = Sheet.getRange(i,28).getValue();
      var AC = Sheet.getRange(i,29).getValue();   



      var array = ["",B,F,E,K,L,"",V,O,P,Q,AF,AG,"","",N,N,AI,"","",AB,AC,"","","","",time];

      sheet2017.appendRow(array);


       Sheet.getRange(i,51).setValue(".");


       }
  }
}

附注:我的电子表格中还有一个菜单,每次我想不确定这是否与问题相关时都可以运行脚本:P

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('My Menu')
      .addItem('Copy to 2017', 'AppendRow')
      .addToUi();

每条评论都值得赞赏! :)


我必须承认,在弄清楚我的 i 与你的 i 的协调方式方面存在一些问题,但我认为我的专栏是正确的。所以检查一下,但这应该运行得更快一点。

function AppendRow() 
{
  var ss0=SpreadsheetApp.getActive();
  var sh0=ss.getSheetByName('Sheet1');
  var rg0=sh0.getDataRange();
  var vA0=rg0.getValues();
  var ss1=SpreadsheetApp.openById(id);
  var sh1=ss1.getSheetByName('2017');
  var TimeStamp=Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd/MM/yy HH:mm:ss");
  for(i=5326;i<vA0.length;i++)
  {
    var columnAY=vA0[i][50];
    var checkReservation=vA0[i][1];
    if(vA0[i][50]!='.')
    {
      var B = vA0[i][1];//Sheet.getRange(i,2).getValue();
      var F = vA0[i][5];//Sheet.getRange(i,6).getValue();
      var E = vA0[i][4];//Sheet.getRange(i,5).getValue();
      var K = vA0[i][10];//Sheet.getRange(i,11).getValue();
      var L = vA0[i][11];//Sheet.getRange(i,12).getValue();
      var V = vA0[i][21];//Sheet.getRange(i,22).getValue();
      var O = vA0[i][14];//Sheet.getRange(i,15).getValue();
      var P = vA0[i][15];//Sheet.getRange(i,16).getValue();
      var Q = vA0[i][16];//Sheet.getRange(i,17).getValue();
      var AF = vA0[i][31];//Sheet.getRange(i,32).getValue();
      var AG = vA0[i][32];//Sheet.getRange(i,33).getValue();
      var N = vA0[i][13];//Sheet.getRange(i,14).getValue();
      var AI = vA0[i][34];//Sheet.getRange(i,35).getValue();
      var AB = vA0[i][27];//Sheet.getRange(i,28).getValue();
      var AC = vA0[i][28];//Sheet.getRange(i,29).getValue();   
      var array = ["",B,F,E,K,L,"",V,O,P,Q,AF,AG,"","",N,N,AI,"","",AB,AC,"","","","",TimeStamp];
      sh1.appendRow(array);
      sh0.getRange(i+1,51).setValue(".");
    }
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

提高我的脚本性能 Google Sheets 脚本 的相关文章

随机推荐

  • 包含我导入的 jar 的名称是什么?

    我不认为这是重复的 我找不到我正在寻找的简单答案 在 Eclipse Juno 中 我想突出显示任何单个导入语句并找出哪个 jar 包含该包 类 这在 Eclipse 中可能吗 如果是这样 怎么办 EDIT 这个问题看起来很相似 但没有回答
  • 如何创建一个新的(空的!)“根”分支?

    I would like to define a new root branch in this git repository By root branch I mean a branch that is entirely independ
  • 当 N 位于 from 中时如何更新 N 行(从 @myVar 选择 N)

    我正在 SQL Server 2012 上开发这个存储过程 存储过程将更新Quantity行中EXTERNAL CODES表中的每一行 newBatches范围 这就像一个循环 我需要在其中创建一个新行BATCHES表中的每一行 newBa
  • SpriteKit SKScene 添加 AVCaptureVideoPreviewLayer CALayer 作为背景不起作用

    我正在尝试将 AVCaptureVideoPreviewLayer CALayer 添加为 SKScene 的背景 我可以将 CALayer 添加到场景中 但无论尝试如何排序 CALayer 始终是最顶层的对象 在 didMoveToVie
  • 将字符串附加到 Firebase 实时数据库上的列表 [重复]

    这个问题在这里已经有答案了 我想将一个字符串附加到 Firebase 实时数据库上的列表中 我的代码已经可以运行 但是有问题 所以数据库看起来像这样 message 0 some string 1 another string 2 some
  • 如何在没有身份验证的情况下打开我的应用程序 j hipster

    我创建了名为 Bookstore 的 j hipster 应用程序 运行我的应用程序后 它将进行身份验证 我不需要此身份验证 是否有任何方法可以在没有 j hipster 登录页面的情况下打开我的应用程序 在路径 app config 中有
  • Android Fragment 中的问题:仍然单击上一个片段

    我开发了一个应用程序 该应用程序具有导航抽屉和抽屉内的许多片段 因此当我在片段内打开片段时遇到问题 在一个片段中 当用户单击列表视图项时 他们会获取与列表项相关的数据 因此我面临问题它仍然单击不可见的列表 但单击 片段的布局
  • %<>%操作的含义

    这个操作有什么作用呢 test lt gt select name list 这是来自一个名为magrittr lt gt 意思是 取出左边的部分 用右边的部分修改它 覆盖左边的变量 如果你更熟悉dplyr 它相当于 test lt tes
  • AJAX 将 JavaScript 字符串数组发送到 JsonResult 作为 List 始终返回 Null?

    我正在尝试在 JavaScript 中构建一个字符串数组 并在操作方法的字符串列表中获取结果 下面是我的 JavaScript 的样子 我正在使用 jQuery 1 4 2 问题是我的操作方法中的列表始终显示 NULL JavaScript
  • 在当前时间上添加小时或分钟

    我想将时间增加到当前时间 例如 我有问题发生的时间和完成它们的预期时间 我怎样才能添加到它 DateTime Now ToShortDateString 您可以使用其他变量 DateTime otherDate DateTime Now A
  • 如何解决 AddJsonOptions 不包含 SerializerSettings 的定义 - .NET

    希望有人能帮助我 我一直在寻找 但未能找到解决方案 可能是一些基本的东西 我只是找不到解决方案 services AddMvc SetCompatibilityVersion CompatibilityVersion Version 2 1
  • 客户端检索 Google 联系人图片

    我正在使用 Google JavaScript API 在网络应用程序中获取 Google 联系人 并且我想检索他们的照片 我正在做这样的事情 大大简化 var token let s admit this is available alr
  • 在Windows中比较2个二进制文件的工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我需要一个工具来比较两个二进制文件 文件相当大 我在互联网上找到的一些免费软件或试用工具不方便用于大文件
  • 将 NetCDF 转换为 GRIB2

    我知道有这样的软件wgrib2 http www cpc ncep noaa gov products wesley wgrib2 这会将文件转换为grib and grib2格式化为NetCDF文件 但我需要走另一条路 来自NetCDF
  • GNU FORTH 有编辑器吗?

    第 3 章开始前进 http www forth com starting forth says 现在您已经将一个块设置为 当前 您只需输入单词即可列出它L 不像LIST L不希望以块号开头 相反 它列出了当前块 当我跑步时180 LIST
  • Android Proguard - 保留所有第 3 方库是最佳实践吗?

    我正在为使用第 3 方库的应用程序配置 Proguard 包含以下行是否是 最佳实践 为了避免将来难以发现的错误 keep class 3rd party lib name 对于每个没有来自其开发人员的特定 Proguard 指令的第 3
  • 从 JQuery 中的元素获取点击处理程序

    如何获取对 JQuery 中元素的单击处理程序的引用 这是我正在尝试做的事情 存储点击处理程序 更改下一次单击的单击处理程序 恢复原始点击处理程序 var originalClick settings currentTarget click
  • 将多个前缀行过滤器设置为扫描仪 hbase java

    我想创建一台扫描仪 它可以为我提供带有 2 个前缀过滤器的结果例如 我想要其键以字符串 x 开头或以字符串 y 开头的所有行 目前我知道只能使用一个前缀 方法如下 scan setRowPrefixFilter prefixFiltet 在
  • 通过 URL 中的 ID 进行 RestKit 关系映射

    假设我有一个 APIusers 1 items返回一个列表items为了userID 为 1 假设API响应如下 items id 1 description Some item 请注意 响应不包含user id用于关系映射 RestKit
  • 提高我的脚本性能 Google Sheets 脚本

    我创建了一个函数 每当我运行 AppendRow 脚本时 AY 列中没有点 的每一行 包含我想要的每个信息 列的数组从该表将被转移到我的主表 其中有13k rows atm 通常 每天大约有 20 40 行被粘贴到第一个工作表中 此脚本会自