Google脚本:使用标准脚本删除重复,而不会丢失超链接

时间:2014-08-17 09:43:14

标签: google-apps-script google-sheets

情况:

我有一个电子表格,许多用户在20左右修改相同的电子表格,每分钟都会添加和跟踪事件。

我有一个脚本,可以在A列中添加超链接。

专栏(A)= HYPERLINK(" https://www.example.com/id=12345&#34 ;;" 12345")

注意:当我进入故障单ID时,A列中的每一行都会显示超链接。

问题:

  1. 当此脚本运行并删除重复数据的信息时,也清除超链接,然后列A只有没有超链接的数据。

  2. 脚本删除内容而不删除行。有时删除行而其他只删除de数据到行中。

  3. 例如:

    第10行:数据为Test1
    第11行:数据为Test1
    第12行:数据为Test3

    当脚本有时运行时删除行而第12行运行到第11行。但有时只删除第11行和第12行中的内容不移动。

    我需要这个脚本执行以下操作:

    1. 删除重复的行。
    2. 是否有可能表示Boxmsg中的Cell是重复数据?
    3. 没有丢失超链接。
    4. SCRIPT:

      function removeDuplicates() {
        var sheet = SpreadsheetApp.getActiveSheet();
        var data = sheet.getDataRange().getValues();
        var newData = new Array();
        for(i in data){
          var row = data[i];
          var duplicate = false;
          for(j in newData){
            if(row[0] == newData[j][0]){
              duplicate = true;
            }
          }
          if(!duplicate){
            newData.push(row);
          }
        }
        sheet.clearContents();
        sheet.getRange(1, 1, newData.length, newData[0].length).setValues(newData);
      }
      

      非常感谢。

1 个答案:

答案 0 :(得分:0)

第一个问题(以及问题标题中提到的问题)是您正在使用的脚本的正常结果。

脚本在电子表格中读取和写入,并且您的超链接是公式,因此当脚本将所有值(批量写入)写回到工作表后清除它你不再拥有任何公式......只是价值观。

这有点难以避免:

您应该首先阅读工作表并获取它包含的所有公式,将该信息存储在每行的某处,并引用它所属的行,然后在删除重复的行后,在其位置重写公式...

...但由于行号不再相同,您必须知道删除了哪一行,并使用原始位置减去已删除的行并跳过公式来检索工作表中的正确位置在一个删除的行......

这一切看起来都非常复杂,所以我想最好彻底改变你的重复搜索脚本,让它以不同的方式处理表格,同时寻找重复的值 AND 公式。

你应该尝试编写这样的脚本,并在遇到困难时寻求帮助。