Как создать кнопку в ячейке, используя только скрипт приложения Google? не с опцией Вставка> рисунок - PullRequest
0 голосов
/ 07 апреля 2020

Мне нужно сделать кнопку со скриптом, она необходима для того, что я хочу сделать, чтобы кнопка, которая может быть создана в опции insert>draw, не имела того, что мне нужно, я хочу сделать весь вызов кнопками в каждой строке любой кнопкой выполнить функцию при нажатии, я хочу знать, возможно ли это

Я посмотрел эту информацию здесь, но на самом деле не знаю, как это сделать

Использование одного сценария для копирования текста из ячеек строки на другой лист с использованием значка в строке

Сценарий в мои html, в которые встраиваются мои карты Трелло

  <script>

  (() => {

    google.script.run.withSuccessHandler(myname => {

      const tag = document.createElement('script');

      tag.src = "https://p.trellocdn.com/embed.min.js";

      tag.addEventListener('load', () => {

        const elem = document.querySelector('#card');

        elem.href = myname;

        window.TrelloCards.load(document); // <-- this triggers the lookup
      });

      document.body.append(tag);

    }).getCardById();

  })();
  </script>

Функция getCardById

function getCardById(){
  var app = SpreadsheetApp;
  var activeSp = app.getActiveSpreadsheet();
  var activeSheet = activeSp.getActiveSheet();
  //Range of links
  var linkRange = activeSheet.getRange(2,2,3,1);
  //Cuantity of values
  var filLength = linkRange.getValues();
  var cont = 2;
  if (activeSheet.getActiveCell().getColumn() == 6.0){
    for (i = 0; i < filLength.length ; i++){
      if (activeSheet.getActiveCell().getRow() == activeSheet.getRange(cont,2).getRow()){ 
        var linkCol = 2.0;
        var linkFil = activeSheet.getActiveCell().getRow();
        var linkRange = activeSheet.getRange(linkFil, linkCol);
        var linkValue = linkRange.getValue();
        var url = linkValue;
        return url;
      }
      cont++;
    }
  }
}

Функция seeCard это та, которая должна отображаться при нажатии флажка, при нажатии она должна показывать вам значения той же строки

function seeCard(){
 var app = SpreadsheetApp;
  var activeSp = app.getActiveSpreadsheet();
  var activeSheet = activeSp.getActiveSheet();
  var startCol = 6;
  var startFil = 2;
  var numCols = 1;
  var numFils = 2;

  //Rango de links
  var linkRange = activeSheet.getRange(2,2,3,1);
  //Cantidad de valores para el for 
  var filLength = linkRange.getValues();
  var cont = 2;

  if (activeSheet.getActiveCell().getColumn() == 6.0){
    for (i = 0; i < filLength.length ; i++){
      if (activeSheet.getActiveCell().getRow() == activeSheet.getRange(cont,2).getRow()){ 
        //Html
        var templateFileId = '1upA3JHioEyxLScebasmsmwXW-SxsiKaPRznKLCKFYhw';
        var sheetName = 'Trello sheet';
        SpreadsheetApp.openById(templateFileId).copy(sheetName);
        var excel =  SpreadsheetApp.create("Probando un html interno a ver ")
        var html = HtmlService.createHtmlOutputFromFile('index') //index is the name of your HTML file
        .setTitle('Trello card')
        .setWidth(350)
        .setHeight(250);
        SpreadsheetApp.getUi().showModalDialog(html, 'trello card '); // Or DocumentApp or FormApp.
        //End
      }
      cont++;
    }
  }
}

Где кнопка с надписью seeCard Мне нужно поставить флажок, и когда вы нажмете ссылку, отправьте ее на мой html и показать карту trello, прикрепленную к этой ссылке

enter image description here

Ответы [ 2 ]

0 голосов
/ 07 апреля 2020
  • Вы хотите поставить флажки в ячейках "F2: F".
  • Вы хотите запустить seeCard(), когда флажок установлен.

Я мог понять, как выше. Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Пример сценария:

Пожалуйста, скопируйте и вставьте следующий сценарий. И, , пожалуйста, установите триггер события OnEdit для функции installedOnEdit. Потому что в вашем скрипте при использовании простого триггера возникает ошибка в методах, которые требуются для авторизации, например SpreadsheetApp.openById() и SpreadsheetApp.create(). Поэтому для этого используйте устанавливаемый триггер события OnEdit.

function installedOnEdit(e) {
  const range = e.range;
  if (range.columnStart == 6 && range.rowStart > 1 && range.isChecked()) {
    range.uncheck();
    seeCard();
  }
}
  • Чтобы запустить скрипт, установите флажок в столбце «F». Таким образом, функция installedOnEdit запускается устанавливаемым триггером события OnEdit. В вашем скрипте активный диапазон извлекается из вашего скрипта. Так что в вашем случае я думаю, что этот пример сценария работает.

Примечание:

  • Я думал, что объект события также может быть использован. Но я не уверен в вашем сценарии. Поэтому я не мог предложить это. Я прошу прощения за это.

Ссылки:

0 голосов
/ 07 апреля 2020
function onEdit(e) {
  //e.source.toast('Entry');
  const sh=e.range.getSheet();
  if(sh.getName()=='Sheet13') {
    if(e.range.columnStart==1 && e.range.rowStart==1 ) {
      e.range.setValue('FALSE');
      one(e);
    }
    if(e.range.columnStart==2 && e.range.rowStart==1 ) {
      e.range.setValue('FALSE')
      two(e);
    }
  }
}

function one(e) {
  e.source.toast('This is function one');
}


function two(e) {
  e.source.toast('This is function two');
}

Изображение:

enter image description here

Анимация:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...