how to print a long Goggle sheets column in fewer columns

笑着哭i 提交于 2021-02-11 12:18:06

问题


I have a google sheet with two long columns(image 1) of results(say 1 up to 1500 records) and column 2 I have QR codes generated by a formula.

Now I need to export or print it to a pdf file, but I like to break the long columns so that the pdf file is filled with 8 columns(image 2) so that there is no paper wasted when printed. As it is, if print the page it would give me a lot of empty space.


回答1:


From what I understand, you are trying to break the 1 long column into 4 columns. The following script would separate the long column into 4 column, as evenly as possible.

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

Do update if it works and if you need any adjustment.




回答2:


There are several options to export selected columns from Spreadsheets to PDF.

The easiest is probably to specify the desired range to export in the export URL

Sample:

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

UPDATE:

To do the opposite - to print 2 columns into 8 columns, you need to:

  • modify your sheet data by diving it evenly into the desired amount of columns
  • export it as pdf
  • move the data back into the original state

Here is a modification of the sample performing this task:

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


来源:https://stackoverflow.com/questions/60059929/how-to-print-a-long-goggle-sheets-column-in-fewer-columns

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!