如何使用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表格列中的数据? 的相关文章

  • QUnit 删除依赖项上的方法会破坏针对该依赖项的测试

    在 Google Apps 脚本中 我正在对我正在开发的应用程序进行单元测试 使用 QUnit https github com simula innovation qunit tree gas gas 使用测试驱动开发 正在测试的代码 我
  • getActiveRange 不返回当前选择

    这应该是一个简单的问题 但我自己无法破解 我想将活动工作表中当前选定的单元格复制到名为 data 的数组中 var sheet SpreadsheetApp getActive getActiveSheet var selection sh
  • 如何在公式中的 & 之间添加换行符以生成 QR URL

    我正在谷歌表格中创建一个电子表格 用于跟踪财产房间的库存 我使用二维码作为标签 将其放置在房产上 并将与该特定房产的相关信息相关联 我正在使用以下代码 image https chart googleapis com chart chs 2
  • 在 Google Apps 脚本中创建插件

    我已经整理了一些我想在其他 Google 工作表中访问的代码 但是 由于它使用 SpreadsheetApp getUi 因此代码必须绑定到工作表 因此 我决定创建代码作为附加组件 不幸的是 除非我打开应用程序脚本页面 否则附加组件不会出现
  • 如何在谷歌表格查询中转义双引号和单引号?

    我在谷歌表格单元格中有这个查询 QUERY Sheet1 A2 F SELECT WHERE A te xt text 0 我可以像这样转义双引号 text text 但是我怎样才能逃脱双引号和单引号呢 te xt text 一种可能的替代
  • 使用 Google App Script 从一个电子表格跳转到另一个电子表格

    我有一个脚本 仅当我位于运行代码的当前工作表中时才有效 在 A1 中 我有一个复选框 其作用是刷新 api 请求 因此 我下面的代码单击复选框并获取新数据 所以我的代码的目的基本上是单击 A1 中的复选框 但是 运行此代码只会激活复选框 但
  • 为什么电子邮件正文给出不同的输出?

    我正在尝试触发来自 Google 应用程序脚本的电子邮件 const body HtmlService createHtmlOutput A b new task b have been added to the Task Manager
  • 列出 Google 云端硬盘上特定演示文稿/文档的所有共享用户

    我们需要一份完整的列表 列出已获得 Google 云端硬盘上特定演示文稿 文档的 共享 查看权限的人员 我们有屏幕截图 但可能还不够 我们如何以编程方式检索这些信息 附加到 a 的属性File对象包括三个与用户相关的项目 Owner 一个单
  • Google Apps 脚本自动生成的库文档

    我目前正在开发一个 Google Apps 脚本库 它基本上将电子表格视为数据库对象 目前 该库有两个相同的功能 例如 Opens and creates a query object for a spreadsheet with the
  • 我正在尝试将变量从 Google 脚本传递到 HtmlOutputFromFile

    我正在尝试创建一个带有下拉列表的输入框 其中该列表基于从电子表格中提取的二维数组 到目前为止 我的研究告诉我 如果我将 HtmlService createHtmlOutputFromFile 存储在一个变量中 我就可以 设置该变量的属性
  • 正则表达式 - 使用正则表达式提取电子邮件文档的子字符串

    我正在尝试使用正则表达式提取电子邮件文档的子字符串 我正在在线测试正则表达式 它运行得很好 在线正则表达式测试器 https regex101 com r BbWBPk 1 我有一个功能可以检查 Google Apps 脚本上的正则表达式
  • 根据条件格式化货币

    Google Apps 脚本新手 但有一些 VBA 编码经验 我希望能够根据不同的单元格输入决定单元格的数字格式 eg Col A 客户名称 验证范围 B 栏 货币类型 英镑 美元 欧元 经过验证的列表 Col C 费用 100 用户免费类
  • 如何下载以前保存的 Google Apps 脚本修订版本?

    我仍在尝试从中恢复不知何故 丢失 了 Google Apps 脚本 https stackoverflow com questions 33697789 当我创建脚本的副本以将代码分叉到另一个项目时 我的想法是尝试通过驱动器 API 下载
  • 电子表格的 Google 脚本(If 语句)

    我希望有人能帮助我解决这个问题 我是编码新手 我有一个谷歌电子表格 其中有一个可以推送电子邮件的脚本 我试图让脚本忽略脚本已发送电子邮件的行 function onOpen var ui SpreadsheetApp getUi Or Do
  • Google Web Apps - 获取用户电子邮件但以所有者身份运行脚本

    我最近迷上了谷歌网络应用程序 但我遇到了一些进退两难的问题 我正在尝试构建一个对非常特定的用户开放的应用程序 并且他们正在查看的数据根据 其访问组进行过滤 在谷歌表格中 我列出了用户电子邮件及其各自的访问组 A 列 电子邮件 B 列 访问组
  • 通过 Google Apps 脚本发送电子邮件时出现问题

    我有时已经成功地通过 Google Apps 脚本发送电子邮件 但是 当我打开一个新的 Google Workspace 帐户并使用相同的代码将相同的内容发送到同一个接收者时 新帐户不起作用 我收到一条 消息已被阻止 的消息 电子邮件受保护
  • Google Apps 脚本中的地图对象支持

    Google Apps 脚本是否支持Map https developer mozilla org en docs Web JavaScript Reference Global Objects Map object 当我尝试使用它时 我得
  • Firebase GAS webapp Google 弹出窗口消失

    我正在尝试升级我的 firebase GAS web 应用程序 之前我有一个弹出窗口 可以让用户使用 Google 登录 我不确定我做错了什么 但我已经升级到新的 firebase 现在正在尝试使用新的代码格式进行相同的登录 发生的情况是
  • 用于以两种方式提取特定值的 Google Sheets 公式

    我正在尝试使用 Google 中的电子表格做一些不同的事情 但我正在使用的公式遇到了一些问题 我希望有人能够指导我找到更好的解决方案或能够纠正我当前遇到的问题 首先 这是我从中提取的表 1 上的数据视图 Example Spreadshee
  • maxifs的Google Sheets数组公式[重复]

    这个问题在这里已经有答案了 大家好 我是一名长期支持者 读者 但这是我第一次在 Stackoverflow 上发帖 所以请耐心等待 我正在使用的工作表示例 https i stack imgur com tFQ2n png if E2 If

随机推荐

  • 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 现在我有一个新问题要解决 即搜索