如何使用 Google DOC API 脚本在 Google 文档的 table(或数组)中添加超链接?
How to add hyperlink in table (or array) in a Google Doc using Google DOC API Script?
我有以下代码用于在 Google 文档中附加 table。
var sss = SpreadsheetApp.openById('id of spreadsheet');
var rawData = sss.getDataRange().getValues()
var data = []
for (var i = 0; i< rawData.length; i++){
tempData=[]
tempData=[rawData[i][1],rawData[i][2],rawData[i][3]]
data.push(tempData)
}
var someDoc = DocumentApp.openById(someId);
var body = someDoc.getBody();
body.appendTable(data).editAsText().setBold(false);
这段代码工作正常。问题是rawdata[i][3]
中有url。它以纯文本形式显示在 Google 文档中。如何将其转换为超链接?如果能写成body.appendParagraph("my link").setLinkUrl("http://www.google.com")
就更好了。问题是它在一个数组中,而不是在段落中。
您可以尝试以下方法使 Google 文档中的所有 URL 都可点击:
function urlClickable() {
var urlRegex = 'http[s]?:\/\/[^ ]+';
var doc = DocumentApp.openById('yourDocId');
var body = doc.getBody();
var urlElement = body.findText(urlRegex);
while (urlElement != null) {
var text = urlElement.getElement().asText();
var startOffset = urlElement.getStartOffset();
var endOffset = urlElement.getEndOffsetInclusive();
text.setLinkUrl(startOffset, endOffset, getUrl(text.getText()));
urlElement = body.findText(urlRegex, urlElement);
}
}
function getUrl(text) {
var startOffset = text.indexOf('http');
var endOffset = text.indexOf(' ', startOffset);
if (endOffset === -1) {
endOffset = text.length;
}
return text.substring(startOffset, endOffset);
}
我相信你的目标如下。
- 您想通过从 Google 电子表格中检索值来将 table 放入 Google 文档。
- 在您的电子表格中,“D”列具有超链接。并且,您想将值设置为超链接。
这样的话,下面的修改怎么样?
修改后的脚本:
var sss = SpreadsheetApp.openById('id of spreadsheet');
var rawData = sss.getDataRange().getValues();
var data = []
for (var i = 0; i < rawData.length; i++) {
tempData = []
tempData = [rawData[i][1], rawData[i][2], rawData[i][3]]
data.push(tempData)
}
var someDoc = DocumentApp.openById(someId);
var body = someDoc.getBody();
// I modified below script.
var table = body.appendTable(data);
for (var r = 0; r < table.getNumRows(); r++) {
var obj = table.getCell(r, 2).editAsText();
var text = obj.getText();
if (/^https?:\/\//.test(text)) obj.setLinkUrl(text);
}
table.editAsText().setBold(false);
- 当此脚本为 运行 时,将使用从电子表格检索的值放置 table。并且,关于 table 的“C”列,文本更改为超链接。
注:
此修改后的脚本假设“D”列的值类似于 https://###
和 http://###
。请注意这一点。
如果要在超链接中给出具体的文字(例如click here
),请修改如下
来自
if (/^https?:\/\//.test(text)) obj.setLinkUrl(text);
至
if (/^https?:\/\//.test(text)) obj.setText("click here").setLinkUrl(text);
参考文献:
我有以下代码用于在 Google 文档中附加 table。
var sss = SpreadsheetApp.openById('id of spreadsheet');
var rawData = sss.getDataRange().getValues()
var data = []
for (var i = 0; i< rawData.length; i++){
tempData=[]
tempData=[rawData[i][1],rawData[i][2],rawData[i][3]]
data.push(tempData)
}
var someDoc = DocumentApp.openById(someId);
var body = someDoc.getBody();
body.appendTable(data).editAsText().setBold(false);
这段代码工作正常。问题是rawdata[i][3]
中有url。它以纯文本形式显示在 Google 文档中。如何将其转换为超链接?如果能写成body.appendParagraph("my link").setLinkUrl("http://www.google.com")
就更好了。问题是它在一个数组中,而不是在段落中。
您可以尝试以下方法使 Google 文档中的所有 URL 都可点击:
function urlClickable() {
var urlRegex = 'http[s]?:\/\/[^ ]+';
var doc = DocumentApp.openById('yourDocId');
var body = doc.getBody();
var urlElement = body.findText(urlRegex);
while (urlElement != null) {
var text = urlElement.getElement().asText();
var startOffset = urlElement.getStartOffset();
var endOffset = urlElement.getEndOffsetInclusive();
text.setLinkUrl(startOffset, endOffset, getUrl(text.getText()));
urlElement = body.findText(urlRegex, urlElement);
}
}
function getUrl(text) {
var startOffset = text.indexOf('http');
var endOffset = text.indexOf(' ', startOffset);
if (endOffset === -1) {
endOffset = text.length;
}
return text.substring(startOffset, endOffset);
}
我相信你的目标如下。
- 您想通过从 Google 电子表格中检索值来将 table 放入 Google 文档。
- 在您的电子表格中,“D”列具有超链接。并且,您想将值设置为超链接。
这样的话,下面的修改怎么样?
修改后的脚本:
var sss = SpreadsheetApp.openById('id of spreadsheet');
var rawData = sss.getDataRange().getValues();
var data = []
for (var i = 0; i < rawData.length; i++) {
tempData = []
tempData = [rawData[i][1], rawData[i][2], rawData[i][3]]
data.push(tempData)
}
var someDoc = DocumentApp.openById(someId);
var body = someDoc.getBody();
// I modified below script.
var table = body.appendTable(data);
for (var r = 0; r < table.getNumRows(); r++) {
var obj = table.getCell(r, 2).editAsText();
var text = obj.getText();
if (/^https?:\/\//.test(text)) obj.setLinkUrl(text);
}
table.editAsText().setBold(false);
- 当此脚本为 运行 时,将使用从电子表格检索的值放置 table。并且,关于 table 的“C”列,文本更改为超链接。
注:
此修改后的脚本假设“D”列的值类似于
https://###
和http://###
。请注意这一点。如果要在超链接中给出具体的文字(例如
click here
),请修改如下来自
if (/^https?:\/\//.test(text)) obj.setLinkUrl(text);
至
if (/^https?:\/\//.test(text)) obj.setText("click here").setLinkUrl(text);