如何使用Google脚本中的URL参数过滤Google表格列中的数据?

2024-02-01

我正在尝试 Google 脚本,我想根据关键字参数显示数据,稍后将 C 列称为数据过滤器,它将根据参数关键字中搜索的内容进行显示。

例如,在我之前的项目中,我有一个参数作为分页

?page=1&limit=10

现在我有一个新问题要解决,即搜索和分页,我将 b 列作为搜索的参考

?page=1&limit=10&search=San Andreas

我如何实现下面的代码?

function doGet(e) {
  var page = e.parameter.page || 1;
  var limit = e.parameter.limit || 10;
  var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/10S8Igzt1tpqUBgJHVKpny-2s6G3Y3-vFsLMvlZVqpkc/edit#gid=810612111");
  var sheet = ss.getSheetByName("list_film");
  return getUsers(sheet, page, limit); 
}

function getUsers(sheet, page, limit){
  var rows = sheet.getDataRange().getValues();
  var dataArray = rows.splice(limit * (page - 1), limit).reduce((ar, [a, b, c, d]) => ar.concat({id: a, year: b, title: c, img: d}), []);
  var jo = {};
  jo.user = dataArray;
  var result = JSON.stringify(jo);
  return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
}

Edit:

我的意思是C栏

编辑解决:

我想对@Tanaike 表示感谢,他为我提供了如此大的帮助!

这是我的最终代码

function doGet(e) {
 var page = e.parameter.page || 1;
  var limit = e.parameter.limit || 10;
  var search = e.parameter.search || "";
  var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/10S8Igzt1tpqUBgJHVKpny-2s6G3Y3-vFsLMvlZVqpkc/edit#gid=810612111");
  var sheet = ss.getSheetByName("list_film");
  return getUsers(sheet, page, limit, search);
}

function getUsers(sheet, page, limit, search){
  var lowCase = search.toString().toLowerCase();
  var rows = sheet.getDataRange().getValues().filter(([,,c]) => c.toString().toLowerCase().includes(lowCase));
  var dataArray = rows.splice(limit * (page - 1), limit).reduce((ar, [a, b, c, d]) => ar.concat({id: a, year: b, title: c, img: d}), []);
  var jo = {};
  jo.user = dataArray;
  var result = JSON.stringify(jo);
  return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
}

我相信你的目标如下。

  • 您想要从电子表格的“list_film”工作表中检索值SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/10S8Igzt1tpqUBgJHVKpny-2s6G3Y3-vFsLMvlZVqpkc/edit#gid=810612111").
  • 您想要通过搜索值来检索值search来自“B”列。

修改要点:

  • From e.parameter.page, e.parameter.limit and ?page=1&limit=10&search=San Andreas在您的脚本中,我了解到您正在使用网络应用程序。
  • 在这种情况下,需要使用San Andreas of ?page=1&limit=10&search=San Andreas like e.parameter.search.
  • 我想建议修改sheet.getDataRange().getValues() in getUsers通过增加filter。就像是sheet.getDataRange().getValues().filter(([,b]) => b == search)

当以上几点反映到您的脚本中时,它会变成如下所示。

修改后的脚本:

  var page = e.parameter.page || 1;
  var limit = e.parameter.limit || 10;
  var search = e.parameter.search || "";
  var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/10S8Igzt1tpqUBgJHVKpny-2s6G3Y3-vFsLMvlZVqpkc/edit#gid=810612111");
  var sheet = ss.getSheetByName("list_film");
  return getUsers(sheet, page, limit, search); 
}

function getUsers(sheet, page, limit, search){
  var rows = sheet.getDataRange().getValues().filter(([,b]) => b == search);
  var dataArray = rows.splice(limit * (page - 1), limit).reduce((ar, [a, b, c, d]) => ar.concat({id: a, year: b, title: c, img: d}), []);
  var jo = {};
  jo.user = dataArray;
  var result = JSON.stringify(jo);
  return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
}
  • In this case, when it requests to https://script.google.com/macros/s/###/exec?page=1&limit=10&search=San Andreas, San Andreas is searched from the column "B" of sheet "list_film" and the rows, which are the same with San Andreas, are returned.
    • 如果您想检索包括以下内容的值search, 请用b.toString().includes(search)代替b == search.

