Гиперссылка на Google Sheet To Doc - PullRequest
0 голосов
/ 28 апреля 2018

Контекст: Я вставляю данные формы G в таблицу G, которая затем добавляет новую строку в таблицу, которую я имею в документе G. В последнем столбце таблицы документов Google я хочу предоставить гиперссылку со словом «Изменить».

Я хочу добиться того, что делает .link, но вставляет html, который не работает в docs. https://www.w3schools.com/jsref/jsref_link.asp

Вот мой сценарий прямо внутри листа G (при отправке формы):

  // 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(); 

Так что прямо сейчас он напрямую добавляет гиперссылку в форму Google. Принимая во внимание, что я хочу переключить текущую переменную гиперссылки в массиве ячеек на фактическую гиперссылку с надписью «Изменить», имеющую URL-адрес переменной гиперссылки.

Я пытался добавить данные сценария непосредственно из формы G Пример

var hyperlink = '=HYPERLINK("www.google.com", "Google")';

, который сработал и вставил Гиперссылку в G Лист. Проблема состояла в том, что он не мог тогда взять это к Доку. Я думаю, может быть потому, что формулы G-листа не могут быть извлечены в таблицы G-документов?

1 Ответ

0 голосов
/ 28 апреля 2018

Я не смог найти метод, который бы напрямую давал ссылку при добавлении значений в ячейку. Так как насчет этой модификации?

Очки модификации:

  • После добавления значений ячеек ссылка устанавливается с помощью 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(), отличается от этого, измените регулярное выражение.
  • Если вы хотите изменить индекс LINK в массиве cells, измените его.

Ссылка:

Если я неправильно понял ваш вопрос, извините.

Редактировать:

// 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...