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

如何修改Google Apps Script以限制Google Sheets导出的CSV内容:仅包含I6:I区域有值的条目

修改Google Apps Script:仅导出包含指定列有值的CSV条目

我看到你写了一个提交订单的Google Apps Script,现在想调整它,让导出的CSV只包含I6:I区域有值的行,而且如果这个区域全空的话,CSV就不带任何内容,同时保留原来清空I6:I的功能。作为新手,代码不规范完全没关系,咱们一步步来改~

修改后的完整脚本

function SUBMIT_ORDER() {
  // 获取当前活动表格和工作表,简化变量名(新手更易读)
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const activeSheet = ss.getActiveSheet();
  const sheetName = activeSheet.getName();
  
  // 获取格式化后的日期时间,用于邮件主题和文件名
  const today = new Date();
  const date = `${today.getFullYear()}-${String(today.getMonth()+1).padStart(2, '0')}-${String(today.getDate()).padStart(2, '0')}`;
  const time = `${String(today.getHours()).padStart(2, '0')}:${String(today.getMinutes()).padStart(2, '0')}:${String(today.getSeconds()).padStart(2, '0')}`;
  const dateTime = `${date} ${time}`;
  
  // 邮件相关配置
  const recipients = "EMAILADDRESS"; // 记得替换成你的实际收件邮箱
  const userEmail = Session.getActiveUser().getEmail();
  const subject = `BMVS ${sheetName} New Purchase Order ${dateTime}`;
  const body = `${userEmail} submitted a new purchase order for ${sheetName} on ${date} at ${time} ****THANK YOU****`;
  
  // 核心逻辑:筛选出I6:I有值的行
  const dataRange = activeSheet.getDataRange(); // 获取工作表所有有数据的范围(避免处理完全空的行)
  const allData = dataRange.getValues(); // 把表格数据转成二维数组(每行是一个子数组)
  let filteredRows = [];
  
  // 遍历每一行,检查是否符合条件
  for (let i = 0; i < allData.length; i++) {
    const rowNum = i + 1; // 转换成实际行号(数组索引从0开始,行号从1开始)
    const iColumnValue = allData[i][8]; // 获取I列的值(I是第9列,数组索引为8)
    
    // 只保留行号≥6,且I列不为空的行
    if (rowNum >= 6 && iColumnValue !== "") {
      filteredRows.push(allData[i]);
    }
  }
  
  // 根据筛选结果处理邮件发送
  if (filteredRows.length > 0) {
    // 把筛选后的数组转换成标准CSV格式(给单元格加双引号,避免逗号破坏格式)
    const csvContent = filteredRows.map(row => row.map(cell => `"${cell}"`).join(',')).join('\n');
    
    // 发送带筛选后CSV的邮件
    MailApp.sendEmail(recipients, subject, body, {
      attachments: [{
        fileName: `${sheetName}-${dateTime}.csv`,
        content: csvContent,
        mimeType: "text/csv" // 修正原代码的mimeType拼写错误
      }]
    });
  } else {
    // 可选:如果没有符合条件的行,发送空订单提醒邮件(不需要的话可以删掉这段)
    MailApp.sendEmail(recipients, `BMVS ${sheetName} Empty Order Submission`, `No items were submitted for ${sheetName} on ${date} at ${time}.`);
  }
  
  // 保留原需求:清空I6:I区域
  activeSheet.getRange("I6:I").clearContent();
  
  // 保留原需求:回到E1单元格
  ss.setCurrentCell(activeSheet.getRange('E1'));
}

关键修改说明

  • 简化重复代码:把原代码中重复调用的SpreadsheetApp.getActiveSpreadsheet()和getActiveSheet()改成变量,减少冗余,更易维护。
  • 规范日期格式:用padStart(2, '0')确保月份、日期、时分秒都是两位数(比如1月变成01,9点变成09),避免格式混乱。
  • 精准筛选行:
    • 用getDataRange()只获取表格中有实际数据的范围,不用遍历整个工作表的空行。
    • 通过行号和I列值的双重判断,只保留符合要求的行。
  • 自定义生成CSV:不再直接导出整个工作表,而是把筛选后的行转换成CSV,确保只包含需要的内容;给单元格加双引号,避免单元格内容包含逗号时破坏CSV格式。
  • 处理空场景:如果I6:I全空,会发送提醒邮件(不需要的话可以直接删掉这段逻辑)。
  • 修复细节错误:把原代码中写错的application//csv改成标准的text/csv,确保邮件附件能被正确识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:17:49