构建 Google App 脚本以将相似的行合并为一行

2023-12-13

很多人都在问我为什么要做这个。我想这样做,以便当我进行邮件合并(这从图书馆向学生发送逾期图书列表)时,我不会多次向学生发送电子邮件。我从来没有多次使用这些数据,我只用它来发送快速消息,我从不操纵或使用这些数据,所以我不在乎它是否很难使用!我希望这是有道理的!感谢您迄今为止的反馈。

  1. Google Sheet starts like this: Screen Shot #1

  2. 我希望它看起来像这样:

Screen Shot #2

  1. 我已经开始编写一些脚本,我相信你们都会嘲笑它(我对编程知之甚少)。不过,能够做到这一点就太棒了。基本上,通过将这些行的列的值放在一行中,将在第 1 列中具有相同条目的行合并起来。可以添加数字,并用逗号或换行符分隔数据。

  2. 这就是我到目前为止所拥有的......

    function myFunction() {
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var sheet = ss.getActiveSheet();
        var last = sheet.getLastRow();
    
        //find identical entries in column 1//
    
        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);
            }
        }
    
        //add information from rows of identical entries into one row using a comma//
    
        //delete empty rows// 
    }
    

这有点混乱,但它是用我的假数据运行的。希望你能让它和你的一起运行。通常我需要进行一些调整才能使这样的事情变得更加精简。我在那里有一些评论来解释一些关键项目。

  function rowMerge() {
  var firstRow = 2;
  var firstCol = 1;
  var sht = SpreadsheetApp.getActiveSheet();
  sht.getRange(firstRow, firstCol, sht.getLastRow() - firstRow + 1, sht.getLastColumn() - firstCol + 1).sort(1);
  sht.appendRow(['***','***','Control-z one more time','***','***']); //need a throwaway row to get last data element out since I'm moving out element[i-1]
  var datR = sht.getDataRange();
  var lastRow = datR.getLastRow();
  var lastCol = datR.getLastColumn();
  var datA = datR.getValues();
  sht.getRange(2,1,lastRow - firstRow + 1,lastCol - firstCol + 1).clearContent().setWrap(true);
  var datoutA = [];
  var k=1;
  var n = 0;
  for(var i = 0;i < datA.length; i++)
  {
    if(i > 1)
    {
      if(datA[i][0] == datA[i-1][0])
      {
        k++;  //k is the number of consecutive matching values
      }
      else
      {
        datoutA[n] = [];
        if(k == 1)
        {
          // if k = 1 the datA[i-1] row gets copied into output array
          for(var c = 0;c < datA[i-1].length; c++)
          {
            datoutA[n][c]=datA[i-1][c];
          }
        }
        else
        {
          //i-1 to i-k rows get merged and copied into output array
          var firstTime = true;
          for(var a = 1;a <= k;a++)//input rows
          {            
            for(var b = 0;b < datA[i].length -1;b++)//input columns
            {
                if(a > 1 || b > 0) //no delimiter for first row or first column 
                {
                  datoutA[n][b] += ', ';
                }
               if(firstTime || b == 0)// straight assignment for first row and running sum after that same with first column because we only want one of them because they're all the same.
               {
                 datoutA[n][b] = datA[i - a][b];
               }
               else
               {
                 datoutA[n][b] += datA[i - a][b];
               }
            }
            if(firstTime)//first assignment then running sums for last column
            {
              datoutA[n][datA[i].length - 1] = Number(datA[i - a][datA[i].length-1]);
            }
            else
            {
              datoutA[n][datA[i].length - 1] += Number(datA[i - a][datA[i].length-1]);
            }

            firstTime=false;
          }
          var end = 'is near';
        }
        k=1; //consecutive counter
        n++; //datoutA index
      }

    }

  } 
  var datoutR = sht.getRange(2, 1, datoutA.length , datoutA[0].length);
  datoutR.setValues(datoutA);
  var colwidth = 250;
  sht.setColumnWidth(2, colwidth);
  sht.setColumnWidth(3, colwidth);
  sht.setColumnWidth(4, colwidth);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

构建 Google App 脚本以将相似的行合并为一行 的相关文章

  • 如何像函数一样使用 google.script.run

    在 Google Apps 脚本中 我有以下脚本 function doGet return HtmlService createHtmlOutputFromFile mypage function writeSomething retur
  • 尝试获取 Google accessToken

    看起来 无论我做什么 谷歌都在竭尽全力阻止我完成这个研究项目 我的项目让我使用 Google 电子表格作为数据库 并使用所述电子表格中的数据执行程序化的 Google 图片搜索 并向最终用户显示一些结果 设置说明 我开始按照此处的说明进行操
  • 如何在 Google 文档之间复制内容和格式?

    我需要复制 Google 文档的内容 并将其附加到另一个文档 如果我使用这样的东西 newDoc getBody appendParagraph template getText 我得到了文本 但丢失了原始文件中的格式 Bold Itali
  • 如何在运行脚本之前提交活动单元格中所做的更改? (Google 表格/Google Apps 脚本)

    我正在使用 Google Apps 脚本在 Google 表格中创建提交表单 该表单位于一页上 提交内容被移至第二个隐藏页面 当用户填写表单后 他们按下提交页面上的按钮以激活脚本 我遇到的问题是 当用户填写最后一个单元格然后单击按钮时 输入
  • HTML 格式的 Google Apps 脚本

    是否可以在我的 HTML 中使用 google apps 脚本 我希望能够从外部框架 例如 Node js 以纯 Javascript 形式从表单写入电子表格 https developers google com apps script
  • Crypto-Js 库的 hmac-256 脚本返回函数结构而不是 Google Apps 脚本中的值,在外部工作正常吗?

    我正在设置一个谷歌电子表格项目来连接到我的 CryptoExchange API 但是当涉及到这个简单的 CryptoJs Hmac sha256 脚本时 它不起作用 它返回函数结构而不是值 而在外部它工作正常 看我的jsfiddle ht
  • 从 Google Apps 脚本运行保存的 bigquery 查询?

    我们经常使用 Google Apps 脚本来运行 BigQuery 查询并将其放入 Google Sheet 中 然而 工作流程很烦人 在 BigQuery 中运行查询 直到正确为止 复制 粘贴到文本编辑器以放入换行斜杠 在应用程序脚本中运
  • 我们可以使用 Google Spreadsheet 作为后端数据库吗

    我正在尝试开发一个应用程序 在其中从与某些事务相关的多个客户端获取数据 现在我想使用 Google Spreadsheet 进行一些分析 有什么方法可以使用 ASP Net MVC 使用 C 实现此目的 Google 提供 OAuth 当我
  • 使用 google apps 脚本添加大量响应

    我想制作一个脚本 添加大量 大约 1500 简历和候选人信息作为对表单的回复 我有谷歌电子表格的信息 我将其链接到表单 但我只能管理回复 即使我更改电子表格 或添加 表单中也不会发生更新 我正在添加行 但没有添加响应 那可能吗 我看到了 2
  • 使用 google.script.run 从 html 调用库函数

    我使用 Google App Script 实现库 并且使用 google script run 从库中调用函数时遇到一些困难 这是我的图书馆的代码 Code gs function ShowSideBar var html HtmlSer
  • 使用 Google Apps 脚本处理数组中输入元素中的多个文件

    我有一个表单 允许从下拉列表中选择一个项目并上传文件 项目的名称和 ID 保存在电子表格文档中 适用于一个文件 但我想上传多个文件 你能帮我修改一下脚本吗 HTML 部分如下所示 div class col md 4 col sm 6 di
  • 谷歌脚本循环性能

    我是 google 脚本的新手 我不确定为什么与 Excel VBA 的简单循环相比 我的性能如此差 我附上了下面的代码 它是一个大约 1200 行的循环 每秒删除大约 2 3 行 我写的脚本效率很低吗 我还不熟悉 Javascript 但
  • 使用 Odoo 配置 Google 电子表格

    我想在 Odoo 中获取 google 电子表格中的报告数据 我已完成以下步骤来使用 Odoo 配置 google 电子表格 在 Odoo 中安装了 Google 电子表格模块 生成的Google授权码 试图在 Google 电子表格上获取
  • 如何使用 Google Apps 脚本将文件夹从我的云端硬盘复制到团队云端硬盘?

    我发现以下 Google Apps 脚本允许我将文件夹从 MyDrive 复制到 MyDrive 以及将 SharedFolders 复制到 MyDrive function start var sourceFolder source va
  • 从 Google 电子表格中的列填充 HTML 下拉菜单

    我是 gs 的新手 所以这应该不难 我有一个 Google 电子表格 其中一列中有值 假设 A 列 我使用 gs 创建了一个自定义菜单 用户将在其中选择一个选项 单击其中一个选项 新组件 将出现一个弹出窗口 其中包含一个下拉菜单 用户应从其
  • 如何编辑范围? // Google Classroom 控制 Google Apps 脚本中学生访问的权限范围

    我是一名高中老师 正在针对 Google Classroom 编写 Google Apps 脚本 我想创建一个类似于学生成绩视图的电子表格 我的学生可以使用他们的凭据进行访问 我已经成功编写了代码 这样我就可以通过在代码中显式放置学生的 I
  • 如何将值传递到 HTML 模板侧边栏?

    我的任务是更换一些现有的 Access 数据库 我想知道你们是否可以帮助我 目前 我有一个谷歌表格 https docs google com spreadsheets d 1JS5Iwx60Zk7VL8lYz6Yj7ew4eYPhl2Nk
  • 用于清除多个范围的 Google 脚本。

    我有许多电子表格 每周填写一次 并在新的一周开始时关闭 我编写了一个脚本来遍历并清除许多不同工作表中的各种范围 请参阅下面的代码 我的问题是有没有更好的方法来做到这一点 而不是必须一次清除一个部分的范围并拥有一百万个clearContent
  • 将时间戳转换为一个数组

    在应用程序脚本 谷歌表中运行 我从 API 获取时间戳并返回此结果 1 6370611672429312E18 1 63706107263277082E18 我执行此代码并且工作正常 但问题不在数组中 我每次都需要它在数组中 const t
  • 移动设备:缺少操作

    我正在尝试执行该操作的 POST 但是 当我发出请求时 我收到代码 400 表示操作值丢失 my code function mobileAPIPOST var response UrlFetchApp fetch https www go

随机推荐