Как распечатать лист / диапазон, используя скрипт .gs в Google Sheets? - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь создать в Google Sheets скрипт, который выбирает диапазон и распечатывает его. Я пытаюсь напечатать некоторую информацию, основанную на некоторых параметрах. У меня есть следующий скрипт, который устанавливает желаемый диапазон, но я не вижу способа распечатать его, используя скрипт.

function printInvoice() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var range = sheet.getRange("A1:H46");

  range.activate();
}

Есть предложения? Спасибо!

Ответы [ 2 ]

0 голосов
/ 05 ноября 2019

Я наткнулся на ваш код совершенно случайно из-за «недопустимого вопроса переполнения стека, который на самом деле кажется именно тем, что я хочу - не смог получить никаких подробностей о том, как печатать из App Script для листов.

Я пробовал это, но он падает в строке в вашем примере "var htmlTemplate = HtmlService.createTemplateFromFile ('js');", где служба не может найти "js". Боюсь, я не понимаю, что такое HTML-шаблон в любом случае- Вы можете объяснить?

0 голосов
/ 30 октября 2019

Вы можете использовать следующий скрипт:

var PRINT_OPTIONS = {
  'size': 7,               // paper size. 0=letter, 1=tabloid, 2=Legal, 3=statement, 4=executive, 5=folio, 6=A3, 7=A4, 8=A5, 9=B4, 10=B
  'fzr': false,            // repeat row headers
  'portrait': true,        // false=landscape
  'fitw': true,            // fit window or actual size
  'gridlines': false,      // show gridlines
  'printtitle': false,
  'sheetnames': false,
  'pagenum': 'UNDEFINED',  // CENTER = show page numbers / UNDEFINED = do not show
  'attachment': false
}

var PDF_OPTS = objectToQueryString(PRINT_OPTIONS);

function onOpen(e) {
  SpreadsheetApp.getUi().createMenu('Print...').addItem('Print selected range', 'printSelectedRange').addToUi();
}

function printSelectedRange() {
  SpreadsheetApp.flush();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var range = sheet.getActiveRange();

  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
  });
  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('');
}

Вам также потребуется создать html-файл в вашем проекте (File>New>HTML File) с именем js и вставить следующий код:

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

В меню «Листы» будет создана кнопка, которая откроет PDF-файл с выбранным диапазоном. Вы можете изменить некоторые параметры, такие как ориентация печати, ее размер или показать линии сетки или нет поверх сценария. Если вы все еще хотите автоматически печатать диапазоны без необходимости вручную проходить через диалоговое окно print , вы можете либо:

...