#google-apps-script #google-sheets #google-drive-api
#google-apps-script #google-sheets #google-drive-api
Вопрос:
В настоящее время я создаю PDF-файл из активного листа. Есть ли способ перезаписать или заменить файл на Google Диске, не помещая его в корзину? У меня есть этот код, который я видел в Интернете.
if (files.hasNext()) {
files.next().setTrashed(true);
}
Правильно ли я использую код или есть другой способ сделать это?
Я использовал этот код для функции ниже.
function _exportBlob(blob, fileName) {
var timeZone = Session.getScriptTimeZone();
var date = Utilities.formatDate(new Date(), timeZone, "yyyy");
var ss = SpreadsheetApp.getActiveSpreadsheet();
var fileName = "FORM137 - " ss.getRange("REPORT CARD!D12").getValue() " - ARCS" date;
var ssID = ss.getId();
var ssFile = DriveApp.getFileById(ssID);
blob = blob.setName(fileName)
var parentFolder = DriveApp.getFileById(ss.getId()).getParents().next();
var subFolder = parentFolder.getFoldersByName("CARDS").next();
var files = subFolder.getFilesByName(getFilename());
if (files.hasNext()) {
files.next().setTrashed(true);
}
var pdfFile = subFolder.createFile(blob);
if (pdfFile) {
const htmlOutput = HtmlService
.createHtmlOutput('<p>Click to open <a href="' pdfFile.getUrl() '" target="_blank">' fileName '</a></p>')
.setWidth(300)
.setHeight(80)
SpreadsheetApp.getUi().showModalDialog(htmlOutput, 'Export Successful')
}
}
Вот функция GetFileName:
function getFilename() {
var ss = SpreadsheetApp.getActive();
var filename = "FORM137 - " ss.getRange("REPORT CARD!D12").getValue() " - ARCS" date;
return filename;
}
Комментарии:
1. Могу я спросить вас о
getFilename()
?2. @Tanaike я уже опубликовал его.
3. Спасибо за ответ и добавление дополнительной информации. Из вашей дополнительной информации я предложил точку модификации в качестве ответа. Не могли бы вы подтвердить это? Если это было не то направление, которое вы ожидаете, я прошу прощения.
Ответ №1:
Я считаю, что ваша цель заключается в следующем.
- Вы хотите перезаписать
blob
существующий файлgetFilename()
.
В этом случае я хотел бы предложить использовать метод «Файлы: обновление» в Drive API.
Перед использованием этого скрипта, пожалуйста, включите Drive API в расширенных службах Google.
От:
var files = subFolder.getFilesByName(getFilename());
if (files.hasNext()) {
files.next().setTrashed(true);
}
var pdfFile = subFolder.createFile(blob);
Для:
var files = subFolder.getFilesByName(getFilename());
var pdfFile = files.hasNext() ? DriveApp.getFileById(Drive.Files.update({}, files.next().getId(), blob).id) : subFolder.createFile(blob);
- В этой модификации, когда файл
getFilename()
не существует, создается новый файл.