Note:

  • 当您修改Web Apps的脚本时,请将Web Apps重新部署为新版本。这样,最新的脚本就会反映到 Web 应用程序中。请小心这一点。

  • 虽然我不确定“B”列的值,但如果上面的脚本不是您期望的结果,请尝试修改sheet.getDataRange().getValues().filter(([,b]) => b == search) to sheet.getDataRange().getDisplayValues().filter(([,b]) => b == search)并再次测试。

  • 如果您想与其他列而不是“B”列进行比较,例如,当您想比较search对于“C”栏,请修改filter(([,b]) => b == search) to filter(([,,c]) => c == search).

参考:

  • filter() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
  • 包括() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes

Added:

修改要点:

  • 从你的my last code https://pastebin.com/59XjR44C如下,发现我建议的脚本没有正确使用。

       function doGet(e) {
       var page = e.parameter.page || 1;
        var limit = e.parameter.limit || 10;
        var search = e.parameter.search || "";
        var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/10S8Igzt1tpqUBgJHVKpny-2s6G3Y3-vFsLMvlZVqpkc/edit#gid=810612111");
        var sheet = ss.getSheetByName("list_film");
        return getUsers(sheet, page, limit, search); 
      }
    
      function getUsers(sheet, page, limit, search){
        var rows = sheet.getDataRange().getDisplayValues().filter(([,b]) => b == search);
        var rows = sheet.getDataRange().getValues().slice(1);
        var rows = sheet.getDataRange().getValues().reverse();
        var dataArray = rows.splice(limit * (page - 1), limit).reduce((ar, [a, b, c, d]) => ar.concat({id: a, year: b, title: c, img: d}), []);
        var jo = {};
        jo.user = dataArray;
        var result = JSON.stringify(jo);
        return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
      }
    
  • At var rows = sheet.getDataRange().getValues().slice(1); and var rows = sheet.getDataRange().getValues().reverse();,使用检索值sheet.getDataRange().getValues()。这样,值就不会被过滤。我认为这就是您当前问题的原因。

当你当前的脚本修改后,就会变成如下所示。

修改后的脚本:

function doGet(e) {
 var page = e.parameter.page || 1;
  var limit = e.parameter.limit || 10;
  var search = e.parameter.search || "";
  var ss = SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/10S8Igzt1tpqUBgJHVKpny-2s6G3Y3-vFsLMvlZVqpkc/edit#gid=810612111");
  var sheet = ss.getSheetByName("list_film");
  return getUsers(sheet, page, limit, search);
}

