You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:27:03