上下文:我正在将G表单数据插入到G表中,然后将新行添加到我在G Doc上的表中。 Google文档表格中的最后一栏我想提供一个带有“编辑”字样的超链接。
我想实现.link所做的,但它会插入在文档中无效的html。 https://www.w3schools.com/jsref/jsref_link.asp
这是我的剧本直接在G Sheet内(在表格提交上):
// Grab the Table
var body = DocumentApp.openById('theId').getBody(),
searchElement = body.findElement(DocumentApp.ElementType.TABLE),
element = searchElement.getElement(),
table = element.asTable();
// Wait for row insertion to finish, so that sheet.getLastRow() method gets the updated number of rows
Utilities.sleep(1000); // 1 second
// Get the last row ID
var mySs = SpreadsheetApp.openById('sheetId').getSheets()[0];
var lastRowId = mySs.getLastRow();
var hyperlink = mySs.getRange('L' + lastRowId).getValue();
// Insert the Row
var cells = [lastRowId, hyperlink];
var addRow = table.appendTableRow();
cells.forEach(function(e, i){
addRow.insertTableCell(i, e);
});
body.saveAndClose();
所以现在它直接将超链接添加到谷歌表单。而我想将单元格数组中的当前超链接变量切换为实际超链接,即“编辑”。具有超链接变量URL。
我尝试直接从G Form 示例
添加脚本数据var hyperlink = '=HYPERLINK("www.google.com", "Google")';
工作并将超链接插入G表。问题是它无法将其带到G Doc。我想也许是因为G Sheet公式无法提取到G Doc Tables?
答案 0 :(得分:1)
添加单元格值时,我找不到直接给出链接的方法。那么这个修改怎么样?
setLinkUrl()
设置链接。body.saveAndClose()
发生错误。请在文档中使用saveAndClose()
。// Grab the Table
var doc = DocumentApp.openById('theId');
var body = doc.getBody(),
searchElement = body.findElement(DocumentApp.ElementType.TABLE),
element = searchElement.getElement(),
table = element.asTable();
// Wait for row insertion to finish, so that sheet.getLastRow() method gets the updated number of rows
Utilities.sleep(1000); // 1 second
// Get the last row ID
var mySs = SpreadsheetApp.openById('sheetId').getSheets()[0];
var lastRowId = mySs.getLastRow();
var hyperlink = mySs.getRange('L' + lastRowId).getValue(); // Sample is '=HYPERLINK("www.google.com", "Google")'
// var hyperlink = '=HYPERLINK("www.google.com", "Google")'; // If the error related to LINK occurs, please use this line instead of above hyperlink.
var link = hyperlink.match(/"(.*?)"/g); // Added
// Insert the Row
var cells = [lastRowId, theDate, comment, link[1].replace(/"/g, "")]; // Modified
var addRow = table.appendTableRow();
cells.forEach(function(e, i){
addRow.insertTableCell(i, e);
});
table.getCell(table.getNumRows() - 1, cells.length - 1).setLinkUrl(link[0].replace(/"/g, "")); // Added
doc.saveAndClose();
theDate
和comment
未在您的问题的脚本中声明。
mySs.getRange('L' + lastRowId).getValue()
检索的值是=HYPERLINK("www.google.com", "Google")
之类的字符串值。因此,"(.*?)"
的正则表达式检索URL和链接字符串。
mySs.getRange('L' + lastRowId).getValue()
检索到的值与此不同,请修改正则表达式。cells
数组中LINK的索引,请修改它。如果我误解了你的问题,我很抱歉。
// Grab the Table
var doc = DocumentApp.openById('theId');
var body = doc.getBody(),
searchElement = body.findElement(DocumentApp.ElementType.TABLE),
element = searchElement.getElement(),
table = element.asTable();
// Wait for row insertion to finish, so that sheet.getLastRow() method gets the updated number of rows
Utilities.sleep(1000); // 1 second
// Get the last row ID
var mySs = SpreadsheetApp.openById('sheetId').getSheets()[0];
var lastRowId = mySs.getLastRow();
// --- Following part was modified ---
var url = 'url.com'; // Added
var linkText = 'Edit'; // Added
// Insert the Row
var cells = [lastRowId, theDate, comment, linkText]; // Modified
var addRow = table.appendTableRow();
cells.forEach(function(e, i){
addRow.insertTableCell(i, e);
});
table.getCell(table.getNumRows() - 1, cells.length - 1).setLinkUrl(url); // Modified
doc.saveAndClose();