Я использовал js для создания своего синтаксиса команд, теперь как я могу его использовать?

#javascript #google-apps-script #google-sheets

#javascript #google-apps-script #google-таблицы

Вопрос:

У меня есть Google Sheet со скриптом .gs, который успешно генерирует параметры dynamicnewRichTextValue(), которые предназначены для ввода в ячейку листа, которая будет содержать несколько строк текста, каждая со своим собственным URL. Я не знаю всех параметров заранее (это может быть один текст и одна ссылка, или по две, или больше), поэтому я динамически генерирую параметры.

Допустим, конечное состояние должно быть таким (в этом случае есть только две строки, но их может быть больше или меньше:

 var RichTextValue=SpreadsheetApp.newRichTextValue()
  .setText("mailto:fred@abcdef.com,mailto:jim@abcdef.com")
  .setLinkUrl(0,6,"mailto:fred@abcdef.com")
  .setLinkUrl(7,19,"mailto:jim@abcdef.com")
  .build();
 

В моем скрипте я не знаю, сколько параметров «setText» или операторов «setLinkUrl» мне нужно будет сгенерировать, поэтому я делаю это динамически.

Это просто обработать для «setText», потому что я могу просто передать одну переменную, созданную во время более раннего цикла, который создает параметры «setText». Давайте вызовем эту переменную setTextContent , и она будет работать следующим образом:

 var RichTextValue=SpreadsheetApp.newRichTextValue()
  .setText(setTextContent)
 

Так что до этого момента все было замечательно. Проблема в том, что у меня есть другая переменная, которая генерирует URL-адресную часть параметров newrichtextvalue() вплоть до инструкции «.build();». Итак, давайте вызовем эту переменную setUrlContent, и она будет встроена в более ранний цикл и содержит строку для остальной части инструкции:

 .setLinkURL(0,22,"mailto:fred@abcdef.com").setLinkURL(23,44,"mailto:jim@abcdef.com")
 

Я в тупике, пытаясь понять, как прикрепить его к предыдущему фрагменту. Я чувствую, что это что-то простое, о чем я забываю. Но я не могу найти его после долгих исследований. Как мне подключить setUrlContent к приведенному выше коду, чтобы команда выполнялась? Я хочу присоединить приведенные выше фрагменты и вернуться к присвоению всего этого переменной, которую я могу поместить в ячейку:

 var emailCell=SpreadsheetApp.newRichTextValue()
  .setText("mailto:fred@abcdef.com,mailto:jim@abcdef.com")  // I can dynamically create up to here
  .setLinkUrl(0,6,"mailto:fred@abcdef.com")                 // ...but these last couple lines are 
  .setLinkUrl(7,19,"mailto:jim@abcdef.com")                 // stuck in a string variable. 
  .build();

sheet.getRange(1,1,1,1).setRichTextValue(emailCell)
 

Спасибо!

Ответ №1:

Я полагаю, что ваша цель и ситуация заключаются в следующем.

  • Вы хотите использовать свой скрипт, динамически изменяя количество электронных писем.

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

  • Когда запускается ваш следующий скрипт, я думаю, что ссылки отображаются на mailto и fred@abcdef. .
       var emailCell=SpreadsheetApp.newRichTextValue()
        .setText("mailto:fred@abcdef.com,mailto:jim@abcdef.com")
        .setLinkUrl(0,6,"mailto:fred@abcdef.com")
        .setLinkUrl(7,19,"mailto:jim@abcdef.com")
        .build();
    
      sheet.getRange(1,1,1,1).setRichTextValue(emailCell)
     
  • Я подумал, что вам, возможно, нужны связанные адреса электронной почты, как показано ниже.
    • fred@abcdef.com имеет ссылку mailto:fred@abcdef.com .
    • jim@abcdef.com имеет ссылку mailto:jim@abcdef.com .

В этом ответе я хотел бы предложить модифицированный сценарий для вышеуказанного направления.

Модифицированный скрипт:

 var inputText = "mailto:fred@abcdef.com,mailto:jim@abcdef.com";  // This is your sample text value.

var ar = inputText.split(",").map(e => {
  var v = e.trim();
  return [v.split(":")[1], v];
});
var text = ar.map(([e]) => e).join(",");
var emailCell = SpreadsheetApp.newRichTextValue().setText(text);
var start = 0;
ar.forEach(([t, u], i) => {
  var len = t.length;
  emailCell.setLinkUrl(start, start   len, u);
  start  = len   1;
});
SpreadsheetApp.getActiveSheet().getRange(1,1,1,1).setRichTextValue(emailCell.build());
 
  • В этой модификации inputText разделяется на гиперссылку и текст (например, когда используется ваше примерное значение, это fred@abcdef.com и mailto:fred@abcdef.com .), А текст, включая гиперссылку, помещается в ячейку.
  • В этом случае, например, даже при var inputText = "mailto:fred@abcdef.com,mailto:jim@abcdef.com" изменении на var inputText = "mailto:fred@abcdef.com" и var inputText = "mailto:fred@abcdef.com,mailto:jim@abcdef.com,mailto:sample@abcdef.com" каждая гиперссылка отражается в каждом тексте.

Примечание:

  • Если вы хотите получить гиперссылку mailto:fred@abcdef.com на текст mailto:fred@abcdef.com , вы также можете использовать следующий модифицированный скрипт.
       var inputText = "mailto:fred@abcdef.com,mailto:jim@abcdef.com";  // This is your sample text value.
    
      var ar = inputText.split(",").map(e => e.trim());
      var emailCell = SpreadsheetApp.newRichTextValue().setText(inputText);
      var start = 0;
      ar.forEach((t, i) => {
        var len = t.length;
        emailCell.setLinkUrl(start, start   len, t);
        start  = len   1;
      });
      SpreadsheetApp.getActiveSheet().getRange(1,1,1,1).setRichTextValue(emailCell.build());
     

Ссылки: