需要帮助找出如何修改Google表格脚本

时间:2014-03-19 17:52:33

标签: google-apps-script

我理解了一些编程基础知识并且做了一些编码,但它已经好几年了。我很乐意离开练习,需要一些帮助。我知道我想要做的事情的逻辑......我只是不确定如何编写或修改现有的脚本来实现它。

我正在使用Google表格电子表格,其中包含有关已提交修复的移动设备的数据。我现在用来跟踪已经多次提交维修的设备的过程是手动和耗时的,我知道必须有一种方法可以使脚本变得更容易。

这是我希望改进的过程:

  1. 输入序列号&将相关数据放入电子表格中的新行。
  2. 使用Ctrl-F搜索之前是否输入了序列号。
  3. 将具有匹配序列号的所有行复制到单独的电子表格中。
  4. 突出显示第一个电子表格中的复制行,以表明它们已被复制到重复列表中。
  5. 如果我一次只能在电子表格中添加一两个,那么进行此手动检查并不是什么大问题。但有时我会得到一批数十甚至数百个条目...然后它变得非常不切实际。

    我在脚本库中进行了搜索,发现了这个: 在所选范围中查找重复项 给定选定的范围,此脚本将识别所有非空白的重复单元格,并列出它们。通过konigsberg@google.com

    那个脚本是我的发布点。它有点帮助...我可以选择带有序列号的列,然后运行此脚本,它会输出一个对话框,其中列出了多次出现的所有序列号。

    看起来它只是转储数组的输出,每个数组都用逗号分隔,因此看起来不是很漂亮,但我可以手动将列表复制到记事本中取出逗号并将其放入列表中,然后使用上面列出的手动过程从该列表开始工作,以确保复制了所有重复项。橙色突出显示让我知道我已经复制了一行,所以我不会多次添加相同的条目。仍然不太理想,但至少它缩小了我必须工作的清单。

    短期内,如果我可以弄清楚如何格式化该对话框中的输出,那么它会更多"漂亮",或者用逗号和空格分隔序列号只是一个逗号,或在新行上列出每个序列号,这会让我更开心。

    理想情况下,如果我可以自动完成整个比较&将重复复制到新的电子表格过程中,这样我就可以在我的主电子表格上运行脚本,最后得到一个列表,其中包含有关多次提交修复的设备的所有数据行,这样会更好。

    或者,如果我在输入数据时能找到一种方法,那么它会自动检查序列号,让我知道它是否重复,并确保所有与该序列号相关的行已被复制到另一个电子表格中,这也非常棒。

    如果有人以简单(非常)的方式提出任何建议,我将非常感激。

1 个答案:

答案 0 :(得分:0)

你应该知道StackOverFlow肯定不是一个要求现成代码的地方,你已经在你的帖子上做了一个cloe投票(!)但是因为我发现这个用例很有趣并且可能对其他人有用我决定为它建议一个代码。

以下是它的工作原理:您必须定义哪个列是序列号,在空白单元格中输入您想要获取的序列号,并从那里运行此函数。

它将创建一个名为&#34的第二张表;结果:序列号"使用相同的标题和所有重复项,除了您刚输入的那个。

test sheet shared view only, make a copy to try it

代码:

function copyNonUniqueToSheet() {
  var sh = SpreadsheetApp.getActiveSpreadsheet();
  var ss = sh.getSheetByName('Sheet1');
  var data = ss.getDataRange().getValues();
  var headers = data.shift();
  var column = 1;
  var selectedRow = ss.getActiveCell().getRowIndex()-2;// does not work in new version of spreadsheets for now
  Logger.log(selectedRow);
 // selectedRow = Browser.inputBox('enter row number where you entered the serial number')
  var item = data[selectedRow][column-2];
  var newSheetData = []
  newSheetData.push(headers);
  for(var n in data){
    if(n ==selectedRow){continue};// remove this line if you want to include the original occurence
    if(data[n][column-1] == item){
      newSheetData.push(data[n]);
      ss.getRange(Number(n)+2, column).setBackground('yellow');
    }
  }
  sh.insertSheet('results ('+(sh.getNumSheets())+') :'+item).getRange(1,1,newSheetData.length,newSheetData[0].length).setValues(newSheetData);    
}
编辑:我忘记了新版电子表格中存在一个错误:getActiveCell总是返回索引1 ...因此选择不起作用。同时,使用Browser.input手动输入行号。