Вызов функции печати внутри другой функции в Google Script - PullRequest
1 голос
/ 29 мая 2020

У меня есть 2 функции: imprimirPDF(), который печатает диапазон в PDF и marcarImpreso(), который отмечает их как напечатанные в флажке на другом листе. Я пытаюсь объединить оба, чтобы они работали вместе при нажатии кнопки на листе, но это не работает.

Я пробовал вызывать imprimirPDF() внутри marcarImpreso() и вызывать оба в новом, а второй работает нормально, но печатный показывает только модальный диалог, который в него написан, это не так. Не открывайте PDF-файл в новом окне. Когда выполняется сам по себе, он работает нормально.

Я думаю возможно это связано с js. html файлом, который он вызывает, так как это то, что открывает PDF-файл в новом окне, но я очень мало знаю о кодировании и написании сценариев, поэтому понятия не имею, как я могу решить эту проблему, чтобы она работала.

Вот скрипты:

Файл Imprimir.gs

function imprimirPDF() {
  SpreadsheetApp.flush();
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sheet = ss.getActiveSheet();
  var lastRow = sheet.getRange("F3:F").getValues().filter(String).length;
  var range = sheet.getRange(3, 1, lastRow, 8)

  var PRINT_OPTIONS = {
  'size': 7,               // paper size.  7=A4
  'fzr': false,            // repeat row headers
  'portrait': false,        // false=landscape
  'fitw': true,            // fit window or actual size
  'gridlines': true,      // show gridlines
  'printtitle': false,
  'sheetnames': false,
  'pagenum': 'UNDEFINED',  // CENTER = show page numbers / UNDEFINED = do not show
  'attachment': false,
  'top_margin': 0.5, 
  'bottom_margin': 0.5,
  'left_margin': 0.5,
  'right_margin': 0.5
  }

  var PDF_OPTS =  objectToQueryString(PRINT_OPTIONS); 

  var gid = sheet.getSheetId();
  var printRange = objectToQueryString({
    'c1': range.getColumn() - 1,
    'r1': range.getRow() - 1,
    'c2': range.getColumn() + range.getWidth() - 1,
    'r2': range.getRow() + range.getHeight() - 1
  });

    Logger.log(printRange)

  var url = ss.getUrl().replace(/edit$/, '') + 'export?format=pdf' + PDF_OPTS + printRange + "&gid=" + gid;

  var htmlTemplate = HtmlService.createTemplateFromFile('js');
  htmlTemplate.url = url;
  SpreadsheetApp.getUi().showModalDialog(htmlTemplate.evaluate().setHeight(10).setWidth(100), 'Print range');
}

function objectToQueryString(obj) {
  return Object.keys(obj).map(function(key) {
    return Utilities.formatString('&%s=%s', key, obj[key]);
  }).join('');
}

js. html файл

<script>
  window.open('<?=url?>', '_blank', 'width=800, height=600');
  google.script.host.close();
</script>

Marcar Impreso. gs файл

function marcarImpreso() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getActiveSheet();
  var sheetRange = s.getDataRange();
  var sheetValues = sheetRange.getValues();
  var ui = SpreadsheetApp.getUi();
  var rowKeeper = [];
  var rowString = "";

  for (var i=sheetRange.getLastRow()-1; i>1; i--) {
   // si valor en columna D (medio) <> ""
    if ( sheetValues[i][5] != "") {
      rowKeeper.push(i);

      Logger.log(rowKeeper)

    }   
  }
  var response = ui.alert('Se van a marcar los pedidos como IMPRESOS.', rowString, ui.ButtonSet.OK_CANCEL);

  // Process the user's response.
  if (response == ui.Button.OK) {
    for (var j = 0; j < rowKeeper.length; j++){
      var i = rowKeeper[j];  
      var targetSheet = ss.getSheetByName("*MASTER*");
      var targetRow = sheetValues[i][2];
      var targetRange = targetSheet.getRange(targetRow, 14);
      var targetTS = targetSheet.getRange(targetRow, 15);

      targetRange.setValue(true); 
      targetTS.setValue(new Date()).setNumberFormat("dd-mm-yy hh:mm")
    }
  }    
}
...