Попытка создать скрипт, который автоматически заполняет google do c с замаскированными гиперссылками из листа google. - PullRequest
0 голосов
/ 08 января 2020

Например, у меня есть лист Google, отформатированный следующим образом: строки от 1 до n

ТЕКСТ ГИПЕРЛИНКОВ ДОКУМЕНТА

& CAT JUMPS 1 & https://i.imgur.com/2oTdDKF.jpg CAT JUMPS 1

& DOG JUMPS 1 & https://i.imgur.com/IhpYydt.jpg?1 DOG JUMPS 1

У меня есть google do c с такой информацией:

Кошки хорошие прыгуны & CAT JUMPS 1 &. Собаки также прыгают высоко и DOG JUMPS 1 &.

И я хочу, чтобы результат был таким:

Кошки - хорошие прыгуны CAT JUMPS 1 . Собаки также прыгают с высоты Прыжки собаки 1 .

Я не делал сценарий Google раньше. Я знаю, как преобразовать текст в гиперссылку с помощью сценариев, но я не знаю, как заставить его посмотреть на листе Google данные или заставить его искать текст документа и заменять текст. У кого-нибудь есть какое-нибудь руководство о том, где мне следует искать, чтобы выяснить, как это сделать?

Спасибо за помощь.

1 Ответ

0 голосов
/ 09 января 2020

Это можно сделать двумя способами.

Вариант 1

Как указано в https://www.reddit.com/r/GoogleAppsScript/comments/elx0qh/trying_to_make_a_script_that_auto_fills_a_google/, вы можете:

  • Вы можете использовать findText для поиска с использованием регулярных выражений. Например, body.findText("&.*&").
  • Затем для каждой найденной записи удалите начальную и конечную &
  • . Это даст вам строку поиска. Используйте это, чтобы найти значения замены из таблицы Google
  • Затем используйте replaceText для замены строк

Пример:

// get the lookup data from the spreadsheet
var lookupData = SpreadsheetApp.openById("...").getSheetByName("...").getDataRange().getDisplayValues();

// first row is header row
var lookupDataHeaderRow = lookupData.shift();

// get document body from the doc
var documentBody = DocumentApp.openById("...").getBody();

// we will continously search the document until there are no more found results
var searchResult = null;
while(searchResult = documentBody.findText("&.*?&", searchResult))
{
  // get the found element
  var foundElement = searchResult.getElement();

  // make sure it is a text type
  if(foundElement.getType() !== DocumentApp.ElementType.TEXT) continue;

  // get the text object of the found element
  var foundText = foundElement.asText();

  // extract the search string
  var documentText = foundText.getText().match("&(.*?)&")[1];

  // look for the documentText in the lookup data
  var foundLookupRows = lookupData.filter(function(row){
    return row[lookupDataHeaderRow.indexOf("DOCUMENT TEXT")] == documentText;
  });

  // make sure we found it in the lookup data
  if(foundLookupRows.length == 0) continue;

  // first replace the found text with the masking text of the first found row
  foundText.setText(foundLookupRows[0][lookupDataHeaderRow.indexOf("MASKING TEXT")]);

  // make it a hyperlink
  foundText.setLink(foundLookupRows[0][lookupDataHeaderRow.indexOf("HYPERLINK")]);
}

Вариант 2

Аналогично приведенному выше, но:

  • Go через каждую строку в вашем листе Google - ту, у которой есть значения поиска
  • Поиск документа для ДОКУМЕНТ ТЕКСТ и сделать соответствующие замены
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...