Сохранить выбор в электронную таблицу Google Sheets в формате PDF - PullRequest
0 голосов
/ 22 апреля 2020

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

Справка. У меня есть электронная таблица, которую я собираюсь сохранить в формате PDF на DRIVE. Это нормально, я получил код и скорректировал его в соответствии с тем, что мне нужно. Однако, когда это экономит, это снимает план того, что мне нужно. Мне нужно сохранить только между контурами линий.

Используемый код:

function generatePDF() {
  var sheetName = "NOTA DE CREDITO ASSOCIAÇÃO SAUDE";
  var folderID = "atalho google drive";
  var pdfName = "NC_SAUDE " + Date();

  var sourceSpreadsheet = SpreadsheetApp.getActive();
  var sourceSheet = sourceSpreadsheet.getSheetByName(sheetName);
  var folder = DriveApp.getFolderById("atalho google drive");

  //Copy whole spreadsheet
  var destSpreadsheet = SpreadsheetApp.open(DriveApp.getFileById(sourceSpreadsheet.getId()).makeCopy("tmp_convert_to_pdf", folder))

  //delete redundant sheets
  var sheets = destSpreadsheet.getSheets();
  for (i = 0; i < sheets.length; i++) {
    if (sheets[i].getSheetName() != sheetName) {
      destSpreadsheet.deleteSheet(sheets[i]);
    }
  }

  var destSheet = destSpreadsheet.getSheets()[0];
  //repace cell values with text (to avoid broken references) 
  var sourceRange = sourceSheet.getRange(1, 1, sourceSheet.getMaxRows(), sourceSheet.getMaxColumns());
  var sourcevalues = sourceRange.getDisplayValues();
  var destRange = destSheet.getRange(1, 1, destSheet.getMaxRows(), destSheet.getMaxColumns());
  destRange.setValues(sourcevalues);

  //save to pdf
  var theBlob = destSpreadsheet.getBlob().getAs('application/pdf').setName(pdfName);
  var newFile = folder.createFile(theBlob);

  //Delete the temporary sheet
  DriveApp.getFileById(destSpreadsheet.getId()).setTrashed(true);

}

1 Ответ

0 голосов
/ 24 апреля 2020

Решение

Вы пропустили шаг, когда у вас есть только один лист в новой электронной таблице и где вы вставляете значения диапазона в первую ячейку электронной таблицы.

Вот скрипт, который решает эту проблему. Это объясняется комментариями:

function myFunction() {
  // Get the range of cells you want to export 
  var rangeValues = SpreadsheetApp.getActive().getSheetByName('Sheet1').getRange('D10:F13').getValues();
  // Get the Drive folder you want to store your PDF to. Otherwise use root folder (if you dont mind about this)
  var folder = DriveApp.getFolderById('FOLDERID');
  
  // Create a blank spreadsheet to be able to export just the range
  var destSpreadsheet = SpreadsheetApp.create('PDF');
  
  // Check first if the sheet you are going to create exists. Otherwsie create it and copy paste the range
  // we want to export as PDF in the first values of the sheet. I.e if our range is 5 rows and 6 columns we want
  // it to be copied from A1 to F5 for example. Then we can hide the rest of columns and rows and export 
  // what we have left
  var sheet2 = destSpreadsheet.getSheetByName('sheet2');
  if(!sheet2){
    destSpreadsheet.insertSheet('sheet2').getRange('A1:C4').setValues(rangeValues);
    var sheet2 = destSpreadsheet.getSheetByName('sheet2');
  }
  
  // Hide all the rows and columns that do not have content 
  sheet2.hideRows(sheet2.getLastRow()+1, sheet2.getMaxRows()-sheet2.getLastRow());
  sheet2.hideColumns(sheet2.getLastColumn()+1, sheet2.getMaxColumns()-sheet2.getLastColumn());
  // Delete the first sheet that is automatically created when you create a new spreadsheet
  destSpreadsheet.deleteSheet(destSpreadsheet.getSheetByName('Sheet1'));
  
  // Export our new spreadsheet to PDF
  var theBlob = destSpreadsheet.getBlob().getAs('application/pdf').setName('pdf');
  var newFile = folder.createFile(theBlob);
  
  //Delete the spreadsheet we created to export this range. 
  DriveApp.getFileById(destSpreadsheet.getId()).setTrashed(true);
}

Надеюсь, это помогло вам. Дайте мне знать, если вам нужно что-то еще или вы что-то не поняли. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...