как напечатать длинный столбец Goggle листов в меньшем количестве столбцов - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть лист Google с двумя длинными столбцами (изображение 1) результатов (скажем, от 1 до 1500 записей) и столбцом 2 У меня есть QR-коды, созданные по формуле.

Теперь мне нужно экспортировать или распечатать его в файл PDF, но мне нравится разбивать длинные столбцы, чтобы файл PDF был заполнен 8 столбцами (изображение 2), чтобы при печати не было растрачено бумаги , Как бы то ни было, если распечатать страницу, это даст мне много пустого места.

Source spreadsheet with two long columns

Desired results

Ответы [ 2 ]

0 голосов
/ 07 февраля 2020

Насколько я понимаю, вы пытаетесь разбить 1 длинный столбец на 4 столбца. Следующий скрипт разделит длинный столбец на 4 столбца как можно более равномерно.

    function BreakColumn() {
      var app = SpreadsheetApp;
      var ss = app.getActiveSpreadsheet();
      var sheet = ss.getActiveSheet();
      var range = sheet.getDataRange();
      var intlastrow = range.getLastRow();
      var expectedcol = 4; //num of column wanted
      var z = expectedcol;

      for (var i = expectedcol-1; i > 0; i--) {
      var range = sheet.getDataRange();
      var lastrow = range.getLastRow();
      var breakcount = intlastrow/expectedcol * i;
      Logger.log(i,lastrow,breakcount);
      var cut = sheet.getRange(breakcount,1,lastrow,1);
      cut.copyTo(sheet.getRange(1,z));
      z--;
      cut.clear();
      }
    }

Обновите, если это работает, и если вам нужна какая-либо настройка.

0 голосов
/ 04 февраля 2020

Существует несколько вариантов экспорта выбранных столбцов из электронных таблиц в PDF.

Возможно, проще всего указать желаемый диапазон для экспорта в URL-адресе экспорта

Пример:

function hideColumns(){ 
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Sheet1');  
  var url = "https://docs.google.com/spreadsheets/d/" + ss.getId() + "/export?";
  var parameters = 'exportFormat=pdf&format=pdf'        // export as pdf / csv / xls / xlsx
  + '&size=letter'                                   // paper size legal / letter / A4
  + '&portrait=true'                                // orientation, false for landscape
  + '&fitw=true&source=labnol'                       // fit to page width, false for actual size
  + '&sheetnames=false&printtitle=false'             // hide optional headers and footers
  + '&pagenumbers=false&gridlines=false'             // hide page numbers and gridlines
  + '&fzr=false'                                     // do not repeat row headers (frozen rows) on each page
  + '&gid=';                                         // the sheet's Id

  var token = ScriptApp.getOAuthToken();
  var lastColumn = sheet.getLastColumn();
  var lastRow = sheet.getLastRow();
  var columnNumber = 4;
  for (var i = 0; i < Math.ceil(lastColumn / columnNumber); i++){
    var startColumn = (columnNumber*i) + 1;
    var range = sheet.getRange(1, startColumn, lastRow, columnNumber).getA1Notation(); Logger.log(range);
    var response = UrlFetchApp.fetch(url + parameters + sheet.getSheetId() + "&range=" + range, {
      headers: {
        'Authorization': 'Bearer ' +  token
      }
    });
    var name = "export selected columns "+i; 
    DriveApp.createFile(response.getBlob().setName(name));
    SpreadsheetApp.flush();
  }
}

ОБНОВЛЕНИЕ:

Чтобы сделать наоборот - чтобы напечатать 2 столбца в 8 столбцов, вам необходимо:

  • изменить данные листа, равномерно погрузив их в желаемое количество столбцов
  • экспортировать их в формате pdf
  • переместить данные обратно в исходное состояние

Вот модификация образца, выполняющего эту задачу:

function hideColumns(){ 
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Sheet1');  
  var url = "https://docs.google.com/spreadsheets/d/" + ss.getId() + "/export?";
  var parameters = 'exportFormat=pdf&format=pdf'        // export as pdf / csv / xls / xlsx
  + '&size=letter'                                   // paper size legal / letter / A4
  + '&portrait=true'                                // orientation, false for landscape
  + '&fitw=true&source=labnol'                       // fit to page width, false for actual size
  + '&sheetnames=false&printtitle=false'             // hide optional headers and footers
  + '&pagenumbers=false&gridlines=false'             // hide page numbers and gridlines
  + '&fzr=false'                                     // do not repeat row headers (frozen rows) on each page
  + '&gid=';                                         // the sheet's Id
  // split columns into 8 
  var token = ScriptApp.getOAuthToken();
  var lastColumn = sheet.getLastColumn();
  var lastRow = sheet.getLastRow();
  var realColumnNumber = 2;
  var desiredColumnNumber = 8;
  var rowsPerColumn = Math.ceil(lastRow / desiredColumnNumber * realColumnNumber);
  for (var i = 0; i < desiredColumnNumber / realColumnNumber; i++){
    var startRow = rowsPerColumn * (i+1) + 1;  
    var range = sheet.getRange(startRow, 1, rowsPerColumn, realColumnNumber); 
    range.moveTo(sheet.getRange(1, (1 + realColumnNumber * (i+1))));
    SpreadsheetApp.flush();
  }
  // export as pdf
  var response = UrlFetchApp.fetch(url + parameters + sheet.getSheetId() + "&range=" + sheet.getDataRange().getA1Notation(), {
    headers: {
      'Authorization': 'Bearer ' +  token
    }
  });
  var name = "export into 4 columns"; 
  DriveApp.createFile(response.getBlob().setName(name));
  SpreadsheetApp.flush();
  // move columns back into original position
  for (var i = 0; i < desiredColumnNumber / realColumnNumber; i++){
    var startRow =  1;  
    var range = sheet.getRange(startRow, (i+1)*realColumnNumber + 1, rowsPerColumn, realColumnNumber); 
    range.moveTo(sheet.getRange((sheet.getLastRow() + 1), 1));
    SpreadsheetApp.flush();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...