Google表单脚本-过滤唯一单元格值-将2D数组值推送到单个单元格中



很抱歉再次打扰您,我要疯了。。我只想过滤范围内每个单元格中的唯一字符串(字符串用分号分隔(我不能推送所有的数组值,只有一个是结果。非常感谢!

以下是一个示例:https://docs.google.com/spreadsheets/d/12T5K9LovcFvmeBg82IS89p4ygtZ530mzpY9fIsZQa8w/edit?usp=sharingPS:我使用脚本是因为每个单元格中有太多字符串,无法通过公式拆分单元格

这是我的编码:

function FilterReferences(){
var classeur = SpreadsheetApp.getActive();
var feuille = classeur.getSheetByName('Feuille 1');
var plage = feuille.getRange('A1:A');
var plageValues = plage.getValues();
var NbLignesTotal = plage.getLastRow();
for (var i = 1; i < NbLignesTotal; i++){
try {
var valeurCellule = plageValues[i-1][0];
if (valeurCellule != ""){
var source = valeurCellule.split(";");
var dest = [];
dest.push(source[0]);
for (var n = 0 ; n < source.length ; n++){
if (dest.indexOf(source[n]) == -1){  dest.push(source[n])};   }

var plageDest = feuille.getRange('B1:B');
plageDest.getCell(i,1).setValue([dest]);
}
} catch (e) {   }
}
}
  • 您想要实现以下情况。每个值都放在一个单元格中。
    • AAA;BBB;AAA;BBB;CCCAAA;BBB;CCC
    • AAA;CCC;AAA;DDD;ZZZ;CCCAAA;CCC;DDD;ZZZ

模式1:

在这种模式中,您的脚本会被修改。

修改的脚本:

请修改如下。

发件人:
plageDest.getCell(i,1).setValue([dest]);
收件人:
plageDest.getCell(i + 1, 1).setValue(dest.join(";"));
  • 在脚本中,dest是一个数组。因此,为了将其转换为字符串,使用了join
    • 运行plageDest.getCell(i,1).setValue([dest]);时,第一个元素由setValue放置。我认为这就是你问题的原因
  • 为了放置第2行的值,使用i + 1而不是i

模式2:

在这种模式中,通过降低处理成本来修改脚本。

修改的脚本:

function FilterReferences() {
var classeur = SpreadsheetApp.getActive();
var feuille = classeur.getSheetByName('Feuille 1');
var plage = feuille.getRange('A2:A' + feuille.getLastRow());  // Modified
var plageValues = plage.getValues();
// I added below script.
const res = plageValues.map(([e]) => 
[Object.keys(e.split(";").reduce((o, e) =>
Object.assign(o, {[e]: null})
, {})).join(";")]
);
feuille.getRange(2, 2, res.length, 1).setValues(res);
}
  • 在这个脚本中,值是在循环中创建的。然后,使用setValues将创建的值放入单元格

参考文献:

  • join((
  • setValue(value(
  • setValues(值(

最新更新