标签: google-apps-script

Google Sheets 应用程序脚本:当通过触发器运行 onChange 函数时,e.range 为 null

这个问题让我被禁止提问...我做错了什么?!我真的不明白。

我正用头撞键盘。

这看起来应该很简单......但我仍然收到错误:

类型错误:无法在 onChange(checkBoxes:5:20) 处读取未定义**的属性“getNumColumns”

目标是单击一个复选框,获取日期戳,但我还需要检查列标题(第 4 行)以确定下一步要运行什么函数...但是,我无法做到这一点,因为我需要知道触发该函数的单元格的列。

  function onChange(e) {
    const range = e.range;
    Logger.log(range.getNumColumns());
  };

/**Trigger:
     Head:= Deployment
     Event:= From spreadsheet - On change
     Function:= onChange
     Error rate:= 100% */
Run Code Online (Sandbox Code Playgroud)

从技术上讲我可以使用,activecell但我担心用户不可靠,如果他们选中 col:1 中的复选框然后单击 col:2,会activecell返回 col:1 或 2 会发生什么?

我尝试了多种组合来解决此问题,但每次都会显示“无法读取未定义的属性‘getNumColumns’”

我已经尝试过以下方法:

e.range.columnStart
Run Code Online (Sandbox Code Playgroud)

triggers onchange google-sheets google-apps-script

0
推荐指数
1
解决办法
1678
查看次数

应用于数组的可变数量的动态过滤条件

我正在尝试使用可变数量(0 到 3)的本身动态的过滤条件来过滤数组。例如,一个过滤条件基于用户从 Google 表格上的下拉列表中选择的名称。如果过滤条件不是动态的(例如名称是硬编码的),则它可以工作。请参阅下面的行。

const filterFn1 = "x => x[0] === 'John Doe'";
Run Code Online (Sandbox Code Playgroud)

我尝试过这个,但 Google Apps 脚本似乎无法识别new Function

const filterFn1 = new Function("x => x[0] === '" + name + "'");
Run Code Online (Sandbox Code Playgroud)

完整代码:

function myFilter() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const shtDash = ss.getSheetByName('Dashboard');
  const shtDB = ss.getSheetByName('Database');

  const lastDBRow = shtDB.getLastRow();
  const arrData = shtDB.getRange(2,1,lastDBRow-1,4).getValues();

  let arr = [];

  const name = shtDash.getRange('B1').getValue();
  if (name !== '') {
    const filterFn1 = "x => x[0] === '" + name …
Run Code Online (Sandbox Code Playgroud)

javascript google-sheets google-apps-script

0
推荐指数
1
解决办法
162
查看次数

为什么我的 Google App 脚本会随着时间的推移而变慢?

我构建了一个脚本来详细说明谷歌表格并将其提取到云端硬盘文件夹中。为了创建它的脚本,我遵循了最佳实践。我注意到,随着时间的推移,执行速度变慢,我不明白为什么有时比其他人更快。

我尝试使用较小的脚本 --> 只是 1 getValues(),仅在代码内部完全详细说明数组的数组,最后使用 1 setValues() 将数据绘制到工作表中 --> 这些类型的脚本不会随着时间的推移,速度会减慢。我想要了解的是,除了代码质量之外,其他方面是否会影响 GAS 执行的速度

javascript performance google-sheets google-apps-script

0
推荐指数
1
解决办法
1880
查看次数

如何使用 Gmail 插件中的卡服务实现文件上传功能

我目前正在使用卡服务开发 Gmail 插件,并且在插件中实现文件上传功能方面面临一些挑战。我非常感谢您对此事的见解和专业知识。

我的目标是允许用户直接在 Gmail 插件的卡片界面中上传文件。我浏览了卡服务文档,但找不到有关如何实现此特定功能的明确示例或指南。

以下是我试图解决的关键点:

  1. 如何使用卡服务在 Gmail 插件的卡内创建文件上传输入元素?
  2. 用户选择文件后,如何在插件代码中捕获和处理上传的文件?
  3. 使用卡服务在 Gmail 插件中实现文件上传时,我应该考虑哪些最佳实践或注意事项?

任何代码示例、文档参考或一般指南都会非常有帮助。我愿意接受您提供的任何见解,因为我对开发 Gmail 插件和卡服务还比较陌生。

file-upload add-on google-apps-script google-workspace-add-ons

0
推荐指数
1
解决办法
132
查看次数

Google Spreadsheets的大胆条件格式设置脚本

我想要做的主要是这个用户想要做的事情:

我需要一个脚本来格式化A列中的单元格粗体,但只需要包含单词"Hello"的单元格.

但是我根本不了解Google Apps脚本,我需要的答案比我在那里或其他任何地方找到的答案要简单得多.任何帮助表示赞赏; 谢谢!

google-docs google-sheets google-apps-script gs-conditional-formatting

-1
推荐指数
1
解决办法
9240
查看次数

在Google Dirve中实现文件夹移动功能

我对编写任何类型的脚本都是陌生的,并且正在尝试编写Google Apps脚本来搜索文件夹中的特定字符串,如果找到,则将文件夹移动到另一个文件夹。

我可以复制一个文件夹,但不能移动它,因为复制的文件夹具有与原始文件夹相同的ID,删除一个文件夹会删除另一个文件夹。据我所知,我可以通过从文件夹中删除合适的孩子来实现这一点。我已经在API资源管理器中进行了尝试,它确实达到了我的期望。

问题是我一生都无法解决如何实现script.google.comGoogle Drive SDK页面中给出的示例。如果我粘贴示例代码,则会在后面得到一个缺少的名称。操作员错误。没有一个脚本命令允许我删除一个孩子。

这可能是一个简单的问题,是由于我试图通过执行此项目来学习一些JavaScript而引起的,但是对于在Google Script中实现移动功能的任何帮助或建议,我将不胜感激。

具体的问题是:如何实现移动文件夹脚本?这是我正在尝试的方法,但是它同时删除了两个文件夹:

while (contents.hasNext()) {
  folder = contents.next();
  name = folder.getName();
  if (name.search("XYZ") != -1) {
    moveFolder = folder;
    targetFolder.addFolder(moveFolder) moveFolder.setName('DEL_' +
      moveFolder.getName());
    removeFolder(moveFolder);
  }
}
Run Code Online (Sandbox Code Playgroud)

google-apps-script google-drive-api

-1
推荐指数
1
解决办法
2141
查看次数

Google Apps 脚本_将浮点数转换为日期

我的谷歌电子表格中有一个单元格的值为 5/31/2016 0:22:38,但是当我编写脚本来获取数据时,它返回 42521.015713761575。我已经尝试过 jquery 将数字转换为日期的一些代码但大多数返回可以追溯到 1970 年。我如何才能将所述浮点格式格式化为上面指定的日期?谢谢... :)

