Извлечение последнего URL-адреса файла на диске и размещение его в электронной таблице Google на основе критериев - PullRequest
1 голос
/ 17 января 2020

Мне интересно, возможно ли получить URL-адрес последнего файла в папке диска, а затем поместить его в ячейку в столбце B электронной таблицы.

Затем есть другая часть, где URL должен публиковаться только в том случае, если в столбце A есть слово «YES». Так что если у A "NO" URL не нужен.

Полный сценарий будет таким.

  1. Изображение загружено в папку дисковода.

  2. "YES" вводится в A1.

  3. URL-адрес последней загруженное изображение извлекается, затем вставляется в B1.
  4. Затем оно продолжается и для всех остальных строк.

Теоретически, так я хочу, чтобы это работало. Но я не знаю, может ли это работать или нет.

Это сценарий, который я использую для загрузки изображения на диск:

    function doGet(e) {
return message("Error: no parameters in doGet");

}

function doPost(e) {
 if (!e.parameters.filename || !e.parameters.file || !e.parameters.imageformat) {
   return message("Error: Bad parameters in doPost");
 } else {
   var imgf = e.parameters.imageformat[0].toUpperCase();
   var mime =
       (imgf == 'BMP')  ? MimeType.BMP
     : (imgf == 'GIF')  ? MimeType.GIF
     : (imgf == 'JPEG') ? MimeType.JPEG
     : (imgf == 'JPG')  ? MimeType.JPEG
     : (imgf == 'PNG')  ? MimeType.PNG
     : (imgf == 'SVG')  ? MimeType.SVG
     : false;
   if (mime) {
     var data = Utilities.base64Decode(e.parameters.file, Utilities.Charset.UTF_8);
     var blob = Utilities.newBlob(data, mime, e.parameters.filename);
     DriveApp.getFolderById('Folder Id').createFile(blob);
     return message("Success");
   } else {
     return message("Error: Bad image format");
   }
 }
}

function message(msg) {
 return ContentService.createTextOutput(JSON.stringify({Result: msg })).setMimeType(ContentService.MimeType.JSON);
}

Пока этот сценарий я использую для ввода «ДА» или «НЕТ» в столбце А:

    function doGet(e) {
    var ss = SpreadsheetApp.openByUrl("Sheet_URL");
    var sheet = ss.getSheetByName("Sheet_Name");

    addRecord(e,sheet);

    }

    function doPost(e) {
    var ss = SpreadsheetApp.openByUrl("Sheet_URL");
    var sheet = ss.getSheetByName("Sheet_Name");

    addRecord(e,sheet);

    }

    function addRecord(e,sheet) {
    var HvPict = e.parameter.HvPict;

sheet.appendRow([Hv.Pict]);

}

1 Ответ

2 голосов
/ 20 января 2020
  • Вы хотите получить URL-адрес последнего загруженного файла в указанной папке c.
  • Вы хотите добиться этого с помощью скрипта Google Apps.

Я мог понять, как выше. Если мое понимание верно, как насчет этого примера сценария? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

В вашем случае я подумал, что можно использовать метод getDateCreated() в файле классов. А как насчет следующего примера скрипта?

Пример скрипта:

function getLatestFile(folderId) {
  var files = DriveApp.getFolderById(folderId).getFiles();
  var fileObj = [];
  while (files.hasNext()) {
    var file = files.next();
    fileObj.push({url: file.getUrl(), date: file.getDateCreated()});
  }
  fileObj.sort(function(a, b) {return new Date(b.date) - new Date(a.date)});
  return fileObj[0].url;
}

function myFunction() {
  var folderId = "###";
  var lastFileUrl = getLatestFile(folderId);
  Logger.log(lastFileUrl)
}
  • Когда вы запускаете скрипт, пожалуйста, установите folderId. Этот сценарий извлекает файлы в папке folderId.
  • . При запуске функции myFunction() извлекается URL-адрес последнего созданного файла.

Примечание.

  • В вашем случае указанную выше функцию можно использовать в сценарии 2-й формы HTML.
  • Если в вашей реальной ситуации загруженный файл изменяется, и вы хотите чтобы получить последний измененный файл, попробуйте использовать getLastUpdated() вместо getDateCreated().
  • В этом случае fileObj.sort(function(a, b) {return new Date(b.date) - new Date(a.date)}); может не потребоваться.

Ссылки:

Добавлено:

function getLatestFile(folderId) {
  var files = DriveApp.getFolderById(folderId).getFiles();
  var fileObj = [];
  while (files.hasNext()) {
    var file = files.next();
    fileObj.push({url: file.getUrl(), date: file.getDateCreated()});
  }
  fileObj.sort(function(a, b) {return new Date(b.date) - new Date(a.date)});
  return fileObj[0].url;
}

function doGet(e) { // or doPost(e)
  var folderId = "###";

  var ss = SpreadsheetApp.openByUrl("Sheet_URL");
  var sheet = ss.getSheetByName("Sheet_Name");
  sheet.appendRow([e.parameter.HvPict, getLatestFile(folderId)]);
}
  • При изменении сценария веб-приложений повторно разверните веб-приложения в качестве новой версии. Таким образом, последний скрипт отражается в веб-приложениях. Пожалуйста, будьте осторожны с этим.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...