Google Sheets生成报告文档脚本故障排查求助
问题:Google Apps Script无法生成报告文档排查与修复
我需要开发一个基于Google Sheets生成报告文档的Google Apps Script脚本,但尝试多种方法后均无法成功创建目标文档。已添加文档创建失败弹窗提示但未触发,设置创建成功UI弹窗也无响应。脚本规则:当A列值为true时,按“报告+创建日期”格式生成文档;B列含嵌套信息,C列指定所属工作组。
原代码
function criarRelatoriosCentro() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var unidades = {}; var data = new Date(); var meses = ["janeiro", "fevereiro", "março", "abril", "maio", "junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro"]; var hoje = data.getDate() + '-' + meses[data.getMonth()] + '-' + data.getFullYear(); // Obtém os dados da planilha var range = ss.getSheetByName("Centro").getDataRange(); var valores = range.getValues(); // Preenche o objeto 'unidades' com os dados da planilha for (var i = 1; i < valores.length; i++) { var ativo = valores[i][0]; var unidade = valores[i][1]; var equipe = valores[i][2]; var dados = valores[i].slice(4, 70); // Dados da coluna E até BO if (ativo === true && unidade && equipe) { // Verifica se a unidade está marcada como TRUE if (!unidades[unidade]) { unidades[unidade] = { nome: unidade, equipes: [], dados: {}, rowIndex: i + 1 // 保存当前行号,用于后续写入文档ID }; } unidades[unidade].equipes.push(equipe); // Cria um objeto para cada coluna entre E e BO for (var j = 0; j < dados.length; j++) { var coluna = String.fromCharCode(69 + j); // 69 é o código ASCII para 'E' unidades[unidade].dados[coluna] = dados[j]; } } } // Cria os relatórios para cada unidade for (var unidade in unidades) { var nomeDocumento = "Relatório CS " + unidades[unidade].nome + " " + hoje; var doc; try { doc = DocumentApp.create(nomeDocumento); } catch (e) { SpreadsheetApp.getUi().alert("Falha ao criar o documento: " + nomeDocumento + "\nErro: " + e.message); continue; } var body = doc.getBody(); // 仅保留切片范围内的列引用 var colunaE = unidades[unidade].dados['E']; var colunaF = unidades[unidade].dados['F']; var colunaG = unidades[unidade].dados['G']; var colunaH = unidades[unidade].dados['H']; var colunaI = unidades[unidade].dados['I']; var colunaJ = unidades[unidade].dados['J']; var colunaK = unidades[unidade].dados['K']; var colunaL = unidades[unidade].dados['L']; var colunaM = unidades[unidade].dados['M']; var colunaN = unidades[unidade].dados['N']; var colunaO = unidades[unidade].dados['O']; var colunaP = unidades[unidade].dados['P']; var colunaQ = unidades[unidade].dados['Q']; var colunaR = unidades[unidade].dados['R']; var colunaS = unidades[unidade].dados['S']; var colunaT = unidades[unidade].dados['T']; var colunaU = unidades[unidade].dados['U']; var colunaV = unidades[unidade].dados['V']; var colunaW = unidades[unidade].dados['W']; var colunaX = unidades[unidade].dados['X']; var colunaY = unidades[unidade].dados['Y']; var colunaZ = unidades[unidade].dados['Z']; var colunaAA = unidades[unidade].dados['AA']; var colunaAB = unidades[unidade].dados['AB']; var colunaAC = unidades[unidade].dados['AC']; var colunaAD = unidades[unidade].dados['AD']; var colunaAE = unidades[unidade].dados['AE']; var colunaAF = unidades[unidade].dados['AF']; var colunaAG = unidades[unidade].dados['AG']; var colunaAH = unidades[unidade].dados['AH']; var colunaAI = unidades[unidade].dados['AI']; var colunaAJ = unidades[unidade].dados['AJ']; var colunaAK = unidades[unidade].dados['AK']; var colunaAL = unidades[unidade].dados['AL']; var colunaAM = unidades[unidade].dados['AM']; var colunaAN = unidades[unidade].dados['AN']; var colunaAO = unidades[unidade].dados['AO']; var colunaAP = unidades[unidade].dados['AP']; var colunaAQ = unidades[unidade].dados['AQ']; var colunaAR = unidades[unidade].dados['AR']; var colunaAS = unidades[unidade].dados['AS']; var colunaAT = unidades[unidade].dados['AT']; var colunaAU = unidades[unidade].dados['AU']; var colunaAV = unidades[unidade].dados['AV']; var colunaAW = unidades[unidade].dados['AW']; var colunaAX = unidades[unidade].dados['AX']; var colunaAY = unidades[unidade].dados['AY']; var colunaAZ = unidades[unidade].dados['AZ']; var colunaBA = unidades[unidade].dados['BA']; var colunaBB = unidades[unidade].dados['BB']; var colunaBC = unidades[unidade].dados['BC']; var colunaBD = unidades[unidade].dados['BD']; var colunaBE = unidades[unidade].dados['BE']; var colunaBF = unidades[unidade].dados['BF']; var colunaBG = unidades[unidade].dados['BG']; var colunaBH = unidades[unidade].dados['BH']; var colunaBI = unidades[unidade].dados['BI']; var colunaBJ = unidades[unidade].dados['BJ']; var colunaBK = unidades[unidade].dados['BK']; var colunaBL = unidades[unidade].dados['BL']; var colunaBM = unidades[unidade].dados['BM']; var colunaBN = unidades[unidade].dados['BN']; var colunaBO = unidades[unidade].dados['BO']; var textoPredeterminado = "Este é o texto pré-determinado que será inserido em cada relatório. Aqui estão os dados específicos: " + colunaE + ", " + colunaF + ", " + colunaG + ", " + colunaH + ", ..., " + colunaBO; body.appendParagraph("Relatório para a unidade: " + unidades[unidade].nome); body.appendParagraph("Equipes ativas:"); body.appendParagraph(unidades[unidade].equipes.join(", ")); body.appendParagraph("Dados:"); // 正确遍历对象数据并显示 var dadosTexto = []; for (var col in unidades[unidade].dados) { dadosTexto.push(col + ": " + unidades[unidade].dados[col]); } body.appendParagraph(dadosTexto.join(", ")); body.appendParagraph(textoPredeterminado); // Salva o ID do documento na linha correta ss.getSheetByName("Centro").getRange("BM" + unidades[unidade].rowIndex).setValue(doc.getId()); // Exibe um alerta com o ID do documento var docId = doc.getId(); SpreadsheetApp.getUi().alert("Relatório criado com sucesso! O ID do documento é: " + docId); // Move o documento para uma pasta específica var pastaId = '1MK8KRyFJoYiuD7Ue4GYupJGT7jB06a3K'; // 使用纯文件夹ID try { var arquivo = DriveApp.getFileById(doc.getId()); DriveApp.getFolderById(pastaId).addFile(arquivo); DriveApp.getRootFolder().removeFile(arquivo); } catch (e) { SpreadsheetApp.getUi().alert("Falha ao mover documento para pasta: " + e.message); } } } function onOpen() { var menu = SpreadsheetApp.getUi().createMenu('Relatórios'); menu.addItem('Criar Relatório Centro','criarRelatoriosCentro') .addItem('Criar Relatório Continente','criarRelatoriosContinente') .addItem('Criar Relatório Norte','criarRelatoriosNorte') .addItem('Criar Relatório Sul','criarRelatoriosSul') .addToUi(); }
核心问题与修复说明
- 文档创建异常处理:
DocumentApp.create()失败时会直接抛出异常,原代码的if (!doc)判断无效,改为try-catch捕获错误并弹窗提示。 - 行索引保存:在收集数据时保存当前行号,确保文档ID写入对应行的BM列,而非最后一行。
- Drive文件夹ID修正:将完整URL替换为纯文件夹ID,
DriveApp.getFolderById()仅接受ID参数。 - 对象数据显示优化:遍历
dados对象,将键值对转为字符串,避免[object Object]的无效显示。 - 移除超出范围的列引用:删除了切片范围外的BP到BZ列引用,避免
undefined值。 - 菜单代码简化:合并
addToUi()调用,避免重复执行。
内容的提问来源于stack exchange,提问作者Guilherme
相关产品推荐
相关产品推荐

