#google-apps-script
#google-приложения-скрипт
Вопрос:
Когда сотрудник отправляет форму Google, этот скрипт переименовывает загруженный файл на основе информации, которую указанный сотрудник заполняет в форме. (На данный момент он извлекает их имя, идентификатор задания и адрес текущего местоположения задания, в файле всегда есть фотографии того, что они завершили на рабочей площадке.)
Однако скрипт извлекает эту информацию только в том случае, если в форму загружается один файл / изображение, а не все файлы.
Какая модификация позволит переименовать все загруженные файлы в форме.
while (files.hasNext()) {
for (var i = 0; i < formResponses.length; i ) {
var formResponse = formResponses[i];
var itemResponses = formResponse.getItemResponses();
var itemResponseFname = itemResponses[0];
var itemResponseLname = itemResponses[10];
var itemResponseID = itemResponses[11];
var itemResponsePhoto = itemResponses[13];
var photoID = itemResponsePhoto.getResponse();
var newName = itemResponseFname.getResponse() " " itemResponseLname.getResponse() " - " itemResponseID.getResponse();
var url = baseString photoID endString;
var urlCheck = file.getUrl();
if ( url == urlCheck) {
var modName = newName ".jpg";
file.setName(modName);
Комментарии:
1. Очевидно, вам нужно перебирать все изображения, поскольку в настоящее время это происходит только для одного.
Ответ №1:
Самый простой способ сделать это заключается в следующем:
- Установите триггер отправки
- Получить список идентификаторов отправленных файлов
- Измените его имя на то, что вам нравится
На практике это будет выглядеть примерно так:
function submit(e) {
const itemResponses = e.response.getItemResponses()
// Read values
const fname = itemResponses[0].getResponse()
const lname = itemResponses[10].getResponse()
const uid = itemResponses[11].getResponse()
const imageIds = itemResponses[13].getResponse()
// Iterate images
for (let imgId of imageIds){
const image = DriveApp.getFileById(imgId)
// Create new filename (preserves extension)
const filename = `${fname} ${lname} - ${uid}${getExtension(image)}`
// Set file name
image.setName(filename)
}
}
/**
* Returns the extension of a file
*
* For example: A file with name 'example.json' will return '.json'.
*
* @param file {DriveApp.File} File to extract the extension from
* @returns {string} The extension with the dot.
*/
function getExtension(file) {
// Gets the last dot and the characters that follow
const r = /(.w )$/.exec(file.getName())
// If it has no extension return an empty string, otherwise return the captured group
return r === null ? '' : r[1]
}
Очевидно, вам нужно добавить весь остальной код, который у вас, похоже, есть, и установить триггер, если вы этого еще не сделали.