使用Google Script为导入的CSV每行添加时间戳问题求助
给Gmail导入的CSV数据添加时间戳
单独的onEdit触发器无法生效,是因为该触发器仅响应用户手动编辑工作表的操作,脚本自动导入数据的行为不会触发它。直接在你的导入脚本中修改,给每一行CSV数据追加时间戳即可,修改后的代码如下:
function importCSVFromGmail() { // 搜索目标Gmail线程 var threads = GmailApp.search("Gmail Search"); var messages = threads[0].getMessages(); // 获取最新邮件的第2个附件(索引从0开始) var attachment = messages[messages.length - 1].getAttachments()[1]; // 打开目标表格和工作表 var sheet = SpreadsheetApp.openById('SHEET ID'); var tab = sheet.getSheetByName('Data'); // 解析CSV数据 var csvData = Utilities.parseCsv(attachment.getDataAsString(), ","); // 给每一行CSV数据追加当前时间戳(可按需格式化) var timestamp = new Date(); // 若需要格式化时间(如"yyyy-MM-dd HH:mm:ss"),替换上面一行: // var timestamp = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "yyyy-MM-dd HH:mm:ss"); csvData.forEach(row => row.push(timestamp)); // 获取目标工作表的最后一行,避免用整个表格的最后一行导致错误 var startRow = tab.getLastRow() === 0 ? 1 : tab.getLastRow() + 1; // 写入数据,列数适配新增的时间戳列 tab.getRange(startRow, 1, csvData.length, csvData[0].length).setValues(csvData); }
关键修改说明
- 通过
forEach给解析后的每一行CSV数据追加时间戳,确保每行都记录导入时间 - 修正
startRow逻辑:工作表为空时从第1行写入,否则从最后一行的下一行开始,避免覆盖已有数据 - 写入范围的列数自动适配新增的时间戳列,无需手动指定列数
内容的提问来源于stack exchange,提问作者Kevin Flaherty
相关产品推荐
相关产品推荐

