Существует несколько вариантов экспорта выбранных столбцов из электронных таблиц в 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();
}
}