google-apps-script - 在将项目复制到新工作表之前,如何检查列表中的重复项?
问题描述
我想将数据从一张(Sheet1)复制到另一张(Sheet2)。在数据复制之前,我想在两张纸上的 A 列中检查重复项,以便只复制非重复项。我特别难以编写 IF 语句和 FOR 循环来执行此操作。
我有以下代码和图片:
function Demo() {
var Sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1");
var Sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet2");
var ColumntoSearch = 1;
var LastRow = Sheet1.getLastRow();
var LastRow2 = Sheet2.getLastRow();
//Gets range and values to compare for duplicates
var Range = Sheet1.getRange(2, ColumntoSearch,LastRow, 1);
var Values = Range.getValues();
logger.log("The Values to transfer over are: " + Values);
//Gets range and values to compare duplicates to
var Range2 = Sheet2.getRange(5, 1, LastRow2, 1)
var Values2 = Range2.getValues();
logger.log("The Values to Search are: " + Values2);
//Sets the amount of data to copy over
var NumberofColumns = 2;
var NumberofRows = 1;
var DestRow = Sheet2.getLastRow()+1;
//Compares all the material codes for duplicates and copies over the non-duplicates
var dt=new Date();
var dv=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf();
var d=0;
for(var i=0;i<Values.length;i++) {
if((???????)) {
var RangetoCopy=Sheet1.getRange(i-d+5,1,NumberofRows,NumberofColumns);
var DestRange=Sheet2.getRange(Sheet2.getLastRow()+1,1,NumberofRows,NumberofColumns);
RangetoCopy.copyTo(DestRange);
d++;}}
Logger.log("Next Destination Row: " + DestRow);
}
解决方案
尝试这样的事情:
function checkForDupesAndCopy() {
var ss=SpreadsheetApp.getActive();
var sh1=ss.getSheetByName("Sheet1");
var sh2=ss.getSheetByName("Sheet2");
var ColumntoSearch = 1;
var rg1=sh1.getRange(2,1,sh1.getLastRow()-1,1); //cola sheet1
var vA1=rg1.getValues();
var rg2=sh2.getRange(5,1,sh2.getLastRow()-4,1)
var vA2=rg2.getValues();
var vlist=vA2.map(function(r){return r[0];});
var dt=new Date();
var dv=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valueOf();
for(var i=0;i<vA1.length;i++) {
if(vlist.indexOf(vA1[i][0])==-1) {
var RangetoCopy=sh1.getRange(i+2,1,1,2);
var DestRange=sh2.getRange(sh2.getLastRow()+1,1,1,2);
RangetoCopy.copyTo(DestRange);
}
}
}
注意:我根据自己的一些数据对此进行了测试。
推荐阅读
- haskell - Haskell:为什么我不能在这个小函数中使用 last 而不是 tail ?
- java - 当使用 Spring JPA EntityManager 本机查询删除数据库时,遇到 SQLGrammarException
- java - 带有方法拦截器的基于接口的策略模式
- sql - 替换oracle中没有固定长度的子字符串
- worldpay - 在 cnp API(worldpay 支付网关)中如何以及在何处发送 xml 数据?
- python - Python中的LDA主题建模以及完成后如何映射新评论(reddit)
- javascript - 为什么 For 循环在没有正确初始化的情况下仍然可以工作?
- android - android,执行时找不到命令行程序
- mysql - 通过外键从其他表中选择数据
- javascript - 如何在 React 中将数据从子组件发送到父组件