如何使用googlesheets中的appsscript将所有评论转换为笔记?

问题描述 投票:0回答:2

我想获取谷歌工作表单元格中的所有评论,以将其转换为同一单元格中的注释。这里单元格中的数据不应更改。并且还应包括发表评论的人的姓名。 我使用这段代码来满足第一个要求。但这没有用。如何才能正确完成此操作?

function convertCommentsToNotes() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = sheet.getDataRange();
  var notes = range.getNotes();

  for (var i = 0; i < notes.length; i++) {
    for (var j = 0; j < notes[i].length; j++) {
      var note = notes[i][j];
      var comment = sheet.getRange(i + 1, j + 1).getComment();
      if (comment !== null) {
        var commentText = comment.getRange().getValue();
        note = note + "\n\n" + commentText;
      }
      sheet.getRange(i + 1, j + 1).setNote(note);
    }
  }
}
google-apps-script google-sheets comments
2个回答
2
投票

我相信您的目标如下。

  • 您想要使用 Google Apps 脚本将注释转换为单元格,就像将注释转换为相同的单元格一样。
  • 您想要将注释添加到现有笔记中。

问题和解决方法:

现阶段,为了从电子表格中检索注释,需要使用Drive API 的注释。但是,即使从 API 检索评论,也可以获取评论文本,就像

"anchor": "{\"type\":\"workbook-range\",\"uid\":0,\"range\":\"123456789\"}"
一样。不幸的是,无法从
\"range\":\"123456789\"
得知锚定单元。

根据上述情况,我创建了一个 Google Apps 脚本库,用于从单元格中获取评论。 Ref 在这个答案中,我想提出一个修改后的脚本来反映这个库。

用途:

1.安装 Google Apps 脚本库。

您可以在这里查看如何安装它。

2.启用云端硬盘 API。

请在高级 Google 服务中启用 Drive API。 参考

2.示例脚本。

请将以下脚本复制并粘贴到电子表格的脚本编辑器中。

function convertCommentsToNotes() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const ssId = ss.getId();
  const sheet = ss.getActiveSheet();
  const notes = sheet.getDataRange().getNotes();
  const res = DocsServiceApp.openBySpreadsheetId(ssId).getSheetByName(sheet.getSheetName()).getComments();
  const obj = res.reduce((o, { range, comment }) => (o[`${range.row - 1}_${range.col - 1}`] = comment.map(e => e.comment.trim()).join("\n"), o), {});
  const maxRows = sheet.getMaxRows();
  const maxCols = sheet.getMaxColumns();
  const newNotes = [];
  for (let i = 0; i < maxRows; i++) {
    const temp = [];
    for (let j = 0; j < maxCols; j++) {
      const note = ((notes[i] && notes[i][j]) ? notes[i][j] : "") + (obj[`${i}_${j}`] || "");
      temp.push(note);
    }
    newNotes.push(temp);
  }
  sheet.getRange(1, 1, newNotes.length, newNotes[0].length).setNotes(newNotes);

  // If you want to delete all comments, you can also use the following script.
  // But, when you use the following script, please be careful about this, because all comments are deleted.
  // const commentIds = Drive.Comments.list(ssId).items.map(({ commentId }) => commentId);
  // commentIds.forEach(id => Drive.Comments.remove(ssId, id));
}
  • 运行此脚本时,将检索 Google 电子表格的活动工作表中的所有注释。并且,这些评论将添加到现有注释中。

参考:


0
投票

谢谢你。这非常有效。

© www.soinside.com 2019 - 2024. All rights reserved.