Я пытаюсь создать экспорт в PDF на свой диск. Этот скрипт в настоящее время делает это. Однако я хочу, чтобы экспортировался только определенный диапазон ячеек, и я хотел бы, чтобы имя файла сохранения извлекало информацию из ячейки на листе. Пожалуйста помоги! У меня есть следующий скрипт:
function getpdf2(){
SpreadsheetApp.flush();
var theurl = 'https://docs.google.com/spreadsheets/d/'
+ '1C-ONDP4pZeUrlMYekvg0i8oNceASL1s4_o8oBpQuzHk'
+ '/export?exportFormat=pdf&format=pdf'
+ '&size=LETTER'
+ '&portrait=false'
+ '&fitw=false'
+ '&top_margin=0.50'
+ '&bottom_margin=0.50'
+ '&left_margin=0.50'
+ '&right_margin=0.50'
+ '&sheetnames=false&printtitle=false'
+ '&pagenum=false'
+ '&gridlines=false'
+ '&fzr=FALSE'
+ '&gid='
+ '1101884643';
var token = ScriptApp.getOAuthToken();
var docurl = UrlFetchApp.fetch(theurl, { headers: { 'Authorization': 'Bearer ' + token } });
var fileid = DriveApp.createFile(docurl.getBlob()).setName('CAITLYN!B7.pdf').getId();
var pdf = docurl.getBlob().setName('CAITLYN!B7.pdf');
var pdf = docurl.getBlob().getAs('application/pdf').setName('testss.pdf');
var filetodel = DriveApp.getFileById(fileid);
if (DriveApp.getFoldersByName("PDF Quotes").hasNext()){
var folder = DriveApp.getFoldersByName("PDF Quotes").next();
filetodel.makeCopy(folder);
}
DriveApp.removeFile(filetodel);
}





Поскольку нет собственного способа экспортировать определенный диапазон, нам нужно получить доступ к данным внутри электронной таблицы.
Что нам нужно сделать, чтобы упростить процесс экспорта, так это скопировать диапазон данных во временный лист, а затем вставить его в первый набор ячеек.
После этого нам нужно скрыть ячейки за пределами скопированных ячеек.
Наконец, мы экспортируем этот временный лист в pdf на нашем диске.
Вот весь рабочий код.
function exportRangeToPdf() {
// Get the sheet id, sheet name, range of cells you want to export
// and the folder ID in your drive where you want to store the pdf
var sheetId = '1ZzkBAR1EgismFCd-hxOUyC_uZKYucu7Av-lDHhrEMx4';
var sheetName = 'Sheet1';
var sheetSrcRange = 'B5:C6';
var driveId = '0B55C21aJsSBlfk9FTjRqOG8tb3hjR1N4MTU1YjVPNU4weGVhSldfU3F4OXladVVNMF9Ccms';
var sheet = SpreadsheetApp.openById(sheetId).getSheetByName(sheetName);
var range = sheet.getRange(sheetSrcRange);
var sheetDstRange = 'A1:' + sheet.getRange(range.getHeight(), range.getWidth()).getA1Notation();
var rangeValues = range.getValues();
var folder = DriveApp.getFolderById(driveId);
// Feel free to modify if needed
// From sheet name (e.g. Sheet1.pdf)
var pdfName = sheetName + '.pdf';
// From specific cell, can be inside or outside your selected range to export (e.g. exportedPDF.pdf)
// var pdfName = sheet.getRange('C7').getValue() + '.pdf';
// From the combination of sheet name and range you chose (e.g. Sheet1_B5:C6.pdf)
// var pdfName = sheetName + '_' + sheetSrcRange + '.pdf';
// Create a blank spreadsheet to be able to export just the range
var destSpreadsheet = SpreadsheetApp.create('PDF');
// If our range is 2 rows and 2 columns we want it to be copied from A1 to B2
// Then we can hide the rest of columns and rows and export
var sheet2 = destSpreadsheet.getSheetByName('temp');
if (!sheet2){
destSpreadsheet.insertSheet('temp').getRange(sheetDstRange).setValues(rangeValues);
var sheet2 = destSpreadsheet.getSheetByName('temp');
}
// 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(sheetName));
// Export our new spreadsheet to PDF
var theBlob = destSpreadsheet.getBlob().getAs('application/pdf').setName(pdfName);
folder.createFile(theBlob);
// Delete the spreadsheet we created to export this range.
DriveApp.getFileById(destSpreadsheet.getId()).setTrashed(true);
}
Образец данных:
Выход:
Можете ли вы привести пример вывода, который вы хотите иметь? pdfName. Вы имеете в виду, что если имя листа Sheet1, а диапазон, скажем, B5:D10, pdfName будет Sheet1_B5:D10.pdf? Если так, то да. Если вы имеете в виду, что pdfName получает имя из определенной ячейки, это также возможно.
@Caitlyn, я обновил ответ выше, чтобы показать возможные варианты экспортированного имени PDF.
@Кейтлин, я смогла ответить на твой вопрос? Если ваш вопрос был решен, пожалуйста, нажмите кнопку «Принять». Другие люди, у которых такая же проблема, как и вы, могут также обосновать ваш вопрос как вопрос, который можно решить. Если вы не найдете кнопку, не стесняйтесь сказать мне. stackoverflow.com/help/accepted-answer
Спасибо. Да, это было
Если это так, пожалуйста, примите ответ. Спасибо
Я решил ту же задачу другим способом, который избавился от кода и эффективно работает для меня. Вместо написания сценария для создания вкладки, копирования данных, удаления ненужных данных и т. д. я просто создаю вкладку «Экспорт» и использую запрос для получения данных, которые хочу экспортировать на регулярной основе.
В моем случае я хочу экспортировать столбцы в другом порядке, поэтому я использую формулу массива, чтобы извлечь отдельные столбцы из вкладки «Основные данные» в массив, а затем выполнить запрос к нему. Обратите внимание, что я также фильтрую данные ("Col7<>'Completed') в запросе, чтобы извлекать только те строки, которые мне нужны. Наконец, вы увидите, что фильтр ссылается на Col7, а не на букву столбца. Когда вы используете формулу массива, вы должны обращаться к столбцам по их положению в массиве (Col1, Col2 и т. д.)
=query(ArrayFormula({'Вкладка основных данных'!AJ:AJ,{'Вкладка основных данных'!G:G}&" "&{'Вкладка основных данных'!I:I},'Вкладка основных данных'!M :M,'Вкладка основных данных'!E:E,'Вкладка основных данных'!F:F,'Вкладка основных данных'!AK:AK,'Вкладка основных данных'!AI:AI,'Вкладка основных данных'!W :W,'Вкладка основных данных'!K:K,'Вкладка основных данных'!B:B,'Вкладка основных данных'!C:C,'Вкладка основных данных'!Y:Y}),"выберите *, где Col7 <>'Завершено' и Col7<>'Отменено'",1)
Вы можете упростить это, просто введя весь лист и используя запрос для выбора столбцов и фильтрации: =query('Вкладка «Первичные данные»'!A:AJ,"выберите A,B,D,G,T,AD, где G<>'Завершено' и G<>'Отменено'",1)
Как только вы это сделаете, данные на вкладке автоматически отобразятся на вкладке «Основные данные», и вы сможете просто экспортировать их в любое время.
Знаете ли вы, какой код мне нужно использовать для pdfName, чтобы он был информацией в конкретной ячейке?