为什么不从工作表列中删除重复项?
Why isn't it removing the duplicates from a Sheets Column?
我正在从一个列中检索值,其中有很多重复项。目标是仅保留唯一值,但我尝试过的方法中 none 有效。
这是我试过的方法:
function listaProdutos() {
const ssBDCadProd = SpreadsheetApp.openById(CAD_PRODUTO);
const sheetBDCadProd = ssBDCadProd.getSheetByName('CadProduto');
let listaProd = sheetBDCadProd.getRange(2, 6, sheetBDCadProd.getLastRow(), 1).getValues();
let uniques = [...new Set(listaProd)];
Logger.log('Únicos: ' + uniques);
}
这是另一个尝试:
function listaProdutos() {
const ssBDCadProd = SpreadsheetApp.openById(CAD_PRODUTO);
const sheetBDCadProd = ssBDCadProd.getSheetByName('CadProduto');
let listaProd = sheetBDCadProd.getRange(2, 6, sheetBDCadProd.getLastRow(), 1).getValues();
let uniques = removeDups(listaProd);
Logger.log('Únicos: ' + uniques);
}
function removeDups(array) {
var outArray = [];
array.sort();
outArray.push(array[0]);
for (var n in array) {
Logger.log(outArray[outArray.length - 1] + ' = ' + array[n] + ' ?');
if (outArray[outArray.length - 1] != array[n]) {
outArray.push(array[n]);
}
}
return outArray;
}
他们都重复记录值,我不确定我是否遗漏了数据如何进入 getValues()
的任何隐含特征
谢谢!
在您的脚本中,let listaProd = sheetBDCadProd.getRange(2, 6, sheetBDCadProd.getLastRow(), 1).getValues();
是类似于 [["f2"],["f3"],,,]
的二维数组。在这种情况下,[...new Set(listaProd)]
无法删除重复的行。当你想去除重复的行时,下面的修改怎么样?
修改后的脚本:
发件人:
let uniques = [...new Set(listaProd)];
收件人:
let uniques = [...new Set(listaProd.map(([f]) => f))];
这个return的一维数组。当你想return二维数组时,请使用如下修改。
let uniques = [...new Set(listaProd.map(([f]) => f))].map(f => [f]);
注:
- 在
Logger.log('Únicos: ' + uniques);
的情况下,即使uniques
是二维数组,也会显示f2,f3,,,,
这样的comma-separated值的值。请注意这一点。
我正在从一个列中检索值,其中有很多重复项。目标是仅保留唯一值,但我尝试过的方法中 none 有效。
这是我试过的方法:
function listaProdutos() {
const ssBDCadProd = SpreadsheetApp.openById(CAD_PRODUTO);
const sheetBDCadProd = ssBDCadProd.getSheetByName('CadProduto');
let listaProd = sheetBDCadProd.getRange(2, 6, sheetBDCadProd.getLastRow(), 1).getValues();
let uniques = [...new Set(listaProd)];
Logger.log('Únicos: ' + uniques);
}
这是另一个尝试:
function listaProdutos() {
const ssBDCadProd = SpreadsheetApp.openById(CAD_PRODUTO);
const sheetBDCadProd = ssBDCadProd.getSheetByName('CadProduto');
let listaProd = sheetBDCadProd.getRange(2, 6, sheetBDCadProd.getLastRow(), 1).getValues();
let uniques = removeDups(listaProd);
Logger.log('Únicos: ' + uniques);
}
function removeDups(array) {
var outArray = [];
array.sort();
outArray.push(array[0]);
for (var n in array) {
Logger.log(outArray[outArray.length - 1] + ' = ' + array[n] + ' ?');
if (outArray[outArray.length - 1] != array[n]) {
outArray.push(array[n]);
}
}
return outArray;
}
他们都重复记录值,我不确定我是否遗漏了数据如何进入 getValues()
谢谢!
在您的脚本中,let listaProd = sheetBDCadProd.getRange(2, 6, sheetBDCadProd.getLastRow(), 1).getValues();
是类似于 [["f2"],["f3"],,,]
的二维数组。在这种情况下,[...new Set(listaProd)]
无法删除重复的行。当你想去除重复的行时,下面的修改怎么样?
修改后的脚本:
发件人:
let uniques = [...new Set(listaProd)];
收件人:
let uniques = [...new Set(listaProd.map(([f]) => f))];
这个return的一维数组。当你想return二维数组时,请使用如下修改。
let uniques = [...new Set(listaProd.map(([f]) => f))].map(f => [f]);
注:
- 在
Logger.log('Únicos: ' + uniques);
的情况下,即使uniques
是二维数组,也会显示f2,f3,,,,
这样的comma-separated值的值。请注意这一点。