求助:编写Google Sheets宏实现数据替换与格式整理
Google Sheets Apps Script 宏实现方案
功能概述
- 批量整合原表列数据生成指定格式的
Subject列 - 提取
Request Date列生成新表的Date列 - 相比公式方案,脚本一次性读写数据,大幅降低表格卡顿问题
完整脚本代码
function formatTimesheet() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sourceSheet = ss.getSheetByName("原数据表"); // 替换为你的原工作表名称 const targetSheet = ss.getSheetByName("转换后数据表") || ss.insertSheet("转换后数据表"); // 读取原表数据(跳过表头行) const sourceData = sourceSheet.getDataRange().getValues().slice(1); if (sourceData.length === 0) return; // 转换数据格式 const targetData = sourceData.map(row => { const [dept, name, duration, payCode, reqDate] = row; // 严格按照要求生成Subject文本 const subject = `${dept}:${name}(${duration},${payCode})`; return [subject, reqDate]; }); // 写入目标表 targetSheet.clearContents(); // 设置表头 targetSheet.getRange(1, 1, 1, 2).setValues([["Subject", "Date"]]); // 写入转换后的数据 targetSheet.getRange(2, 1, targetData.length, 2).setValues(targetData); SpreadsheetApp.getUi().alert("数据转换完成!"); }
使用指南
- 打开目标Google Sheets,点击「扩展程序」→「Apps脚本」
- 删除编辑器中的默认代码,粘贴上述脚本
- 将脚本中的
"原数据表"替换为你实际的原工作表名称 - 点击保存按钮,给脚本命名(例如
FormatTimesheet) - 返回表格,点击「扩展程序」→「FormatTimesheet」→「formatTimesheet」,首次运行需完成授权验证
优势说明
- 一次性读写所有数据,避免公式反复计算导致的表格缓慢
- 自动生成符合标点要求的
Subject内容,无需手动调整格式 - 自动创建目标工作表(如果不存在),无需提前准备
内容的提问来源于stack exchange,提问作者Thao
相关产品推荐
相关产品推荐

