Google apps script 如何检查整个谷歌电子表格中的重复项

Google apps script 如何检查整个谷歌电子表格中的重复项,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我正在努力完成一些事情,也许是为了雄心勃勃,但也许你可以帮我一把 我有一个谷歌电子表格,有4张表格: 大师Senpai | Chevez San | Gabbie Sama | Mario Chan “Senpai大师”是一张包含合并数据的表格,这意味着其他三张表格中的所有内容都在“Senpai大师”范围内 这些电子表格目前正被3位同事使用(你可能会猜到Chevez Gabbie和Mario),我需要的是让他们每个人都能够确认或检查他们输入的任何信息是否重复 所有的工作表从A到L都有相同的标题(

我正在努力完成一些事情,也许是为了雄心勃勃,但也许你可以帮我一把

我有一个谷歌电子表格,有4张表格:

大师Senpai | Chevez San | Gabbie Sama | Mario Chan

“Senpai大师”是一张包含合并数据的表格,这意味着其他三张表格中的所有内容都在“Senpai大师”范围内

这些电子表格目前正被3位同事使用(你可能会猜到Chevez Gabbie和Mario),我需要的是让他们每个人都能够确认或检查他们输入的任何信息是否重复

所有的工作表从A到L都有相同的标题(总共12列),我想检查J列的重复项

举个例子,如果马里奥想知道他刚刚输入的加比或切维斯的信息是否已经输入了,我想让那个单元格用红色背景格式化

基本上阅读最后3页的信息(忽略“大师Senpai”页),并检查是否有重复,如果发现,请将其涂成红色背景

我一直在读关于它的书,发现了一些类似于我正在尝试做的事情

/**
 * Finds duplicate rows in the active sheet and colors them red,
 but only pays attention to the indicated columns.
 */

function findDuplicates() {
  // List the columns you want to check by number (A = 1)
  var CHECK_COLUMNS = [2,3,5,6];

  // Get the active sheet and info about it
  var sourceSheet = SpreadsheetApp.getActiveSheet();
  var numRows = sourceSheet.getLastRow();
  var numCols = sourceSheet.getLastColumn();

  // Create the temporary working sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var newSheet = ss.insertSheet("FindDupes");

  // Copy the desired rows to the FindDupes sheet
  for (var i = 0; i < CHECK_COLUMNS.length; i++) {
    var sourceRange = sourceSheet.getRange(1,CHECK_COLUMNS[i],numRows);
    var nextCol = newSheet.getLastColumn() + 1;
    sourceRange.copyTo(newSheet.getRange(1,nextCol,numRows));
  }

  // Find duplicates in the FindDupes sheet and color them in the main sheet
  var dupes = false;
  var data = newSheet.getDataRange().getValues();
  for (i = 1; i < data.length - 1; i++) {
    for (j = i+1; j < data.length; j++) {
      if  (data[i].join() == data[j].join()) {
        dupes = true;
        sourceSheet.getRange(i+1,1,1,numCols).setBackground("red");
        sourceSheet.getRange(j+1,1,1,numCols).setBackground("red");
      }
    }
  }

  // Remove the FindDupes temporary sheet
  ss.deleteSheet(newSheet);

  // Alert the user with the results
  if (dupes) {
    Browser.msgBox("Possible duplicate(s) found and colored red.");
  } else {
    Browser.msgBox("No duplicates found.");
  }
};

/**
 * Adds a custom menu to the active spreadsheet
 */
function onOpen() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var entries = [{
    name : "Find Duplicates",
    functionName : "findDuplicates"
  }];
  sheet.addMenu("My Scripts", entries);

  fillFormulas();
};
/**
*在活动工作表中查找重复的行并将其涂成红色,
但只注意指示的列。
*/
函数findDuplicates(){
//按编号(A=1)列出要检查的列
var CHECK_列=[2,3,5,6];
//获取活动工作表及其相关信息
var sourceSheet=SpreadsheetApp.getActiveSheet();
var numRows=sourceSheet.getLastRow();
var numCols=sourceSheet.getLastColumn();
//创建临时工作表
var ss=SpreadsheetApp.getActiveSpreadsheet();
var newSheet=ss.insertSheet(“FindDupes”);
//将所需行复制到FindDupes工作表
对于(var i=0;i

但是,这只会在同一张表中查找重复项。我试图完成的是阅读并比较最后3张表中的信息。

您首先需要提出代码如何完成此操作的逻辑,以及如何处理所有可能的不同情况。如果你把三张纸上的数据合并在一起,然后发现了一个副本,你怎么知道副本是从哪里来的?或者您是否合并了所有非当前用户的工作表的数据?或者您不合并任何数据,并一次检查其他用户的每张表?如果您这样做,那么您必须知道当前用户是谁。你打算怎么做?你基本上是在问一个数据库设计问题。逻辑是在运行代码时分析未编译的数据(不包括编译信息的表),我想从所有3张表中读取J列(第10列)上的信息(再次忽略“Master Senpai”表)如果发现重复项,则不管作者是谁或运行代码的人是谁,都会对其进行标记。标记一个重复单元格值的所有实例,即如果在“Chevez San”上,我在J列第4行([J4],{R5C10})上有苹果,在“Mario Chan”上,我们在J列第1行([J1],{R1C10})上有苹果。我希望在运行代码时,两个单元格的格式都是红色背景。从您需要做的最简单的事情开始。您需要以某种方式从特定的工作表中获取数据。你可以按名字得到这张表。为代码添加属性-它可以帮助其他人理解代码,这是正确的做法。这是卡尔·克拉尼奇写的,也出现在。