【问题标题】:How to get values into an array with row,column notation如何使用行、列表示法将值放入数组中
【发布时间】:2018-07-03 09:08:25
【问题描述】:

这是我的脚本,当 getRange 采用 a1 表示法但采用行列表示法时,范围的最后一列被拉入第一列并且数组中没有其他数据。 如果这是一个已知问题,您如何以编程方式表示“A6:M8”以包含行数。 // 源代码行不起作用,我无法使其智能!

  function Copy() {
  var lp=SpreadsheetApp.getActiveSpreadsheet().getSheetByName("LP").activate();
  var sourceRows = lp.getLastRow();
   var source = lp.getRange('A6:M8').getValues();
    // var source = lp.getRange(6, 13, (sourceRows-5), 13).getValues();
var tr= SpreadsheetApp.getActiveSpreadsheet().getSheetByName('TR').activate();
  var trRows = tr.getLastRow();
   //var trput = lp.getRange('A234:M236').setValues(source);
     var trput = tr.getRange((trRows+1), 1, 3, 13).setValues(source);
};

【问题讨论】:

  • 你检查过sourceRows的值吗?

标签: google-apps-script


【解决方案1】:

假设工作表 LP 中的最后一行是第 8 行,那么您对 ​​(sourceRows-5) 的计算应该没问题。 (还假设您总是希望一次复制 3 行。)

问题是您输入了13 作为范围的起始列。相反,该行应该是

var source = lp.getRange(6, 1, (sourceRows-5), 13).getValues();

另外两个建议:

  1. 您获得了两次活动电子表格。将它放入一个变量中,这样你就不需要这样做了。 var ss = SpreadsheetApp.getActiveSpreadsheet();
  2. 似乎没有必要对各个工作表进行activate() 调用,因此请考虑删除。

然后你会有这样的东西:

function Copy() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var lp = ss.getSheetByName("LP");
  var sourceRows = lp.getLastRow();
  var source = lp.getRange(6, 1, (sourceRows-5), 13).getValues();
  var tr= ss.getSheetByName("TR");
  var trRows = tr.getLastRow();
  var trput = tr.getRange((trRows+1), 1, 3, 13).setValues(source);
};

【讨论】:

  • 如果source 的大小发生变化,为什么还要坚持强制双重更新? trput 应该是 (trRows+1), 1, source.length, source[0].length)。 (并且可以选择由if 语句保护,例如if (source && source.length && source[0].length)
  • 好收获@tehhowch
猜你喜欢
  • 2020-06-27
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多