function getUsers(sheet, page, limit, search){
  var rows = sheet.getDataRange().getDisplayValues().filter(([,,c]) => c == search);
  var dataArray = rows.splice(limit * (page - 1), limit).reduce((ar, [a, b, c, d]) => ar.concat({id: a, year: b, title: c, img: d}), []);
  var jo = {};
  jo.user = dataArray;
  var result = JSON.stringify(jo);
  return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
}
  • 如果要删除第一个标题行并返回相反的值,请修改函数getUsers如下。

      function getUsers(sheet, page, limit, search){
        var rows = sheet.getDataRange().getValues().slice(1).filter(([,,c]) => c == search).reverse();
        var dataArray = rows.splice(limit * (page - 1), limit).reduce((ar, [a, b, c, d]) => ar.concat({id: a, year: b, title: c, img: d}), []);
        var jo = {};
        jo.user = dataArray;
        var result = JSON.stringify(jo);
        return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
      }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用Google脚本中的URL参数过滤Google表格列中的数据? 的相关文章

  • 如何在多个工作表上运行脚本,Google Sheets

    我有一个脚本 想在 Google 工作表中的特定选项卡上运行 但不一定在所有选项卡上运行 我尝试执行两个不同名称的脚本 但只有最后一个保存的脚本会运行 如何编写此脚本以在特定选项卡上运行 这是我的开始脚本 function onEdit v
  • BigQuery REGEXP_MATCH 和重音:边界通配符失败?

    在 GAS 中 我可以正确地将重音符号与具有边界字符的正则表达式相匹配 例如 b b 仅当字符 是单独的单词时才匹配 这在 GAS 中有效 function test regExp var str la s ance est Paris v
  • Google Apps 脚本:连接日期和时间

    更新 要使用 AppsScript 创建 Google 日历事件 我们可以使用以下简单方法createEvent eventName startTime endTime 我已经使用过这个并且没有任何问题 但我使用的唯一日期格式是谷歌表格中的
  • Google电子表格脚本创建特定范围内的数据验证

    我正在尝试这个脚本来创建数据验证 但它总是不起作用 function test validation var Spread SpreadsheetApp getActiveSpreadsheet var Sheet Spread getSh
  • 用于创建文件夹的应用程序脚本无法在共享驱动器中运行

    谷歌应用程序脚本新手在这里 我发现这段代码可以帮助使用 Google Sheet 中的输入在我的个人 Google Drive 中创建文件夹 来源 Youtube 上的 Google Sheet Community 但是 当我尝试在共享的
  • 使用应用程序脚本将 MS Word 文件(保存在云端硬盘中)转换为 Google 文档

    我被某些事情困住了 找不到解决办法 有没有办法使用文件 url 或 id 将存储在 Google Drive 中的 MS Word 文件转换为 Google 文档 我目前有一个电子表格 其中包含文件的网址 或者 也可以使用 python 脚
  • 如何使用 Google Apps Docs 脚本将光标移动到文档的开头?

    我正在用我的 Google 文档编写 Google Apps 脚本的脚本 并想知道如何将光标移动到文档的开头 我最后想做的只是用一些字符串替换第一行 这个很简单 你可以使用setCursor method 记录在这里 https devel
  • 如何像函数一样使用 google.script.run

    在 Google Apps 脚本中 我有以下脚本 function doGet return HtmlService createHtmlOutputFromFile mypage function writeSomething retur
  • 如何在多个文档中使用 Google Apps 脚本

    我有一个谷歌应用程序脚本 我想在多个文档中使用它 我也可能想稍后在这些文档中更改它 因此我必须使用same所有这些文档中的脚本 而不是该脚本的副本 我知道以下问题可能属于重复问题 但我不愿意接受它的答案 Google Apps 脚本 如何在
  • 如何在运行脚本之前提交活动单元格中所做的更改? (Google 表格/Google Apps 脚本)

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

    我想创建一个公式 在某个单元格更改上创建时间戳 下面的代码就可以了 我现在想做的是将公式转换为纯文本 将该时间戳锚定到工作表上 如果您手动执行此操作 您将选择时间戳 复制它们并将它们粘贴为值 我不想手动执行此操作 因此我创建了下面的脚本 它
  • 我们可以使用 Google Spreadsheet 作为后端数据库吗

    我正在尝试开发一个应用程序 在其中从与某些事务相关的多个客户端获取数据 现在我想使用 Google Spreadsheet 进行一些分析 有什么方法可以使用 ASP Net MVC 使用 C 实现此目的 Google 提供 OAuth 当我
  • 如何使用 Google Sheets (v4) API 修改依赖于特定单元格的特定数据行?

    我想找到一种使用 Google API 根据我提供的条件修改特定行数据的方法 类似于 SQL 的东西 UPDATE Customers SET ContactName Alfred Schmidt City Frankfurt WHERE
  • Google 电子表格中带有 len 的 Countif

    我有一个像这样的 XXX 列 XXX A Aruin Avolyn B Batracia Buna 我想仅当单元格中的字符串长度 gt 1 时才对单元格进行计数 怎么做 我想 COUNTIF XXX1 XXX30 LEN gt 1 但我应该
  • 用于设置形状颜色的 Google Apps 脚本

    我正在查看 Google Apps 脚本参考here https developers google com apps script reference slides fill setSolidFill Color 并注意到有一种方法set
  • Google 表格 - ARRAYFORMULA 中的 VLOOKUP

    我正在尝试在 Google 表格中的数组公式内进行 Vlookup 我有两张纸 S1 和 S2 每个列都有 3 个相同的列 A 列 日期 B 列 名称 和 C 列 付款类型 我想根据日期和姓名组合匹配将付款类型从表 2 读取到表 1 这意味
  • 从电子表格脚本中调用 Web 应用程序脚本?

    如何从 Google 电子表格容器中的脚本调用外部 Google Web App 脚本 我有许多动态创建的电子表格 并希望它们全部调用一个 Web 应用程序 以实现一致性和易于维护 看看这篇博文 触发主从电子表格之间的更新 http www
  • 使用 Odoo 配置 Google 电子表格

    我想在 Odoo 中获取 google 电子表格中的报告数据 我已完成以下步骤来使用 Odoo 配置 google 电子表格 在 Odoo 中安装了 Google 电子表格模块 生成的Google授权码 试图在 Google 电子表格上获取
  • 如何隐藏工作表?

    如何使用 googleScript 隐藏电子表格应用程序中的一些工作表 我有一个包含多个工作表的电子表格 我想使用 googlScript 将电子表格缩小为仅第一个可见工作表和所有其他隐藏工作表 sheet hideSheet https
  • 谷歌表格在一行上的不同单元格范围上添加时间戳

    我一直试图在与该行上两个不同单元格范围相对应的行上放置两个时间戳 我已成功使用此脚本对行上的任何更改 第 5 列之后 添加时间戳 我想要的是 如果单元格范围 F 到 L 发生任何更改 则在 E 列中放置一个时间戳 然后 如果从 N 列到 Z

