Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何在不删除公式其他列的情况下删除重复项?_Arrays_Google Apps Script_Google Sheets - Fatal编程技术网

Arrays 如何在不删除公式其他列的情况下删除重复项?

Arrays 如何在不删除公式其他列的情况下删除重复项?,arrays,google-apps-script,google-sheets,Arrays,Google Apps Script,Google Sheets,这是我的简单表格: Col A: Col B: Col C: Col D: 010Mar0100 Link =mid(A2,find(".",A2)-10,10) =vlookup(C2,MAIN!B:B,1,false) 010Mar0110 Link =mid(A3,find(".",A3)-10,10) =vlookup(C3,MAIN!B:B,1,false) 020Mar0100 Link

这是我的简单表格:

Col A:       Col B:    Col C:                       Col D:
010Mar0100   Link      =mid(A2,find(".",A2)-10,10)  =vlookup(C2,MAIN!B:B,1,false)
010Mar0110   Link      =mid(A3,find(".",A3)-10,10)  =vlookup(C3,MAIN!B:B,1,false)
020Mar0100   Link      =mid(A4,find(".",A4)-10,10)  =vlookup(C4,MAIN!B:B,1,false)
020Mar0100   Link      =mid(A5,find(".",A5)-10,10)  =vlookup(C5,MAIN!B:B,1,false)
030Mar0100   Link      =mid(A6,find(".",A6)-10,10)  =vlookup(C6,MAIN!B:B,1,false)
列C和D有我需要的返回值的公式。 A列和B列每天刷新

我想添加一个脚本来删除重复项,而不删除C列和D列中的公式

每次我使用这个脚本,它都会这样做

function removeDuplicates() {
  var ss = SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName('Data');
 var rng = sheet.getRange("A2:B")
var data = rng.getValues();
var newData = new Array();
for(i in data){
var row = data[i];
var duplicate = false;
for(j in newData){
  if(row.join() == newData[j].join()){
    duplicate = true;
  }
}
if(!duplicate){
  newData.push(row);
}
}
rng.clearContents();
sheet.getRange(1, 1, newData.length, 
newData[0].length).setValues(newData);
}

我需要做什么改变才能让它只关注A列和B列

解决方案

您要做的就是从列表中过滤出非唯一的元素。如果我正确理解您希望保持列
C
D
的完整性,您只需要通过引入辅助函数(顺便说一句,
包括
需要,如果这不是一个新项目)和
设置值
在同一
rng
(请参见下面的改进3)使您的逻辑更加清晰

/**
*删除重复项
*@param{any[]}数组二维输入
*@返回{any[]}个筛选输入
*/
常量筛选器副本=(数组)=>{
常量堆栈=[];
返回数组.filter(元素=>{
常量连接=元素连接(“”);
if(堆叠包括(连接)){
返回false;
}
堆叠。推动(连接);
返回true;
});
};
const[input,output,tbody,tbody_init]=document.queryselectoral(“#input,#output,#grid#u init,#grid”);
const buildCellGrid=(父级,网格)=>{
parent.innerHTML='';
用于(网格的常量行){
const tr=document.createElement('tr');
for(行的常量单元格){
const td=document.createElement('td');
td.textContent=单元格;
tr.append(td);
}
父项追加(tr);
}
};
input.addEventListener('change',event=>{
const{value}=event.target;
const parsedVal=JSON.parse(值);
const filtered=filterdupplicates(parsedVal);
output.textContent=JSON.stringify(过滤,空,”);
buildCellGrid(tbody_init,过滤);
buildCellGrid(tbody,parsedVal);
});
p,textarea{
利润率:0.2vw;
}
文本区{
填充:2vh 2vw;
线高:2;
调整大小:无;
宽度:125px;
高度:125px;
}
桌子{
利润率:2vh 2vw;
边界塌陷:塌陷;
}
th,td{
填充:1vh;
边框:1px实心暗灰色;
}

输入有效的二维数组

首字母 过滤
解决方案

您要做的就是从列表中过滤出非唯一的元素。如果我正确理解您希望保持列
C
D
的完整性,您只需要通过引入辅助函数(顺便说一句,
包括
需要,如果这不是一个新项目)和
设置值
在同一
rng
(请参见下面的改进3)使您的逻辑更加清晰

/**
*删除重复项
*@param{any[]}数组二维输入
*@返回{any[]}个筛选输入
*/
常量筛选器副本=(数组)=>{
常量堆栈=[];
返回数组.filter(元素=>{
常量连接=元素连接(“”);
if(堆叠包括(连接)){
返回false;
}
堆叠。推动(连接);
返回true;
});
};
const[input,output,tbody,tbody_init]=document.queryselectoral(“#input,#output,#grid#u init,#grid”);
const buildCellGrid=(父级,网格)=>{
parent.innerHTML='';
用于(网格的常量行){
const tr=document.createElement('tr');
for(行的常量单元格){
const td=document.createElement('td');
td.textContent=单元格;
tr.append(td);
}
父项追加(tr);
}
};
input.addEventListener('change',event=>{
const{value}=event.target;
const parsedVal=JSON.parse(值);
const filtered=filterdupplicates(parsedVal);
output.textContent=JSON.stringify(过滤,空,”);
buildCellGrid(tbody_init,过滤);
buildCellGrid(tbody,parsedVal);
});
p,textarea{
利润率:0.2vw;
}
文本区{
填充:2vh 2vw;
线高:2;
调整大小:无;
宽度:125px;
高度:125px;
}
桌子{
利润率:2vh 2vw;
边界塌陷:塌陷;
}
th,td{
填充:1vh;
边框:1px实心暗灰色;
}

输入有效的二维数组

首字母 过滤
在D列之后添加一列,并在该列中添加此函数。它基本上会根据A列和B列中的值将唯一/重复文本添加到唯一或双精度的行中。在If函数之前,您甚至可以使用ArrayFormula

=数组公式(如果(COUNTIFS($A$1:$A1,A1,$B$1:$B1,B1)=1,“唯一”,“重复”))

填充此列后,您可以只筛选列E上具有“唯一”的行,并且您的所有唯一行的公式都将保持不变


现在,老实说,我把这些信息上网了。我试图研究它以供参考,但无法再次找到。

在D列之后添加一列,并在该列中添加此函数。它基本上会根据A列和B列中的值将唯一/重复文本添加到唯一或双精度的行中。在If函数之前,您甚至可以使用ArrayFormula

=数组公式(如果(COUNTIFS($A$1:$A1,A1,$B$1:$B1,B1)=1,“唯一”,“重复”))

填充此列后,您可以只筛选列E上具有“唯一”的行,并且您的所有唯一行的公式都将保持不变

现在,老实说,我把这些信息上网了。我试图研究它以供参考,但无法再次找到。

getValues()
返回一个2D数组。如果要删除重复的行,则必须删除内部数组(外部数组的元素,它们是重复的)

您可以使用和这样做:

函数removeDuplicates(){
var ss=SpreadsheetApp.getActive();
var sheet=ss.getSheetByName('Data');
var rng=sheet.getRange(“A2:B”)
var data=rng.getValues();
var uniqueRows=data.reduce((唯一,行)=>{
var duplicate=unique.some(uniqueRow=>JSON.stringify(uniqueRow)==JSON.stringify(row));
如果(!duplicate)unique.push
const remD = () =>
  SpreadsheetApp.getActive()
    .getSheetByName('Data')
    .getRange('A2:B')
    .removeDuplicates();