javascript google-sheets google-apps-script

-1
推荐指数
1
解决办法
2022
查看次数

搜索 Google-apps-script 以迭代工作表文件夹并将一系列数据附加到合并的主工作表

我的问题是关于开发一个脚本,该脚本将迭代文件夹中的所有 google 工作表(多个文件),从名为 getdata 的数据合并工作表上的每个工作表文件捕获数据,并将其附加到名为 Advisory Master 的主工作表中。

google-sheets google-apps-script

-1
推荐指数
1
解决办法
2717
查看次数

如何设置多个过滤器?

我有一个关于将过滤器应用于多个值以使用 Google 脚本隐藏它们的问题。我有一个具有多种状态的项目跟踪器,例如“达到目标”、“已完成”、“已取消”、“已延迟”等。我想编写一个脚本来设置“状态”列的筛选器值,以便标记为“已完成”或“的行”已取消”被隐藏。我编写了下面的代码片段来隐藏“已完成”状态,如何向其中添加“已取消”?感谢您的帮助。

//Below code has been written to hide rows with status = Completed. 
//I'd like to modify it to hide rows with status = Completed AND rows with status = Canceled.

function SetFilters() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var ssId = spreadsheet.getId();
var sheet = spreadsheet.getSheetByName("Project Tracker");

var lastRow = sheet.getLastRow();
var lastColumn = sheet.getLastColumn();
var sheetId = sheet.getSheetId();

var filterSettings = {
  "range": {
    "sheetId": sheetId,
    "startRowIndex": 0,
    "endRowIndex": lastRow,
    "startColumnIndex": 0,
    "endColumnIndex": lastColumn
  }
};

filterSettings.criteria …
Run Code Online (Sandbox Code Playgroud)

filtering google-apps-script google-sheets-api

-1
推荐指数
1
解决办法
4116
查看次数

.findIndex() - 字符串不是函数。谷歌应用脚​​本

问题

.findIndex() 正在崩溃。我向它提供了一个字符串,但它说“这不是一个函数”

目标/背景

自动回复房产查询

函数执行以下操作:

  • 扫描收件箱以识别询问。

  • 分解电子邮件,将数据存储在变量中。

  • 扫描包含我们所有待售房屋信息的电子表格。将电子邮件中的媒体资源 ID 与电子表格进行匹配以查找匹配项。

  • 使用电子表格中存储的与该属性匹配的数据回复电子邮件。

我要去哪里

我能够识别该电子邮件。然后我就可以扫描电子邮件并提取相关信息。

代码

function autoReply() {
var queryInbox = "is:unread from:(example@gmail.com) to:(example@gmail.com) Example Text:"; // Email Identification
var locatedEmail = GmailApp.search(queryInbox); // Search Inbox for Identification
locatedEmail.forEach(thread => {
  var messages = thread.getMessages();
  if (messages.length === 1) {
    // BREAKING DOWN THE EMAIL
    var msgBody = messages[0].getPlainBody();
    var identityNumber = msgBody.split("\n")[1].replace('Property ID: ','');
  
    // SPREADSHEET      
    var SS = SpreadsheetApp.openById('exampleId').getSheetByName("Sheet1");
    var column = 1; // column Index
    var columnValues …
Run Code Online (Sandbox Code Playgroud)

javascript google-sheets google-apps-script

-1
推荐指数
1
解决办法
3617
查看次数