Есть ли способ массово изменить имя ряда файлов, расположенных в электронной таблице Google?

У меня есть электронная таблица Google, где в ячейках B4:B есть список URL-адресов Google Диска с идентификаторами файлов в конце каждого URL-адреса (а не имени и расширения файлов). А в столбце N4:N у меня есть список имен файлов (без расширений), которые будут использоваться для переименования файлов, URL-адреса которых в ячейкахB4:B указывают.
Я хотел бы знать, существует ли скрипт, который может массово переименовывать имена файлов каждого из соответствующих идентификаторов в имена, расположенные в ячейкахN4:N, сохраняя при этом расширения каждого файла.
Когда столбец станет пустым в 5 последовательных строках, скрипт должен остановиться.
Большое спасибо.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
71
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

ПРЕДПОЛОЖЕНИЕ

ОБНОВЛЕНИЕ: я добавил еще одну версию сценария, которая извлекает идентификаторы файлов из URL-адресов Google Диска, добавленных в ваш список ссылок (как указано в вашем вопросе).

Вы можете попробовать эти примеры сценариев:

Версия A: если в исходной таблице указаны только идентификаторы файлов.

function bulkUpdateNames(){
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var links = sheets.getRange("B4:B").getValues();  // arrays of links
  var names = sheets.getRange("N4:N").getValues();  // arrays of new file names

  var blank_ctr = 0 // counter to check blank entries on the links column

  for (i = 0; i < links.length; i++){
    // if a link is found, changes the file name and resets the counter to 0
    if (links[i] != ""){
      DriveApp.getFileById(links[i]).setName(names[i]);
      blank_ctr = 0; // resets the counter
    }
    else{
      blank_ctr++;
    }
    // terminates the loop if 5 consecutive blanks are found
    if (blank_ctr == 5){
      break
    }
  }
}

Версия Б: если URL-адреса Google Диска вставлены в исходную таблицу.

function bulkUpdateNames(){
  var sheets = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var links = sheets.getRange("B4:B").getValues().flat();  // arrays of links
  var names = sheets.getRange("N4:N").getValues();  // arrays of new file names

  var blank_ctr = 0 // counter to check blank entries on the links column

  for (i = 0; i < links.length; i++){
    // if a link is found, changes the file name and resets the counter to 0
    if (links[i] != ""){
      // splits the entire link and only retrieves the file ID
      file_id = links[i].split("/")[5]
      DriveApp.getFileById(file_id).setName(names[i]);
      blank_ctr = 0; // resets the counter
    }
    else{
      blank_ctr++;
    }
    // terminates the loop if 5 consecutive blanks are found
    if (blank_ctr == 5){
      break
    }
  }
}

Скрипт пройдёт по массиву ссылок и установит новое имя файла для каждой назначенной ссылки; счетчик будет увеличиваться для каждой пустой ячейки в столбце ссылки и:

  1. Будет сброшен, если ссылка будет найдена до того, как будут найдены 5 последовательных пробелов, или;

  2. Завершит выполнение сценария, как только будут найдены 5 последовательных пробелов.

ВЫХОД

ИСПОЛЬЗОВАННАЯ ЛИТЕРАТУРА

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

Mic Test 09.04.2024 19:08

Спасибо. Я пробую версию B, но получаю эту ошибку: Исключение: неверный аргумент: id BulkUpdateNames @ Rename Files.gs:13

Víctor Enrich 09.04.2024 22:59

Понятно, похоже, ошибка исходит от функции getFileById. Версия B ожидает полную ссылку на файл Google Диска из электронной таблицы (из которой извлекается идентификатор файла). Таким образом, могу ли я спросить, похожа ли ссылка, которую вы используете, на эту: https://docs.google.com/spreadsheets/d/[fileID]? Или вы используете другой формат ссылки?

Mic Test 09.04.2024 23:18

Спасибо за Ваш ответ. У меня есть 3 типа URL-адресов. Первый – "drive.google.com/open?id=[fileID] ", а второй – "drive.google.com/file/d/[fileID]/view. ", а третий такой же, но с другим окончанием "drive.google.com/open?id=[fileID]/&usp=drive_fs "

Víctor Enrich 10.04.2024 07:40

Я создал столбец только с идентификаторами, и версия A работает без сбоев. Спасибо!

Víctor Enrich 10.04.2024 08:04

Попробуй это:

function bulkUpdateNames(){
  const ss = SpreadsheetApp.getActive();
  const sh = ss.getActiveSheet();
  sh.getRange("B4:N" + sh.getLastRow()).getValues().filter(r => r[0]).forEach(r => DriveApp.getFileById(r[0]).setName(r[12]));
}

Привет. Спасибо. Я получаю эту ошибку. Исключение: непредвиденная ошибка при получении метода или свойства getFileById для объекта DriveApp.

Víctor Enrich 10.04.2024 07:41

Другие вопросы по теме