Google Sheet: заменить файл с тем же именем

#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() не существует, создается новый файл.

Ссылка: