返回

Google表格超链接提取:App Script获取文件URL教程

javascript

从 Google 表格单元格中的超链接文件名提取文件 URL

在 Google 表格中,有时单元格可能包含以超链接形式显示的文件名,但你需要的是文件对应的实际 URL,以便进行后续操作,比如获取文件的创建日期。直接处理这些超链接文本往往比较困难,本文探讨几种从单元格中提取链接 URL 的方法,使用 App Script 代码完成任务。

理解问题本质

表格中超链接单元格看似显示文本,其实它还存储着一个隐藏的链接地址。简单的单元格值获取,只能拿到显示的文本内容,而不是背后的 URL。为了访问链接,需要用到特定的 API 方法来获取单元格中的超链接属性,再从中提取 URL。

解决方案一:使用 getRichTextValue() 获取超链接

getRichTextValue() 方法能够返回单元格中包含的富文本信息,其中包括超链接。使用这个方法,我们能够提取隐藏在文本背后的链接。

步骤:

  1. 选择 工具 -> 脚本编辑器,打开 Google App Script 编辑器。
  2. 粘贴以下代码:
function getHyperlinkFromCell(sheetName, row, column) {
  // 获取工作表
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);

  // 获取指定单元格
  var cell = sheet.getRange(row, column);

  // 获取富文本值
  var richTextValue = cell.getRichTextValue();

  // 获取单元格内的超链接,默认使用第一个
  var hyperlink = richTextValue.getLinkUrl();

  return hyperlink;
}
function testGetHyperlink() {
  // 设定表格名称和目标单元格位置
  var sheetName = "Sheet1";
  var row = 1;
  var column = 7;  //假设超链接在G列

  var url = getHyperlinkFromCell(sheetName, row, column);
  Logger.log(url);  // 输出日志查看提取到的URL
}
  1. 点击保存并选择运行-> testGetHyperlink
  2. 查看 执行日志 ,会输出对应的链接。

代码解析:

  • SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName): 获取指定名称的 sheet 工作表对象。
  • sheet.getRange(row, column): 根据行和列定位指定单元格。
  • cell.getRichTextValue(): 获取包含富文本信息的单元格对象。
  • richTextValue.getLinkUrl(): 获取文本内的超链接,如果存在多个,仅返回第一个超链接URL。

解决方案二:循环获取多个单元格的超链接

如果你需要批量获取多个单元格的超链接,可以修改上面的代码,使其可以遍历指定区域,并处理多个超链接。

步骤:

  1. 打开 App Script 编辑器(步骤见上文)
  2. 粘贴如下代码
function getAllHyperlinks(sheetName, startRow, endRow, column) {
    // 获取工作表
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
    var hyperlinks = [];

  // 循环读取
  for (var i = startRow; i <= endRow; i++) {
     var cell = sheet.getRange(i, column);
     var richTextValue = cell.getRichTextValue();
     var hyperlink = richTextValue.getLinkUrl();
    if(hyperlink){
      hyperlinks.push(hyperlink);
     } else {
       hyperlinks.push("No link")
     }
    }

  return hyperlinks;
}
function testGetAllHyperlinks() {
   var sheetName = "Sheet1"; // 工作表名称
    var startRow = 1;       //起始行
    var endRow = 5;       //终止行
    var column = 7;        //列
    var links = getAllHyperlinks(sheetName,startRow, endRow, column)
    Logger.log(links); // 打印所有提取的URL数组

}
  1. 保存,点击运行 -> testGetAllHyperlinks.
  2. 再次查看执行日志可以看到一个包含超链接 URL 的数组, 单元格如果未包含超链接将会输出No link

代码解析:

  • 代码主体为遍历行区域并循环读取链接地址,如果单元格中存在链接则返回该链接地址,如果没有返回“No Link”。

安全提示

  • 权限控制 :在实际使用时,你需要注意脚本的权限。该脚本需要获取工作表的权限,请谨慎授予权限,避免数据泄露。
  • 异常处理 : 以上示例较为简易,对于复杂的单元格情况,或者网络问题等情况需要添加try...catch结构做异常处理。比如当某些单元格没有超链接的时候,避免程序报错中断,或者一些文件url 不可达的情况下做预处理。

通过上述方法,即可方便地从 Google 表格超链接单元格中提取 URL,并进行后续的处理,比如获取文件创建日期。记住根据实际需要调整代码,确保它适应特定的使用场景。