google-apps-script - Google Script - 如何在修改范围内的单元格时生成模板?
问题描述
我希望每个人在那个时候都很好
发布此消息以获得对我正在开发的工具的一些帮助。我对此很陌生,我的问题可能是语法/简单的逻辑问题,因为我缺乏脚本基础
当 AC 列中的单元格被勾选(修改)时,我希望我的脚本生成一个模板,并用 AC 列中已修改的相应行中的数据 A、B、C 填充该模板
所以这里有3个步骤:
1 => 当 AC 列中的单元格被勾选(修改)时,我希望我的脚本
2 => 生成模板
3 => 用AC 列中已修改的相应行中的数据 A、B、C 填充该模板
至于现在,我一直试图让 1 和 2 一起工作。如果我找不到任何解决方案,3 可能是另一个帖子
所以这里是 onEdit 函数的代码。这是工作。当我在 AC clumn 中勾选一个单元格时,我会收到“酷”警报。(我在 Stackoverflow 上找到了这个)
function onEdit()
{
var sheet = SpreadsheetApp.getActiveSheet();
var editRange = sheet.getActiveRange();
var editRow = editRange.getRow();
var editCol = editRange.getColumn();
var range = sheet.getRange("AC3:AC31");
var rangeRowStart = range.getRow();
var rangeRowEnd = rangeRowStart + range.getHeight();
var rangeColStart = range.getColumn();
var rangeColEnd = rangeColStart + range.getWidth();
if (editRow >= rangeRowStart && editRow <= rangeRowEnd
&& editCol >= rangeColStart && editCol <= rangeColEnd){
SpreadsheetApp.getUi().alert('COOL')
}
}
这是 GenerateTemplate 的代码,它也可以正常工作
function GenerateTemplate() {
var documentId = DriveApp.getFileById('XXXXXXXXXXXXXX').makeCopy().getId() ;
DriveApp.getFileById(documentId).setName('CONTRACT_2021_V2');
var body = DocumentApp.openById(documentId).getBody() ;
var sheet = SpreadsheetApp.getActiveSheet() ;
var range = sheet.getRange(3,5);
var data = range.getValue() ;
body.replaceText('##Nom##' , data) ;
}
我想做的是清楚地表达这两个功能。
我尝试了几种方法,但从未成功。在“if”语句之后,我尝试添加 GenerateTemplate 函数,但它似乎不起作用
function onEdit()
{
var sheet = SpreadsheetApp.getActiveSheet();
var editRange = sheet.getActiveRange();
var editRow = editRange.getRow();
var editCol = editRange.getColumn();
var range = sheet.getRange("AC3:AC31");
var rangeRowStart = range.getRow();
var rangeRowEnd = rangeRowStart + range.getHeight();
var rangeColStart = range.getColumn();
var rangeColEnd = rangeColStart + range.getWidth();
if (editRow >= rangeRowStart && editRow <= rangeRowEnd
&& editCol >= rangeColStart && editCol <= rangeColEnd){
GenerateTemplate()
}
}
我还尝试将这两个功能放在同一页面上。但仍然没有成功:
function GenerateTemplate() {
var documentId = DriveApp.getFileById('XXXXXXXXXXXXXXXXXXX').makeCopy().getId() ;
DriveApp.getFileById(documentId).setName('CONTRACT_2021_V2');
var body = DocumentApp.openById(documentId).getBody() ;
var sheet = SpreadsheetApp.getActiveSheet() ;
var range = sheet.getRange(3,5);
var data = range.getValue() ;
body.replaceText('##Nom##' , data) ;
}
function onEdit()
{
var sheet = SpreadsheetApp.getActiveSheet();
var editRange = sheet.getActiveRange();
var editRow = editRange.getRow();
var editCol = editRange.getColumn();
var range = sheet.getRange("AC3:AC31");
var rangeRowStart = range.getRow();
var rangeRowEnd = rangeRowStart + range.getHeight();
var rangeColStart = range.getColumn();
var rangeColEnd = rangeColStart + range.getWidth();
if (editRow >= rangeRowStart && editRow <= rangeRowEnd
&& editCol >= rangeColStart && editCol <= rangeColEnd){
GenerateTemplate()
}
}
当我单击“执行”时,我的驱动器会使用正确命名的模板的新副本进行更新。但是当我在 AC 列中勾选一个单元格时,什么也没有发生。
如果有人可以帮助我使这两个功能一起工作,那就太好了
最好的,
解决方案
So, for other people, here is how it worked
Thx again to Milan and iansedano
Trigger can't launch access services that require authorization. My tool goes through DriveApp, which is why the trigger wasn't working.
Script is working. But, for the trigger to work, you need to install it, through the specific windows in google script.
Here are the pictures :
then, choose your function
Thx again ! Kind regards
推荐阅读
- android - 配置“:app:api”包含在依赖项解析中后无法更改依赖项
- google-apps-marketplace - 作为之前发布列表的开发者,我如何从 G Suite 市场中删除列表?
- asp.net-mvc - 未处理的 Promise 拒绝:未设置基本 href。请为 APP_BASE_HREF 令牌提供值或向文档添加基本元素
- c# - 如何使用 NEST (Elasticsearch) UpdateByQuery 更新多个字段?
- sql - SQL 连接表以聚合 ID 列表?
- scala - 合并可能为空的数据框列表
- xml - 如何使用 PowerShell 替换其字符串中包含反斜杠 ( \ ) 的文件内容?
- jquery - 单击时切换下拉菜单并隐藏所有其他下拉菜单
- python - 为什么我的 equal 方法总是返回 false?
- tfs - TFS 2017 插件问题 - 捕获异常TF30063:您无权访问“https://tfs.com//TeamProject