如何用Google Apps Script将谷歌表格评论转为备注?
解决谷歌表格评论转备注(含评论者)的正确方法
你的代码有几个关键问题导致失败:
getComment()只能读取旧版的单条评论,新版表格支持的多条评论根本拿不到comment.getRange().getValue()是读取单元格里的原始数据,不是评论内容,完全搞错了- 没有提取评论者名称的逻辑
下面是修正后的代码,能批量把单元格的所有评论(含评论者)追加到对应单元格的备注里,同时保留原有数据和旧备注:
function convertCommentsToNotes() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const dataRange = sheet.getDataRange(); const rows = dataRange.getNumRows(); const cols = dataRange.getNumColumns(); // 遍历每个单元格 for (let row = 1; row <= rows; row++) { for (let col = 1; col <= cols; col++) { const cell = sheet.getRange(row, col); // 获取单元格现有备注 let existingNote = cell.getNote() || ""; // 获取该单元格的所有新版评论 const comments = cell.getComments(); // 遍历每条评论,提取评论者和内容 if (comments.length > 0) { // 如果原有备注不为空,加换行分隔 if (existingNote) { existingNote += "\n\n---\n\n"; } // 拼接所有评论内容(带评论者、时间) comments.forEach(comment => { const author = comment.getAuthor().getEmail() || comment.getAuthor().getName(); const commentText = comment.getContent(); const timestamp = comment.getDate().toLocaleString(); existingNote += `【${author}】 ${timestamp}\n${commentText}\n\n`; }); // 更新单元格备注 cell.setNote(existingNote.trim()); // 可选:如果需要处理完删除评论,解开下面这行注释 // cell.deleteComments(); } } } SpreadsheetApp.getUi().alert("评论转备注完成!"); }
代码关键点说明
- 用
getComments()获取单元格的所有新版评论,支持单条或多条评论的读取 - 通过
comment.getAuthor()提取评论者的邮箱/名称,getContent()获取评论内容,getDate()获取评论时间 - 把评论格式化为「【评论者】 时间\n内容」的清晰格式,和原有备注用分隔线区分,避免混乱
- 完全保留原有备注内容,不会覆盖
- 可选删除评论的逻辑,按需启用即可
使用步骤
- 打开目标谷歌表格
- 点击「扩展程序」→「Apps 脚本」
- 替换原有代码为上述代码
- 点击运行,首次运行需要完成权限授权
- 处理完成后会弹出提示框
内容的提问来源于stack exchange,提问作者TipVisor
相关产品推荐
相关产品推荐

