You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建批量PDF脚本报错:ReferenceError: row未定义

Google Apps Script批量生成PDF报错:ReferenceError: row is not defined

问题详情

运行以下脚本时触发ReferenceError: row is not defined错误,脚本功能是为Google表格「ADMISSIBILITÉ SÉLECTION」中勾选框为TRUE的行,结合指定Google文档模板生成对应PDF。

原代码:

function CreateBulkPDFs() {
  const DocFile = DriveApp.getFileById("AAAAAAAAAAAAAAA");
  const DossTEMP = DriveApp.getFolderById("BBBBBBBBBBBBBBBBB");
  const EmplacementPDF = DriveApp.getFolderById("CCCCCCCCCCCCCCCCCCCCCCC");
  const CurrentSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ADMISSIBILITÉ  SÉLECTION");
  //const Data = CurrentSheet.getRangeList(['A1:D4', 'F1:H4']);
  const DATE = CurrentSheet.getRange("E5").getValue();
  const FONCTION = CurrentSheet.getRange("C3").getValue();
  const UNITE = CurrentSheet.getRange("N4").getValue();
  const ANCIENNETE = CurrentSheet.getRange("N5").getValue();
  var NomMatr = CurrentSheet.getRange("A8:N" + CurrentSheet.getLastRow()).getValues();
    NomMatr.forEach(([check], i) => {
      if (check === true) {
      CreatePDF(DATE,row[6],row[7],FONCTION,UNITE,ANCIENNETE,"Appel d'intérêt_Comblement titulaire 4.05_" + row[6],DocFile,DossTEMP,EmplacementPDF);
      try {
        CurrentSheet.getRange("A" + (i + 8)).uncheck();
      }catch(err) {
    } 
  } 
});
}

function CreatePDF(DATE,NOM,MATRICULE,FONCTION,UNITE,ANCIENNETE,PDFName,DocFile,DossTEMP,EmplacementPDF) {
  const tempFile = DocFile.makeCopy(DossTEMP);
  const tempDocFile = DocumentApp.openById(tempFile.getId());
  const Body = tempDocFile.getBody();
  Body.replaceText("{DATE}", DATE);
  Body.replaceText("{NOM}", NOM);
  Body.replaceText("{MATRICULE}", MATRICULE);
  Body.replaceText("{FONCTION}", FONCTION);
  Body.replaceText("{UNITE}", UNITE);
  Body.replaceText("{ANCIENNETE}", ANCIENNETE);
  tempDocFile.saveAndClose();
  const PdfContentBlob = tempFile.getAs(MimeType.PDF);
  EmplacementPDF.createFile(PdfContentBlob).setName(PDFName);//(NOM + "_" + MATRICULE)
  //FICHIERSTEMP.removeFile(tempFile);
}

相关截图:
报错截图
表格截图

报错原因

在NomMatr.forEach(([check], i) => {...})的回调函数中,直接使用了未定义的row变量。当前回调仅解构了数组第一个元素(勾选框列的值)赋值给check,没有获取当前行的完整数据并赋值给row,导致调用CreatePDF时找不到该变量。

修正后的代码

将forEach的回调参数改为接收完整行数据row,同时保留索引i,即可正常调用行内数据:

function CreateBulkPDFs() {
  const DocFile = DriveApp.getFileById("AAAAAAAAAAAAAAA");
  const DossTEMP = DriveApp.getFolderById("BBBBBBBBBBBBBBBBB");
  const EmplacementPDF = DriveApp.getFolderById("CCCCCCCCCCCCCCCCCCCCCCC");
  const CurrentSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("ADMISSIBILITÉ  SÉLECTION");
  const DATE = CurrentSheet.getRange("E5").getValue();
  const FONCTION = CurrentSheet.getRange("C3").getValue();
  const UNITE = CurrentSheet.getRange("N4").getValue();
  const ANCIENNETE = CurrentSheet.getRange("N5").getValue();
  var NomMatr = CurrentSheet.getRange("A8:N" + CurrentSheet.getLastRow()).getValues();
  
  // 修改forEach参数,接收完整行数据row
  NomMatr.forEach((row, i) => {
    // row[0]对应A列的勾选框
    if (row[0] === true) {
      CreatePDF(DATE, row[6], row[7], FONCTION, UNITE, ANCIENNETE, "Appel d'intérêt_Comblement titulaire 4.05_" + row[6], DocFile, DossTEMP, EmplacementPDF);
      try {
        CurrentSheet.getRange("A" + (i + 8)).uncheck();
      } catch(err) {
        // 可选:添加错误日志便于排查
        console.log(err);
      } 
    } 
  });
}

function CreatePDF(DATE,NOM,MATRICULE,FONCTION,UNITE,ANCIENNETE,PDFName,DocFile,DossTEMP,EmplacementPDF) {
  const tempFile = DocFile.makeCopy(DossTEMP);
  const tempDocFile = DocumentApp.openById(tempFile.getId());
  const Body = tempDocFile.getBody();
  Body.replaceText("{DATE}", DATE);
  Body.replaceText("{NOM}", NOM);
  Body.replaceText("{MATRICULE}", MATRICULE);
  Body.replaceText("{FONCTION}", FONCTION);
  Body.replaceText("{UNITE}", UNITE);
  Body.replaceText("{ANCIENNETE}", ANCIENNETE);
  tempDocFile.saveAndClose();
  const PdfContentBlob = tempFile.getAs(MimeType.PDF);
  EmplacementPDF.createFile(PdfContentBlob).setName(PDFName);
  // 可选:删除临时文档
  // DossTEMP.removeFile(tempFile);
}

内容的提问来源于stack exchange,提问作者Mous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 09:45:41