基于两列条件将多行数据导出至多个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
相关产品推荐
相关产品推荐

