首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在google-apps-script中按字母递增

在google-apps-script中按字母递增
EN

Stack Overflow用户
提问于 2012-09-19 06:11:59
回答 1查看 3.5K关注 0票数 1

我在第3-15行的多个列中有数据。我希望找到该数据集中的所有唯一值,并将其输出到一列中。

unique函数一次只处理一列,所以它不能满足我的需要。

我正在编写一个脚本,它将打开一个新的工作表,并将值复制并粘贴到同一列中(将多个列中的数据合并到一个更长的列中)。然后,我将对包含所有数据的单个列运行唯一函数,以获得原始数据集中所有唯一值的输出(Items!B3:Z15)

我写了代码,但不知道如何递增一个字符。如果有更好的方法来实现这一点,我愿意接受建议,但我也很好奇是否有可能增加字母。

谢谢你的帮助,这是我当前的代码:

代码语言:javascript
复制
function uniqueIngredients() {

  var book = SpreadsheetApp.getActiveSpreadsheet();
  var r=1;  // starting with row 1 new sheet
  var d='B';
  for (i=1; i<4; i++){  //testing by running 3 iterations
    var m = 'Ingredients!A'+r;  //Intially return Ingredients!A1 then incremented by 11 ex A12
    var c = 'Items!'+d+'4:'+d+'15';  // Initially return Items!B3:B15 then incremented by letter ex Items!C3:C15
    r = r+12;  // add 12 spaces before next copy (max number of ingredients for each item)
    d++;
    book.getRange(c).copyTo(book.getRange(m), {contentsOnly:true});
  }
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-19 07:03:30

可以对getRange()方法使用alternative parameter specification,该方法使用列号而不是A1字符串表示法。这将更容易递增。

也就是说,由于您只复制值,因此更好(更有效)的做法是获取块中的源范围,并使用Javascript将其转换为一列数组,然后设置这些值:

代码语言:javascript
复制
function uniqueIngredients() {
  var ss = SpreadsheetApp.getActive();
  var sourceValues = ss.getSheetByName('Items').getRange('A3:D15').getValues();
  var target = ss.getSheetByName('Ingredients');
  var result = [];
  for (var i = 0; i < sourceValues[0].length; i++) {
    for (var j = 0; j < sourceValues.length; j++) {
      result.push([sourceValues[j][i]]);
    }
  }
  target.getRange(1, 1, result.length, 1).setValues(result); 
}

也就是说,您可以使用一些变通方法,仅使用电子表格函数来提供最终结果:

代码语言:javascript
复制
=ArrayFormula(UNIQUE(TRANSPOSE(SPLIT(CONCATENATE('Items'!A3:D15&CHAR(9));CHAR(9)))))
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12485832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档