Экспорт Specifi c диапазона ячеек в PDF - Google Sheets - PullRequest
0 голосов
/ 23 апреля 2020

Я использую электронные таблицы Google для создания счетов. Мне нужен скрипт, с помощью которого я могу экспортировать выбранный диапазон (F1: M44) в формате PDF с именем файла Номер счета-фактуры (ячейка B2) + «счет-фактура».
Я пробовал коды из стека и из YouTube. Все они были для экспорта листов, не указав c диапазонов.

1 Ответ

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

Решение

Чтобы иметь возможность экспортировать диапазон спецификаций c в PDF, так как в скрипте Apps нет специального инструмента c, для этого вам потребуется выполнить обходной путь.

Следующий обходной путь автоматически скопирует диапазон, который мы хотим экспортировать, в новую пустую электронную таблицу, чтобы затем иметь возможность экспортировать только точный диапазон .

Почему нам нужна новая электронная таблица?

Хорошо для экспорта диапазона и не мешать все пустые ячейки нам нужно будет скрыть все несоответствующие строки и столбцы . Для этого проще всего вставить нужный диапазон в первую ячейку (A1) нашего листа.

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

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

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

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

...