从连接函数 google 脚本中删除不需要的定界符
Remove un-wanted delimiters from concatenation function google script
我正在尝试连接由 ,
和 post 分隔的两列,将结果返回到第三列
我得到:
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 sheet 和一些数据
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);
}
我跳过 google 电子表格内容,因为我认为它实际上与回答您的问题无关。
看起来 values
包含您要加入的项目。我将它重命名为 vals
(因为 values
已经是一个绑定函数)并且刚刚在 firefox 的 javascript 控制台中测试了它。如果 vals 包含空字符串(像这样):
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);
}
假设我正确理解了您的输入,这就是您应该做的所有事情。希望这有帮助。
试试这个:
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);
}
result[i] = [!values[i][0]?
!values[i][1]?"":values[i][1]
:!values[i][1]? values[i][0]:
values[i][0] + ", " + values[i][1]];
而不是:
结果[i] = [值[i][0]+", "+值[i][1]];
我正在尝试连接由 ,
和 post 分隔的两列,将结果返回到第三列
我得到:
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 sheet 和一些数据 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);
}
我跳过 google 电子表格内容,因为我认为它实际上与回答您的问题无关。
看起来 values
包含您要加入的项目。我将它重命名为 vals
(因为 values
已经是一个绑定函数)并且刚刚在 firefox 的 javascript 控制台中测试了它。如果 vals 包含空字符串(像这样):
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
.
干杯!
编辑:
我对控制台的使用似乎在实施我的答案时造成了一些混乱。我会将我的解决方案与您的代码集成,以帮助您理解我的意思(我修复了您的缩进;)):
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);
}
假设我正确理解了您的输入,这就是您应该做的所有事情。希望这有帮助。
试试这个:
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);
}
result[i] = [!values[i][0]?
!values[i][1]?"":values[i][1]
:!values[i][1]? values[i][0]:
values[i][0] + ", " + values[i][1]];
而不是: 结果[i] = [值[i][0]+", "+值[i][1]];