如何使用page token导出Google Docs大量评论至Google Sheets
解决Google Docs评论导出至Sheets的分页问题
通俗理解Page Token
当调用Drive API获取评论时,若评论数量过多,API不会一次性返回所有结果,而是将数据拆分成「页」返回,每页最多100条(maxResults的上限)。每次请求后,API会返回一个nextPageToken——这是获取下一页数据的“通行证”。拿着这个令牌再次请求API,就能拿到下一页的评论,直到API返回的nextPageToken为空,就说明所有评论都已获取完毕。
修改后的完整代码
function listComments() { // 初始化变量 var docId = '1h-BJrklSFgfGNCzdAWziNx5b5EDRjHHJ3DTkXHNhtUE'; var sheet = SpreadsheetApp.openById('1XNJdSRMB1KR9_gpzbd6_rIC6WYpPoExuWkb12Nd1tRI').getSheetByName('Comments'); var sList = [], hList = [], cList = [], nList = [], dList = []; var pageToken = null; // 循环获取所有分页的评论 do { // 带上pageToken请求当前页的评论 var comments = Drive.Comments.list(docId, { fields: "*", maxResults: 100, pageToken: pageToken }); // 处理当前页的评论 if (comments.items && comments.items.length > 0) { for (var i = 0; i < comments.items.length; i++) { var comment = comments.items[i]; sList.unshift([comment.status]); hList.unshift([comment.context.value]); cList.unshift([comment.content]); nList.unshift([comment.author ? comment.author.displayName : '']); dList.unshift([comment.createdDate ? new Date(comment.createdDate).toLocaleString() : '']); } } // 更新pageToken为下一页的令牌,无令牌时循环结束 pageToken = comments.nextPageToken; } while (pageToken); // 清空旧数据(避免残留) sheet.getRange("A2:E" + sheet.getLastRow()).clearContent(); // 写入新数据到表格 if (sList.length > 0) { sheet.getRange("A2:A" + (sList.length + 1)).setValues(sList); sheet.getRange("B2:B" + (hList.length + 1)).setValues(hList); sheet.getRange("C2:C" + (cList.length + 1)).setValues(cList); sheet.getRange("D2:D" + (nList.length + 1)).setValues(nList); sheet.getRange("E2:E" + (dList.length + 1)).setValues(dList); } }
代码修改说明
- 新增
pageToken变量与do-while循环,持续请求直到所有分页数据获取完成 - 每次请求时带上当前
pageToken,确保能拿到下一页评论 - 增加清空旧数据步骤,避免之前的评论残留
- 保留原有的
unshift倒序插入逻辑,若需要正序导出,将unshift替换为push即可
内容的提问来源于stack exchange,提问作者Robert Wenger
相关产品推荐
相关产品推荐

