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

基于两列条件将多行数据导出至多个TXT文件

数据集导出需求

我有一个包含多列多行的数据集(含文本、数字、日期等类型),需实现以下要求:

  • 按第一列+第二列的组合分组生成TXT文件:同一组合的所有行合并到同一个文件,不同组合分开生成
  • 日期格式统一转换为DD/MM/YYYY
  • 导出内容排除前两列数据,且不包含表头
  • 文件名由第一列和第二列的内容组合而成

示例说明

最终将生成8个文件,对应每位员工:

  • ABC因所属部门不同,生成2个各含一行数据的文件
  • Benjamin生成1个名为「Benjamin Finance」的文件
  • Timothy生成1个名为「Timothy Marketing」的文件,包含两行数据
  • Charlene、Tommy、Jerry各生成1个文件
  • Lucy生成1个包含两行数据的文件

修改后的代码(满足所有需求)

function myFunction() {
  // 从电子表格获取数据,跳过表头行
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); // 替换为你的工作表名称
  var [, ...values] = sheet.getDataRange().getValues();

  // 按「第一列+第二列」的组合分组处理数据
  var groupedData = values.reduce((map, row) => {
    // 生成分组键:第一列+第二列内容拼接
    const groupKey = `${row[0]} ${row[1]}`;
    // 处理当前行:转换日期格式,排除前两列
    const processedRow = row.slice(2).map(cell => {
      // 判断是否为日期类型,统一转为DD/MM/YYYY格式
      if (cell instanceof Date) {
        const day = String(cell.getDate()).padStart(2, '0');
        const month = String(cell.getMonth() + 1).padStart(2, '0');
        const year = cell.getFullYear();
        return `${day}/${month}/${year}`;
      }
      // 非日期类型直接返回
      return cell;
    });
    // 更新分组数据:将处理后的行添加到对应分组
    if (map.has(groupKey)) {
      map.get(groupKey).push(processedRow);
    } else {
      map.set(groupKey, [processedRow]);
    }
    return map;
  }, new Map());

  // 清理目标文件夹内的旧文件
  var folder = DriveApp.getFolderById('###'); // 替换为你的Google Drive文件夹ID
  var files = folder.getFiles();
  while (files.hasNext()) {
    files.next().setTrashed(true);
  }

  // 生成每个分组的TXT文件
  groupedData.forEach((rows, fileName) => {
    // 将分组内的行转换为文本,每行内容用空格分隔(可根据需求调整分隔符)
    const fileContent = rows.map(row => row.join(" ")).join("\n");
    folder.createFile(`${fileName}.txt`, fileContent);
  });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:40:39