标签: google-apps-script

Google App 脚本使用菜单项选择中的颜色选择器更改背景颜色

我想实现一个菜单项,选择该菜单项时会弹出​​颜色选择器,然后将工作表上某些单元格的背景颜色更改为所选的颜色。

我已经成功地在我的脚本中完成了所有这些事情,但我没有一个好的方法让用户轻松传递可用于更改背景的颜色。(我想避免要求他们将某个单元格更改为他们想要的颜色,然后单击菜单项来更改工作表的其余部分)

这是我当前的代码:

//Function to create menu item
function onOpen(){
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Sheet Options')
      .addItem('Change Background Color', 'colorMe')
      .addToUi();
}  

function colorMe(){
   var spreadsheet = SpreadsheetApp.getActive();

   // Code to get color value selected by user from ui color picker 
   // Replace #000000 with that value

   spreadsheet.getRangeList(['A:A', '1:1', 'H:H', 'I:I', 'N:U', 'B8:G9', 'E10:E31', 'F14:G31', 'B32:G100', '101:142']).activate()
   .setBackground('#000000');  

}
Run Code Online (Sandbox Code Playgroud)

google-apps-script

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

在两个 HTML 页面之间传递数据(Google Apps 脚本)

我试图将 var 'id' 从页面 'a.html' 传递到 'b.html'。var 内容来自“code.gs”,如下所示:

代码.gs

function data(){
var id = 1;

return id;
}
Run Code Online (Sandbox Code Playgroud)

接下来,我得到这个 var 并将其显示在“a.html”中:

a.html

<?
var id = data();
?>

<h1><?= id ?></h1>

<a href="b.html">Go to B.html</a>
Run Code Online (Sandbox Code Playgroud)

