从连接功能谷歌脚本中删除不需要的分隔符

时间:2018-01-07 19:37:07

标签: javascript arrays google-apps-script google-sheets fencepost

我正在尝试连接由,分隔的两列,并将结果发回第三列

我得到了:

colA     colb      concatenated
aa bb    ww ww     aa bb, ww ww
mm                 m, 
         qq         ,qq
zz oo              zz oo, 
                   ,
ss       vv zz     ss, vv zz

如何删除不需要的分隔符和空格,以便我得到:

colA     colb      concatenated
aa bb    ww ww     aa bb, ww ww
mm                 mm
         qq        qq
zz oo              zz oo

ss       vv zz     ss, vv zz

如果有用,请在Google表格中附上一些数据 https://docs.google.com/spreadsheets/d/12Hn9bVy5GmRTVxMcrZ_bdkVSlfrem-Jr4cyev_gg6BE/edit?usp=sharing

由于

function ConCat() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Elements");
var lc = sheet.getLastColumn();
var lr = sheet.getLastRow();
var values = sheet.getRange(2, 1, lr,lc).getValues();
var result = [];                                      //Create a empty array to be filled concatenated elements

//Add items to results
for(var i=0; i<lr; i++){
   result[i] = [values[i][0]+", "+values[i][1]];
}

//Post back to column 3 starting on row 2
sheet.getRange(2, 3, lr, 1).setValues(result);
}

3 个答案:

答案 0 :(得分:2)

我正在跳过谷歌电子表格的东西,因为我认为这与回答你的问题无关。

看起来values包含您要加入的项目。我将其重命名为vals(因为values已经是绑定函数)并且只是在firefox的javascript控制台中对此进行了测试。如果val包含空字符串(如下所示):

vals = [ ['aa bb', 'ww ww'], ['mm', ''], ['', 'qq'], ['zz oo', ''], 
         ['', ''], ['ss', 'vv zz'] ];

然后我可以使用join(比手动实现的版本更容易阅读)重现您的问题:

>> for (var i=0; i<vals.length; i++)  
    console.log(vals[i].join(','))
aa bb,ww ww 
mm, 
,qq 
zz oo, 
, 
ss,vv zz

所以,你真的只想在加入之前过滤空字符串列表:

>> filterEmpties = function(acc, el) {
       if(el != "")
           acc.push(el);
       return acc;
   }
>> for (var i=0; i<vals.length; i++){
    console.log(
        vals[i].reduce(filterEmpties, []).join(', '))
   }
aa bb, ww ww
mm
qq
zz oo

ss, vv zz

而且我认为这基本上就是你想要实现的目标,对吧?在使用join之前,我使用Array.prototype.reduce删除了空元素。

干杯!

编辑:

似乎我对控制台的使用在实现我的答案时引起了一些混乱。我将我的解决方案与您的代码集成,以帮助您了解我的意思(我修改了缩进;)):

var filterEmpties = function(acc, el) {
    if(el != "")
        acc.push(el);
    return acc;
}

function ConCat() {
    var sheet = SpreadsheetApp.getActiveSpreadsheet()
        .getSheetByName("Elements");
    var lc = sheet.getLastColumn();
    var lr = sheet.getLastRow();
    var values = sheet.getRange(2, 1, lr,lc).getValues();
    var result = [];  // Create a empty array to be filled concatenated elements

    // Add items to results
    for(var i=0; i<values.length; i++){
        result[i] = values.reduce(filterEmpties, []).join(', ');
    }          
    // Post back to column 3 starting on row 2
    sheet.getRange(2, 3, lr, 1).setValues(result);
}

这就是你应该做的所有事情,假设我正确理解你的输入。希望这会有所帮助。

答案 1 :(得分:1)

试试这个:

function ConCat() {
var sheet = 
SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Elements");
var lc = sheet.getLastColumn();
var lr = sheet.getLastRow();
var values = sheet.getRange(2, 1, lr,lc).getValues();
var result = [];                                      //Create a empty array to be filled concatenated elements

//Add items to results
for(var i=0; i<lr; i++){
 if(values[i][0]!='' && values[i][1]!=''){
    result[i] = [values[i][0]+", "+values[i][1]];
}
  else if(values[i][0]!='' && values[i][1]==''){
    result[i] = [values[i][0]]
}
else if(values[i][0]=='' && values[i][1]==''){
    result[i] = [values[i][1]]
}  
 else{                 
   result[i]=['']
}
}  
//Post back to column 3 starting on row 2
sheet.getRange(2, 3, lr, 1).setValues(result);
}

答案 2 :(得分:1)

result[i] = [!values[i][0]? 
    !values[i][1]?"":values[i][1]
  :!values[i][1]? values[i][0]:
    values[i][0] + ", " + values[i][1]];

而不是:   result [i] = [values [i] [0] +“,”+ values [i] [1]];