Google apps script 谷歌脚本-当范围内的单元格被修改时,如何生成模板?

Google apps script 谷歌脚本-当范围内的单元格被修改时,如何生成模板?,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我希望每个人在那段时间都很好 发布此消息以获得有关我正在使用的工具的帮助。 我对此非常陌生,我的问题可能是语法/简单逻辑问题,因为我缺乏脚本基础 以下是我想做的: 当AC列中的单元格被勾选(修改)时,我希望我的脚本生成一个模板,并用AC列中已修改的对应行中的数据a、B、C填充该模板 所以这里有三个步骤: 1=>当AC列中的单元格被勾选(修改)时,我希望 脚本 2=>以生成模板 3=>用相应的中的数据A、B、C填写该模板 AC列中已修改的行 至于现在,我一直在努力让1和2一起工作。 如

我希望每个人在那段时间都很好

发布此消息以获得有关我正在使用的工具的帮助。 我对此非常陌生,我的问题可能是语法/简单逻辑问题,因为我缺乏脚本基础

以下是我想做的:

当AC列中的单元格被勾选(修改)时,我希望我的脚本生成一个模板,并用AC列中已修改的对应行中的数据a、B、C填充该模板

所以这里有三个步骤:

  • 1=>当AC列中的单元格被勾选(修改)时,我希望 脚本

  • 2=>以生成模板

  • 3=>用相应的
    中的数据A、B、C填写该模板 AC列中已修改的行

至于现在,我一直在努力让1和2一起工作。 如果我找不到任何解决方案,3可能是另一个帖子

下面是onEdit函数的代码。 它正在工作。当我在AC Clunn中勾选一个单元格时,我会收到一个“酷”警报。(我在Stackoverflow上找到了这个)

我想做的是清楚地表达这两个功能

我试过几种方法,但都没有成功。 在“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()

      }
}
函数onEdit()
{
var sheet=SpreadsheetApp.getActiveSheet();
var editRange=sheet.getActiveRange();
var editRow=editRange.getRow();
var editCol=editRange.getColumn();
var范围=sheet.getRange(“AC3:AC31”);
var rangeRowStart=range.getRow();
var rangeRowEnd=rangeRowStart+range.getHeight();
var rangeColStart=range.getColumn();
var rangeColEnd=rangeColStart+range.getWidth();

如果(editRow>=rangeRowStart&&editRow=rangeColStart&&editColOneEdit是一个简单的触发器

简单触发器无法访问需要授权的服务

驱动器服务(DriveApp)需要授权=>您不能从onEdit调用它


PS:我认为这就是问题的原因,如果您发布了一条您收到的准确错误消息,那么我将能够确认这一点。

onEdit是一个简单的触发器

简单触发器无法访问需要授权的服务

驱动器服务(DriveApp)需要授权=>您不能从onEdit调用它


PS:我认为这就是问题的原因,如果您发布了一条您收到的准确错误消息,那么我将能够确认这一点。

因此,对于其他人来说,这是如何工作的

再次前往米兰和伊安塞达诺

触发器无法启动需要授权的访问服务。 我的工具通过DriveApp,这就是触发器不工作的原因

脚本正在工作。但是,要使触发器工作,您需要通过google脚本中的特定窗口安装它

以下是照片:

然后,选择你的函数

又来了! 问候


因此,对于其他人来说,这是它的工作原理

再次前往米兰和伊安塞达诺

触发器无法启动需要授权的访问服务。 我的工具通过DriveApp,这就是触发器不工作的原因

脚本正在工作。但是,要使触发器工作,您需要通过google脚本中的特定窗口安装它

以下是照片:

然后,选择你的函数

又来了! 问候


script.google.com的“执行”窗口中有什么输出?根据下面的回答,尝试将onEdit重命名为其他名称,然后安装onEdit触发器(可以从项目屏幕左侧的“触发器”中完成)我通过谷歌脚本中的特定窗口安装了触发器,它成功了!非常感谢。脚本现在可以工作了。现在,尝试使用我的工具的第3步:)最好的方法是,在script.google.com的“执行”窗口中得到什么输出?根据下面的答案,尝试将onEdit重命名为其他名称,然后安装onEdit触发器(可以从项目屏幕左侧的“触发器”中完成)我通过谷歌脚本中的特定窗口安装了触发器,它工作了!非常感谢。脚本现在正在工作。现在,尝试使用我的工具的第3步:)最好的,你好,米兰非常感谢你让我走上正确的轨道。授权是个问题。我通过特定窗口安装了触发器,它工作了!你好米兰非常感谢你让我走上正确的轨道。授权是个问题。我通过特定的窗口安装了触发器,它成功了!
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) ;
}
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()

      }
}