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

无Apps Script经验,能否实现Google Form触发采购表格自动化流程?

需求完全可实现,以下是分步落地方案

一、先完成Google Form创建

搭建符合需求的表单,添加以下字段:

  • 姓名(短文本)
  • 邮箱(电子邮件类型)
  • 交易日期(日期类型)
  • 申请金额(数字类型)
  • 供应商名称(短文本)
  • 团队(下拉菜单,选项和原采购单据里的团队选项保持一致)
  • 收据上传(文件上传类型,限制仅允许图片格式)

二、Apps Script 实现流程

  1. 打开刚创建的Google Form,点击右上角「⋮」>「脚本编辑器」,进入代码编辑界面。
  2. 替换默认代码为以下脚本(注意替换注释里的占位内容):
function onFormSubmit(e) {
  // 1. 提取表单提交的所有数据
  const itemResponses = e.response.getItemResponses();
  
  // 根据你的表单字段顺序提取值(也可以用字段标题匹配,更稳妥)
  const submitterName = itemResponses[0].getResponse();
  const submitterEmail = itemResponses[1].getResponse();
  const transactionDate = itemResponses[2].getResponse();
  const amount = itemResponses[3].getResponse();
  const supplier = itemResponses[4].getResponse();
  const team = itemResponses[5].getResponse();
  const receiptFileId = itemResponses[6].getResponse()[0]; // 取上传的第一张收据

  // 2. 复制指定的Google Sheet模板
  const templateSheetId = "1mZlzeu9-9Mb0B1VmlNSJDfCxELqci4KRc_HFbRt3NwM";
  const templateFile = DriveApp.getFileById(templateSheetId);
  // 格式化日期用于命名,避免特殊字符
  const formattedDate = Utilities.formatDate(new Date(transactionDate), Session.getScriptTimeZone(), "yyyy-MM-dd");
  const newSheetName = `${team} ${formattedDate} 信用卡申请单`;
  const copiedFile = templateFile.makeCopy(newSheetName);
  const newSheet = SpreadsheetApp.openById(copiedFile.getId()).getActiveSheet();

  // 3. 填充数据到新表格(根据原单据的实际单元格位置调整)
  newSheet.getRange("A2").setValue(transactionDate); // 交易日期单元格
  newSheet.getRange("B2").setValue(amount); // 申请金额单元格
  newSheet.getRange("C2").setValue(supplier); // 供应商名称单元格
  newSheet.getRange("D2").setValue(team); // 团队名称单元格

  // 设置对应团队的复选框为TRUE(根据原单据的复选框位置调整)
  switch(team) {
    case "市场部":
      newSheet.getRange("E2").setValue(true);
      break;
    case "技术部":
      newSheet.getRange("F2").setValue(true);
      break;
    // 其他团队按此格式添加
  }

  // 4. 导出表格为XLSX格式
  const xlsxBlob = DriveApp.getFileById(copiedFile.getId()).getAs(MimeType.MICROSOFT_EXCEL);
  xlsxBlob.setName(`${newSheetName}.xlsx`);

  // 5. 获取收据图片的Blob对象
  const receiptBlob = DriveApp.getFileById(receiptFileId).getBlob();

  // 6. 发送邮件
  const financeEmail = "finance@yourcompany.com"; // 替换为实际财务邮箱
  const subject = `${newSheetName} 申请已提交`;
  const body = `您好,${submitterName}提交了采购申请,详情见附件。`;

  MailApp.sendEmail({
    to: financeEmail,
    cc: submitterEmail,
    subject: subject,
    body: body,
    attachments: [xlsxBlob, receiptBlob]
  });
}
  1. 调整脚本细节:

    • 字段索引:如果表单字段顺序有变,修改itemResponses的索引(从0开始计数),或者改用itemResponses.find(item => item.getItem().getTitle() === "字段标题").getResponse()的方式取值,避免顺序变动导致错误。
    • 单元格位置:对照原采购单据的单元格位置,修改填充数据和复选框设置的单元格范围。
    • 邮箱地址:替换financeEmail为实际的财务人员邮箱。
  2. 设置触发条件:

    • 在脚本编辑器左侧点击「触发器」图标(闹钟样式)>「添加触发器」。
    • 配置参数:
      • 选择函数:onFormSubmit
      • 部署类型:「Head deployments」
      • 事件源:「表单」
      • 事件类型:「当提交表单时」
    • 保存后按提示完成授权(需使用有权限的Google账号)。

三、测试与注意事项

  • 提交一次测试表单,检查表格复制、数据填充、邮件发送是否正常。
  • 确保表单的文件上传字段仅允许图片类型,避免非图片文件导致错误。
  • 如果遇到权限报错,确认脚本账号有访问原模板表格、Drive文件以及发送邮件的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:35:25