#google-apps-script #google-sheets
#google-apps-script #google-sheets
Вопрос:
Я использую этот код для экспорта листа в формате PDF.
{var url_ext = '/export?exportFormat=pdfamp;format=pdf'
(sheetId ? ('amp;gid=' sheetId) : ('amp;id=' spreadsheetId))
(shRng ? ('amp;range=A1:L43') : null)
// following parameters are optional...
'amp;size=A4' // paper size
'amp;portrait=true' // orientation, false for landscape
'amp;fitw = true' // fit to width, false for actual size
'amp;sheetnames=falseamp;printtitle=falseamp;pagenumbers=false' //hide optional headers and footers
'amp;gridlines=false' // hide gridlines
'amp;fzr=false'; // do not repeat row headers (frozen rows) on each page
}
Есть ли способ предоставить два диапазона и экспортировать их в один и тот же PDF, но на разные страницы?
Причина этого в том, что я хочу отправить всю электронную таблицу, показанную на изображении, но я хочу, чтобы столбцы M-Z отображались на другой странице. Прямо сейчас я могу указать 1 диапазон (A1: L43), и он печатается нормально.
ИЛИ, может быть, есть способ вставить разрыв страницы, изменить масштаб таблицы перед экспортом, например. другой способ разделения таблицы на две страницы одного и того же PDF, который кто-то может порекомендовать.
Комментарии:
1. Попробуйте поместить диапазоны во временный лист, экспортировать его, а затем удалить.
2. @Cooper Можете ли вы предоставить какой-нибудь код, чтобы показать, как я мог бы попробовать это? Спасибо.
3. Я мог бы, но если бы я это сделал, вы бы никогда не научились делать это самостоятельно. Сначала попробуйте сделать это самостоятельно. Затем задавайте конкретные целенаправленные вопросы, когда у вас возникнут проблемы.
4. @Cooper чтобы я правильно понял, я должен попытаться поместить данные, содержащиеся в одном диапазоне, во временную таблицу, а затем экспортировать их? Я не понимаю, зачем мне нужен временный лист.
5. вы сказали, что у вас уже есть код, который экспортирует лист в pdf, поэтому создайте временный лист или, если вы хотите сохранить один и тот же лист и просто очищать его каждый раз. Поместите все данные из желаемых диапазонов на этот лист и экспортируйте их в pdf
Ответ №1:
Если я вас правильно понял, вы хотите экспортировать разные диапазоны с определенного листа в файл PDF (где данные из каждого диапазона должны быть на разных страницах).
Если это так, и предполагается, что диапазоны находятся на активной странице, вы можете выполнить следующие действия:
- Создайте временную электронную таблицу, которая будет использоваться для экспорта данных в PDF (используйте SpreadsheetApp.create(имя)).
- Для каждого желаемого обозначения диапазона (в данном случае, я думаю, что диапазоны — это
A1:L43
иM1:Z43
), создайте временный лист и скопируйте диапазон на этот лист, используя insertSheet() и Range.CopyTo(диапазон). - Скопируйте каждый временный лист (содержащий данные из каждого диапазона) во временную электронную таблицу, используя Sheet.CopyTo(электронная таблица).
- Удалите временные листы, используя deleteSheet (лист).
- Экспортируйте временную электронную таблицу в PDF. В приведенном ниже примере я добавляю экспортированный PDF-файл на диск, используя UrlFetchApp.fetch(url, параметры) и DriveApp.CreateFile(blob).
- Удалите временную электронную таблицу, используя службу Advanced Drive (вы должны включить ее через
Resources > Advanced Google Services...
. В противном случае последняя строка в предоставленном скрипте выдаст ошибку).
Пример кода:
// Copyright 2020 Google LLC.
// SPDX-License-Identifier: Apache-2.0
function MULTIPLE_RANGES_TO_PDF() {
const ss = SpreadsheetApp.getActive();
const tempSS = SpreadsheetApp.create("Temporary Spreadsheet");
const sourceSheet = ss.getActiveSheet();
const rangeNotations = ["A1:L43", "M1:Z43"];
rangeNotations.forEach(rangeNotation => {
const sourceRange = sourceSheet.getRange(rangeNotation);
const tempSheet = ss.insertSheet();
sourceRange.copyTo(tempSheet.getRange("A1"));
tempSheet.copyTo(tempSS);
ss.deleteSheet(tempSheet);
});
tempSS.deleteSheet(tempSS.getSheets()[0]); // Remove first sheet in temp (blank)
var url = "https://www.googleapis.com/drive/v3/files/" tempSS.getId() "/export?mimeType=application/pdf";
var params = {
headers: { "Authorization": "Bearer " ScriptApp.getOAuthToken() }
}
var pdf = UrlFetchApp.fetch(url, params).getBlob();
DriveApp.createFile(pdf).setName("My exported PDF.pdf");
Drive.Files.remove(tempSS.getId());
}