如何使用AppendRow

时间:2018-05-05 10:43:44

标签: google-apps-script google-sheets

我从任何编码(比如5年)中花了相当长的时间,所以现在我回来做一些有趣的代码和我自己的用法,我觉得完全迷失了,特别是我实际上从来没有在电子表格中写过任何宏。所以这对我来说是一个挑战,特别是我还没有参加任何课程。

这次我正在研究AppendRow功能。我的部分代码只需要反转一张纸的行顺序并将其粘贴到另一张纸上。排序在这种特殊情况下不起作用,我只能使用CopyTo从第一个底部开始,然后从第二个顶部复制它。相反,我想在第二张表格中使用AppendRow,从第一张表格的底行开始。

这是我的问题。我如何使用AppendRow复制内容。我正在寻找几个小时,只找到了一种方法来使用硬编码的追加内容,如:

sheet.appendRow(["a man", "a plan", "panama"]);

我知道appendRow将Object [] []作为参数但我的技能缺乏。我试着这样做:

    function SortBankStatement() {
  var ss = SpreadsheetApp.getActive();
  var unsorted_sheet = ss.getSheetByName("RawAcc1");
  var sorted_sheet = ss.getSheetByName("Bank Statement History");
  var unsorted_length = unsorted_sheet.getLastRow();
  var unsorted_width = unsorted_sheet.getLastColumn();
  var unsorted = unsorted_sheet.getRange(1,1,unsorted_length, unsorted_width);
  for (var i=unsorted_length;
       i>1;
       i--) {
    sorted_sheet.appendRow(unsorted[i][0]); //don't work
    sorted_sheet.appendRow([unsorted[1][i]]); //don't work
    sorted_sheet.appendRow([unsorted]); //don't work
    sorted_sheet.appendRow([unsorted[i]]); //don't work
    sorted_sheet.appendRow(unsorted.getValue(i)); //don't work
    sorted_sheet.appendRow(unsorted(please.work)); //surprisingly, don't work

  };
};

基本上我不知道如何使用“i”作为源的行指示符来追加Row。不知道应该如何拼写。我得到的是关于appendRow是一个字符串的错误,“1”未指定,并且在一次情况下而不是复制的数据我得到了所有电子表格,其中填充了“我们指定的”字符串或其他乱码。

此代码不一定是最佳的,我将在达到完整功能后对其进行调查。提前谢谢。

2 个答案:

答案 0 :(得分:1)

AppendRow需要单行(数组)数据。

使用getRange()。getValues();范围是一个对象。值是一个数组。循环:for(var i = unsorted_length; i> 1; i--){},第一个索引i = unsorted_length在数组中未定义,i的最后一个数是2.因此,另外,修改循环如下:

function SortBankStatement() {
  var ss = SpreadsheetApp.getActive();
  var unsorted_sheet = ss.getSheetByName("RawAcc1");
  var sorted_sheet = ss.getSheetByName("Bank Statement History");
  var unsorted_length = unsorted_sheet.getLastRow();
  var unsorted_width = unsorted_sheet.getLastColumn();
  var unsorted = unsorted_sheet.getRange(1,1,unsorted_length, unsorted_width).getValues();
  for (var i=unsorted_length - 1; i>1; i--) {
    sorted_sheet.appendRow(unsorted[i]);
    }
}


Sheet2A1:

=SORT(Sheet1!A1:E50,ROW(A1:A50),0)

这将订购Sheet1A1:E50从下到上(没有任何实际排序)。

<小时/> Array.reverse()

var unsortedRng = unsorted_sheet.getRange(1,1,unsorted_length, unsorted_width);
var unsortedVal = unsortedRng.getValues();
unsortedVal.reverse();
unsortedRng.setValues(unsortedVal);

答案 1 :(得分:1)

后来,但是如果您在.getValues()调用之后链接了getRange()来实际获取值数组,则某些选项将起作用 (如公认的答案一样)