通过Google Apps Script提取Google Slides所有URL链接并写入Google Sheet
Google Slides 链接提取适配实现
核心实现逻辑
- 调用
SlidesApp.openById()传入目标演示文稿ID打开文件,获取文稿名称 - 遍历
getSlides()返回的所有幻灯片页 - 对单张幻灯片,遍历
getPageElements()返回的所有页面元素,仅处理包含文本的形状、表格两类元素 - 形状元素直接调用
getText()获取文本对象,表格元素逐行逐单元格遍历获取每个单元格的文本对象 - 对文本对象遍历属性分段,调用
getLinkUrl()提取带链接的URL,兼容原Docs版本的相邻相同链接合并逻辑 - 提取到的所有链接和文稿名称批量写入Google Sheet的
Extracted Links工作表
完整适配代码
function getAllSlidesLinks(slideId, mergeAdjacent) { var links = []; // 打开目标演示文稿 var presentation = SlidesApp.openById(slideId); var presentationName = presentation.getName(); var ss = SpreadsheetApp.getActive(); var sh = ss.getSheetByName('Extracted Links'); var outputRows = []; // 遍历所有幻灯片 var slides = presentation.getSlides(); slides.forEach(function(slide, slideIndex) { // 遍历单页内所有页面元素 var pageElements = slide.getPageElements(); pageElements.forEach(function(element) { var textRanges = []; var elementType = element.getType(); // 处理包含文本的形状元素(文本框、图形等) if (elementType === SlidesApp.PageElementType.SHAPE) { textRanges.push(element.asShape().getText()); } // 处理表格元素,逐单元格提取文本 else if (elementType === SlidesApp.PageElementType.TABLE) { var table = element.asTable(); var rowCount = table.getNumRows(); var colCount = table.getNumColumns(); for (var r = 0; r < rowCount; r++) { for (var c = 0; c < colCount; c++) { textRanges.push(table.getCell(r, c).getText()); } } } // 从文本对象中提取链接 textRanges.forEach(function(text) { if (!text || text.getText().trim() === '') return; var attributeIndices = text.getTextAttributeIndices(); var lastLink = null; attributeIndices.forEach(function(startOffset, i) { var url = text.getLinkUrl(startOffset); if (!url) return; var endOffsetInclusive = (i + 1 < attributeIndices.length) ? attributeIndices[i + 1] - 1 : text.getText().length - 1; // 相邻相同链接合并逻辑,和原Docs版本功能对齐 if (mergeAdjacent && lastLink && lastLink.url === url && lastLink.endOffsetInclusive === startOffset - 1) { lastLink.endOffsetInclusive = endOffsetInclusive; return; } lastLink = { slideIndex: slideIndex + 1, linkText: text.getText().substring(startOffset, endOffsetInclusive + 1), url: url }; outputRows.push([presentationName, url]); links.push(lastLink); }); }); }); }); // 批量写入表格,提升执行性能 if (outputRows.length > 0) { sh.getRange(sh.getLastRow() + 1, 1, outputRows.length, 2).setValues(outputRows); } return links; }
内容的提问来源于stack exchange,提问作者Gabriel Tero
相关产品推荐
相关产品推荐