随机推荐

  • Active Directory:此处是否存在无效字符转义以及如何处理

    我已经构建了一个通过 SSIS 中的 C 脚本组件从活动目录中提取数据的过程 该数据需要加载到 SQL Server 中 我遇到了 DistinguishedName DN 和 CanonicalName CN 包含双引号 和反斜杠 转义字
  • ASP.NET 5 (MVC 6) - 资源本地化

    我花了大约一周的时间试图了解本地化在 ASP NET Core 1 0 中如何工作 我已经测试了很多选项 但我无法使其工作 我已经读过有关该错误的信息视觉工作室 https github com aspnet Localization is
  • 在 MATLAB 中计算组平均值/中位数,其中组 ID 位于单独的列中

    我有一列包含每个参与者的组 ID 有三组 因此该列中的每个数字都是 1 2 或 3 然后我有第二列 其中包含每个参与者的响应分数 我想计算每组内的平均 中位数响应分数 我已经设法通过循环每一行来做到这一点 但我觉得这是一个缓慢且次优的解决方
  • 使用 iphone sharekit 在一篇文章中发布多个 url

    我想使用共享工具包发布如下文本 在 Twitter Facebook 邮件上 Hi 这是分享文字 点击这里做某事 单击此处查看其他内容 Cheers 我有以下代码 IBAction shareOnTwitter id sender SHK
  • 如何区分点击事件和拖放事件?

    我对既可拖动又具有单击事件的元素有疑问 drag mousedown function class click function div class drag class div 当我拖放元素时 单击事件也会被触发 如何预防呢 您也可以同时
  • 获取给定地址的 std::vector 元素的索引

    假设我有一个 std vector 并且通过某种方式获得了第 n 个元素的地址 给定 std vector 的基地址 是否有一种简单的方法 比迭代向量更快 来获取元素出现的索引 假设我确定该元素位于向量中 由于您知道该元素位于向量内 并且向
  • 为 Swagger-UI 添加基本授权

    我目前部署了一个 swagger 项目 但在向其添加一些基本授权时遇到问题 当前 当您单击 尝试一下 时按钮 您需要登录帐户才能访问结果 我有一个帐户 我希望每次有人尝试访问 api 时都会自动使用该帐户 下面是我的项目的index htm
  • 如何在 HTML 中点击时隐藏或显示 div

    我有四个 HTMLdiv我想在单击时显示和隐藏它们如何执行此操作 div class image one img src image imageone png div div class image two img src image im
  • DOMPDF 不支持阿拉伯字符

    任何人都可以帮助我吗 我正在使用 DOMPDF 它运行良好 但不适用于阿拉伯字符 它显示了这些 我尝试使用 在 head 标签中 还 但它不起作用 请在这件事上给予我帮助 提前致谢 在你的 html 中使用下面的样式
  • 在我的 for 循环上进行计算,并希望使用某些函数在没有 for 循环的情况下进行计算

    dec 0 1 data np array 100 200 300 400 500 我有一个像这样的 for 循环 y np zeros len data for i in range len data if i 0 y i 1 0 dec
  • 使用 Moq 模拟数据集

    我正在尝试开始使用起订量 但无法找到任何好的资源来完成我需要的事情 我有一个数据接口类 它有一个 Get 方法 该方法通过存储过程返回数据集 这就是代码的编写方式 我目前无法更改它 因此必须以这种方式完成 我想通过模拟数据集并返回数据来测试
  • iOS 13 中使用 Quickblox 和 CallKit 的传入视频通话问题

    功能 我在应用程序中实现了 QuickBlox 视频通话 问题 如果应用程序处于后台 收件人不会收到来电通知 结果 视频通话在 iOS 12 上运行良好 但在 iOS 13 上仅出现问题 我查了很多链接来解决这个问题 https docs
  • Xcode 9 中 UINavigationController 方法 setToolbarHidden bug:无限计算自动布局约束导致 OOM

    我有一个实例UINavigationController嵌套在UITabBarController 我使用导航控制器到达某个视图控制器 选项卡栏仍然可见 然后从该控制器转到第二个视图控制器 选项卡栏不再可见 在第二个视图控制器中 一旦我调用
  • android 在发布版本中添加 DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION

    使用 api 级别 33 构建我的应用程序后 android 正在合并清单中添加新权限
  • 更改 statelistdrawable 文本颜色 android 按钮

    我正在开发 Android 应用程序 我对按钮的每个状态 按下 正常 有不同的背景可绘制和文本颜色 我创建了 statelistdrawable 对象以便能够添加背景可绘制对象 但我现在的问题是如何设置文本颜色 有人可以帮忙吗 Button
  • 单击提交按钮的值

    这应该是非常简单的 我正在检查是否使用 jquery 提交表单 该表单有多个具有不同值的提交按钮
  • 如何捕获 Mule foreach 作用域中的异常但保持进程继续进行?

    我是 Mule ESB 的新手 我创建了一个简单的流程 循环遍历订单列表并调用 Magento API 来逐一更新订单状态 我的问题是 如果 foreach 范围内发生任何异常 整个过程就会结束 我尝试使用异常策略来捕获异常 它确实捕获了异
  • ng-repeat 不适用于表 但适用于列表
  • 我有以下代码 Plnkr 上的代码 http plnkr co edit ULoa3SxPAFIPdHTvbguF p preview 我正在尝试使用ng repeat在一个表内 但这是行不通的 而相同的代码适用于列表 li 这是相同的片段
  • 为 NSTableView 单元格绘制带有边框和背景的文本

    我有一个基于单元格的表格视图 我想在该表格视图中显示某种标签 最好不必使用基于视图的表格视图 是否有一种优雅的方式来实现类似此处示例 HTML 的效果 最好还具有背景颜色 如果您想坚持使用基于单元格的表格视图 您可以子类化NSCell并覆盖
  • 如何使用Google脚本中的URL参数过滤Google表格列中的数据?

    我正在尝试 Google 脚本 我想根据关键字参数显示数据 稍后将 C 列称为数据过滤器 它将根据参数关键字中搜索的内容进行显示 例如 在我之前的项目中 我有一个参数作为分页 page 1 limit 10 现在我有一个新问题要解决 即搜索