如何使用Google Apps脚本从Google Spreadsheet单元格获取网址?

时间:2016-10-05 10:46:00

标签: google-apps-script google-sheets

我有一个从excel复制的谷歌电子表格和我有一些问题。 这是我的文件https://docs.google.com/spreadsheets/d/1Ok_phu5OXtvKHLj3MLa7N3WV2qBdMWRz8dLHnTqjHrc/edit?usp=sharing

cell with a hyperlink without a formula

这是我的代码

function myFunction() {
  cel = SpreadsheetApp.getActiveSpreadsheet().getActiveCell()
  Logger.log(cel.getFormula())
  Logger.log(cel.getValue())
}

这是我的日志:

[16-10-05 13:39:59:628 EEST] 
[16-10-05 13:39:59:629 EEST] RU: VTB Arena - Park and Hotel

我需要获取一个网址(https://na3.salesforce.com/0065000000a1b8p)我该怎么做?

5 个答案:

答案 0 :(得分:2)

目前,Google Apps脚本的电子表格服务无法通过使用getValue()方法获取单元格富文本内容的属性,只能获取纯文本。其他方法(如getFormula(),getNote())可以获取相应的单元格属性,但它们都不包含链接的URL。

在Google表格上,解决方法是手动获取网址。以编程方式替代的是,在将文件转换为Google表格格式之前,在Excel文件上使用VBA来获取超链接。有关详细信息,请参阅answerCan I use an excel formula to extract the link location of a hyperlink in a cell?

答案 1 :(得分:0)

我认为最好将Google电子表格发布到网络上,然后使用BS4解析html以获取网址。

答案 2 :(得分:0)

感谢您提出这个问题!我一直在寻找自己!我将Facebook朋友列表复制到了电子表格中。他们将其复制为Rich Text,表示它们包含链接,但无法以=超文本格式使用。

我一直搜寻着,似乎可以确定没有简单的方法。

然后我偶然发现了它。

只需选择包含RTF的单元格(假设您希望将鼠标悬停在该文本上就可以获取其中包含的链接),然后按Command-K即可编辑链接。

它将打开一个窗口,您可以在其中在顶部字段中输入单元格文本,并在底部字段中输入URL。

无需输入任何内容-默认情况下位于该位置。因此,只需按[Enter]和BAM!现在它的格式为= HYPERLINK(“ URL”,“ Text”)

但是我有数百个要转换,并想找到一种更简单的方法。

所以我偶然发现了AppleScript(即使直到现在我完全从Apple过渡过来,我也从未使用过它。)

我创建了一个简单的AppleScript:

告诉应用程序“ Google Chrome”激活 延迟0.5 告诉应用程序“系统事件”     延迟0.5     告诉进程“ Chrome”         使用命令按下“ k”         延迟0.2         击键返回         延迟0.2         击键返回         延迟0.2         击键返回         延迟0.2     结束告诉 结束告诉

在电子表格中选择要编辑的单元格(假设您使用的是Google Chrome),然后运行此AppleScript。

我制作了几种脚本,全部以美国货币金额表示。所以我有一个只运行一次,然后是5x,10x,20x,50x和100x。

因此,对于我的143个名称列表,我现在运行了100x脚本,然后运行了50x脚本。当我看着计算机迅速为我完成工作时,我感到难过并喝了一口咖啡。

很抱歉,如果这不是人们想要的更多信息,这是我第一次在这里回答一个问题(我记得),而且,如果我偶然发现了我现在正在写的答案,那将会是今年早些时候是天赐之物!

编码愉快!

答案 3 :(得分:0)

这是我用来从单元格获取链接的一种解决方法。显然,当您使用ctrl + K添加链接时,它们将以富文本格式而不是公式形式添加。我在Google工作表中使用了以下功能,将带有链接的这些富文本字段转换为html。如果字段中有链接,则它将返回该链接的html代码。如果没有链接,则它仅返回传入的文本。当然,可以更优雅地完成此操作……我使用了很多变量,以使操作更容易进行。

//get link from a cell given by A1 notation
function getHtmlfromRichTextRange(theRange){
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var range = sheet.getRange(theRange);
  var cell = range; 
  var cellValue = cell.getRichTextValue();
  var cellText = cell.getValue();
  var theThing = cellValue.getLinkUrl();

  if (theThing == null){
    return cellText;
  } else {
    return '<a href="'+theThing+'">'+cellText+'</a>'; 
  }
}

在电子表格中,您可以执行以下操作(请参见图片1

  1. 在A1单元格中,输入“到苹果的链接”
  2. 突出显示单元格A1,按ctrl + k将超链接添加到http://www.apple.com
  3. 在单元格B1中,输入A1
  4. 在单元格C1中,输入公式=getHtmlfromRichTextRange(B1)

因此,您应该看到

<a href="http://www.apple.com/">a link to apple</a>在单元格C1中

以这种方式使用此示例时,我注意到了几件事:

  • 如果C1中的函数仅返回URL,而不返回周围带有一些String文本的URL,则Google表格也将C1转换为RichText。由于我使用它来创建html电子邮件,因此我有了该函数返回链接的HTML代码。
  • 我可以简化并在函数引号中传递字符串"A1"。我试图找到一种方法来更新A1中的RTF链接时更新C1中的公式。我的想法是,如果A1更改(例如URL更改),那么C1中函数的结果将自动更新。没有。我没有追求。上面写的东西对我有用。
  • 如果链接是单元格中的所有文本,则此代码有效。如果单元格中有一些带有超链接的文本,而有些文本则没有(例如,超链接只是单元格中文本的一部分),则此代码将其作为纯文本而不是URL返回。

我按原样使用AppScript中的函数来循环包含链接的范围。在循环内部,我传递了单元格的A1标记功能,其中一些具有链接。它效果很好,节省了我很多时间!

我敢肯定有一种更简单的方法。我通常会发现,在以较困难的方式进行操作之后,因此不再需要这样做。

我希望这会有所帮助!

答案 4 :(得分:-1)

试试这个:

var url = /"(.*?)"/.exec(cel.getFormulaR1C1())[1];
Logger.log(url);

当我手动将其添加为链接时,它会提取URL。

请注意,我在测试中使用了以下内容:

  var dataSheet = CentralSS.getSheetByName(CENTRAL_DATAFILES_SHEETNAME);
  var range = dataSheet.getRange("E2");
  var url = /"(.*?)"/.exec(range.getFormulaR1C1())[1];