通过单击“转到 B.html”,系统会将用户引导至那里。我需要将 var 'id' 的相同值从页面 'a.html' 带到 'b.html'。Ps:搜索了一下,我看到有一种通过命令“localStorage”发送这个var,但它对我不起作用。:(

有谁能够帮助我?

html javascript web-applications google-apps-script

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

如何在 Apps 脚本中以编程方式“删除”Google 表格菜单项

Apps 脚本人员,如何以编程方式从 Apps 脚本中删除Google 表格中的自定义菜单项。有足够的方法来添加项目,但我看不到任何可以删除的方法。看起来这是一个主要的 API 遗漏?有谁知道如何做到这一点?

menu google-sheets google-apps-script

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

从谷歌应用程序脚本设置谷歌表单项目的预填充值

我想实现什么目标?

我想使用谷歌表单跟踪谷歌文档的审核状态,下拉选项为“待办事项、进行中、完成”。我有谷歌表单项目作为“文档的URL,状态”。我创建了一个谷歌表单模板,我将使用它为各种用户创建表单。我希望能够创建模板表单的副本,并从谷歌应用程序脚本设置“URL”的预定义值,以便用户只需选择文档的状态。

我尝试了什么?

我从这个答案中遇到了 createResponse() 方法,但这需要.submit()用于保存响应并将答案记录在表中。我不想从脚本本身提交表单。这是代码:

function form()
{
  var form  = FormApp.create("Test");
  form.addTextItem().setTitle("URL");
  form.addTextItem().setTitle("Status");

  var items = form.getItems();
  var url = items[0].asTextItem();
  var fr = url.createResponse('my predefined url');

  var FormResponse = form.createResponse();
  FormResponse.withItemResponse(fr);
  FormResponse.submit();
  Logger.log(form.getPublishedUrl());
}
Run Code Online (Sandbox Code Playgroud)

最终查询:

如何从应用程序脚本中获取表单的已发布 URL 以及 URL 项目的预填充答案?是否可以?

google-apps-script google-forms

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

使用 Google Apps 脚本将图像从云端硬盘插入 Google Spresheet 单元格

我已经浏览了有关该主题的所有线程。从 blob 到 URL 等等,通过 apps-script 将图像插入单元格,但似乎没有任何效果。大多数帖子都没有给出足够好的解决方案来追溯错误。所以我想在这里找到我的问题的答案。下面是我的代码。我也很想讨论不同方法的优点。据我所知,在处理 G-Drive 中已有的图像时,Blob 似乎是最简单的之一。

function getGDriveFilesIntoCell() {

  var dApp = DriveApp;  // Store GDrive App in a function
  var folderIter = dApp.getFoldersByName("Training_folder");  // Get folder by name
  var foundfolder = folderIter.next();  // next allows to Iterate through the found folders
  Logger.log(foundfolder);  // Print into the logs the found folder of foundfolder

  var ss = SpreadsheetApp.getActiveSpreadsheet(); //.getActiveSheet();  // Calls the Spreadsheet App and the current active Spreadsheet
  var sheet = ss.getSheets()[0];  // Get first sheet …
Run Code Online (Sandbox Code Playgroud)

google-sheets google-apps-script

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

如何在 Google Apps 脚本中获取 Blob 对象的大小?

我创建了一个脚本,其中 Google Sheet 被转换为 PDF 并通过电子邮件发送(通过 Gmail API)。

请找到以下用于将工作表转换为 PDF 的语法

var blob=DriveApp.getFileById(<<Google Sheet ID>>).getAs('application/pdf');
Run Code Online (Sandbox Code Playgroud)

可以做什么来找出这里斑点的大小?

javascript blob google-sheets google-apps-script google-drive-api

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

在 Google Apps 脚本中异步运行函数

我正在制作一个调用 GAS 函数的 Slack 机器人。一切正常,只是 Slack 显示错误消息,因为它在调用 API 时只等待 3 秒响应。

任何人都可以帮助我弄清楚如何异步运行 everyDay2 ,以便我可以在完成之前返回响应。我尝试过 Promise 和回调,但无法解决。

function doPost(e){

  const promise = new Promise(everyDay2);

  return ContentService.createTextOutput('thinking...');

}
Run Code Online (Sandbox Code Playgroud)

javascript asynchronous promise google-apps-script slack-api

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

setValues 比 setValue 慢吗?

我有一个 Google 文档,其中有多个人参与运行的 Google Apps 脚本脚本。onEdit当人们编辑工作表时会触发一个触发器。据我了解,如果一个人编辑该工作表,就会触发我的onEdit触发功能。

如果第二个人在第一次完成处理之前编辑工作表onEdit,那么它会停止第一个实例,然后onEdit开始第二个实例,而不会完成第一个实例。

为了避免这种情况,我试图使我的代码尽可能高效,理论是如果该onEdit过程花费的时间较少,则重叠的可能性较小。为了实现这一点,我尝试尽量减少读/写。使用一系列记录器语句,我跟踪了耗时的代码行。我注意到我的其中一条setValues()线需要将近 6 秒才能运行。这是一个大数组,在我对其进行调整后被发布回工作表。

我的问题:

  1. 通话时间是否setValues()比通话时间长setValue()
  2. setValues()调用小数组是否比setValues()调用大数组花费的时间更少?

我知道一个命令setValues()会比 1000 个命令快得多setValue()

我原以为无论大小如何,一次写入工作表应该花费大约相同的时间。有什么办法可以尽量减少这个时间吗?

arrays read-write google-sheets google-apps-script

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

如何对二维数组进行切片?

我有一个数组说

arr1 = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
Run Code Online (Sandbox Code Playgroud)

我想将其切片并选择第二列和第三列。

我尝试过使用切片,但没有成功。

var result = arr1.slice(1,3);

但我没有得到想要的输出

[[2,3],[6,7],[10,11]]
Run Code Online (Sandbox Code Playgroud)

是因为我使用 Google 电子表格收集数据吗?

javascript google-apps-script

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

ImportXML 未生成正确的值

我正在按照以下教程将股票期权数据导入 Google 工作表。

https://www.youtube.com/watch?v=Be7z9YeeVY0&ab_channel=daneshj

以下公式将把雅虎财经的数据导入到工作表中:

=iferror(TRANSPOSE(IMPORTXML(CONCATENATE("https://finance.yahoo.com/quote/",A2,"?p=",A2),"//tr")),"You have to add a contract name in column A")
Run Code Online (Sandbox Code Playgroud)

乍一看,一切看起来都很好,因为它似乎是从网页上拉回数据;然而,所有的值都是不正确的

本示例中从中提取数据的 URL 如下。请注意,数据经常变化。

https://finance.yahoo.com/quote/NKLA220121C00002500?p=NKLA220121C00002500

这些数字不仅在这个特定示例中是错误的,而且每次都是错误的,并且误差范围足够大,我不认为这是由于 IMPORTXML 缓存页面造成的。我已经搜索了网页的 HTML 源代码,但在任何地方都找不到 IMPORTXML 中的值。

在此输入图像描述

在此输入图像描述

google-sheets web-scraping google-apps-script yahoo-finance google-sheets-formula

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