首页 > 解决方案 > 谷歌工作表脚本 - 将数组复制到范围的最后一行

问题描述

由于我不是程序员,因此我正在此论坛和 yt 教程的帮助下改进我在工作中使用的电子表格。我设法从这个来源获得了一些有用的脚本,但现在我坚持使用这个:

我想从“Plan dnia”复制选中的行,并将选定行的 B、C 列中的值复制到“Harmonogram”中的最后一行,但在所需范围内 - 到 B、C 列并在 D 列中创建时间戳。脚本我创建的不是将数据粘贴到最后一行,因为在所需范围之外的其他列中有公式。这是我的示例:

https://docs.google.com/spreadsheets/d/1AguoW2RBNYzQbGN4D_NkHiK40uUgMI5eYZ9mMq5Ue3o/edit?usp=sharing

function doplanu() {
  var sskey = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = sskey.getSheetByName('Plan dnia');
  var sheet2 = sskey.getSheetByName('Harmonogram');

  var data = sheet1.getRange(1,1, sheet1.getLastRow(), sheet1.getLastColumn()).getValues();
  var datastamp = [new Date()];

  var dest = [];
  for (var i = 0; i < data.length; i++ ) {
    Logger.log(data[i][0]);// just to check if the condition is true sometimes ;-)
    if (data[i][0] == true ) { 
      var destRow = []; //initialise intermediate array
      destRow.push(data[i][1],data[i][2],data[i][3]);// choose here the columns you want to add (here col2, 3 & 13)
      dest.push(destRow); 
    }
  } // here is the end of the for loop
  Logger.log(dest) ; // log the dest array instead
  if (dest.length > 0 ) { // if something has been written in your array then batch write it to the dest. sheet
    sheet2.getRange(sheet2.getLastRow()+1,2,dest.length,3).setValues(dest);

var ss = SpreadsheetApp.getActiveSheet(),
    arr = [];
ss.getRange("A:A")
    .getValues()
    .forEach(function (value) {
        var changeWith = [false],
            toBeChanged = [true] //add characters to be changed here, the characters you want to change these with in the same 'place' in the above array.
            .map(function (c, i) {
                return value = replaceAll(value.toString(), c, changeWith[i])
            })
            arr.push([value])
    });
ss.getRange("A:A")
    .setValues(arr)
}

function replaceAll(v, c, r) {
return v.indexOf(c) > -1 ? v.replace(new RegExp(c, "g"), r) : v;
}
   
   sheet2.getRange(sheet2.getLastRow(), 4 ).activate();
   
  }

另一件事是脚本在应对后取消选中“Plan dnia”中的行的方式。我让它尽可能简单,但它的工作有点慢,如果我只搜索选中的行并将 G 列中的状态更改为“✔”并取消选中该行,我会很棒。

我希望能得到你们的帮助:)

标签: javascriptarraysgoogle-sheets

解决方案


推荐阅读