Сопоставление ячейки листов Google с диском Google и получение ссылки

У меня есть имя в ячейке A2, например; A2="Жираф"

у меня есть определенная папка, в которой есть файл с именем «Жираф»

Могут ли листы Google найти файл и получить ссылку в выходной ячейке B2?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
60
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Из вашего следующего ответа,

Я не могу отблагодарить вас за то, что вы сделали это для меня. Может быть, это я делаю ошибку. Я собираюсь опубликовать ссылки на лист Google и диск ниже. Я получаю неизвестную ошибку. Ссылка на Google Sheet - docs.google.com/spreadsheets/d. /… Ссылка на папку Google Диска — Drive.google.com/drive/folders/…

Когда я увидел вашу папку, я заметил, что в вашей ситуации никаких файлов не существует, существуют только папки. В этом случае протестируйте следующий скрипт. В этом сценарии извлекаются как папки, так и файлы. Когда вы используете этот скрипт, установите триггер OnEdit в установленныйOnEdit и поместите имя папки в столбец «A». При этом ссылка на папку помещается в столбец «Б».

Пример сценария:

function installedOnEdit(e) {
  const sheetName = "Sheet1"; // Please set your sheet name.
  const folderId = "###"; // Please set your folder ID you want to search the files.

  const { range } = e;
  const sheet = range.getSheet();
  if (sheet.getSheetName() != sheetName || range.columnStart != 1 || range.rowStart == 1) return;

  const getFiles = (folder, obj = {}) => {
    if (folder) {
      const folderName = folder.getName();
      const folderLink = folder.getUrl();
      obj[folderName] = obj[folderName] ? [...obj[folderName], folderLink] : [folderLink];
      const files = folder.getFiles();
      while (files.hasNext()) {
        const f = files.next();
        const filename = f.getName();
        const link = f.getUrl();
        obj[filename] = obj[filename] ? [...obj[filename], link] : [link];
      }
      const subFolders = folder.getFolders();
      while (subFolders.hasNext()) {
        getFiles(subFolders.next(), obj);
      }
    }
    return obj;
  }

  const folder = DriveApp.getFolderById(folderId);
  const obj = getFiles(folder);
  const filename = range.getDisplayValue().trim();
  if (obj[filename]) {
    range.offset(0, 1).setValue(obj[filename]);
  }
}

Если вы хотите получить только папки, удалите следующий сценарий из приведенного выше сценария.

const files = folder.getFiles();
while (files.hasNext()) {
  const f = files.next();
  const filename = f.getName();
  const link = f.getUrl();
  obj[filename] = obj[filename] ? [...obj[filename], link] : [link];
}

Первый пример кода дает мне ответ: Файл ${filename} не найден. даже если имя файла присутствует и идентификатор папки верен. Второй пример кода только что завершает свое выполнение, и в B2: B не выводится никаких результатов, поэтому он не может найти имя на диске.

Vansh Shah 15.05.2024 07:16

@Vansh Shah Теперь, угадав вашу реальную ситуацию, я добавил еще один пример сценария. Пожалуйста, подтвердите это. Если мое предположение оказалось неверным, еще раз прошу прощения. Тогда предоставьте подробную информацию для правильного воспроизведения проблемы. Этим я хотел бы это подтвердить.

Tanaike 15.05.2024 10:36

хорошо, у меня есть основная папка под названием «Объекты», в этой папке у меня есть 5 новых папок «Животное 1 Животное 2… Животное 5» в каждой папке «Животное» есть папки, которые называются соответственно моему A2 = «Жираф», поэтому я хочу получить ссылку на папку с названием «Жираф» из папки «Животное 1».

Vansh Shah 15.05.2024 15:39

@Ванш Шах Спасибо за ответ. Из вашего ответа я понял, что в вашей ситуации есть папка, включающая подпапки. В этом случае можно использовать мой добавленный скрипт. Потому что в моем добавленном скрипте поиск ведется по всем подпапкам в папке. Можете ли вы протестировать мой сценарий?

Tanaike 16.05.2024 01:25

Привет! Ни один из сценариев не работает. Думаю, все в порядке. Я могу просто сделать это вручную. Большое спасибо за ваши усилия в этом @Tanaike.

Vansh Shah 16.05.2024 07:00

@Ванш Шах Спасибо за ответ. Насчет Hi, None of the script work I guess its okay I can just do it manually Thank you so much for putting your efforts in this @Tanaike, хотя из вашего вопроса я не понял, хотите ли вы использовать мой скрипт в качестве пользовательской функции, к сожалению, на текущем этапе этот процесс нельзя использовать с пользовательской функцией из-за текущей спецификации пользовательской функции. .

Tanaike 16.05.2024 07:06

@Vansh Shah Если вы хотите достичь своей цели с помощью пользовательской функции, текущий ответ — нет. В этом случае необходимо запустить скрипт вручную или по триггеру OnEdit. Приношу извинения за эту ситуацию. И я глубоко извиняюсь, что не смог сразу понять ваш фактический ожидаемый результат от вашего показного вопроса. Я бы хотел больше изучать английский язык.

Tanaike 16.05.2024 07:06

Нет, я думаю, вы хорошо поняли мой вопрос @Tanaike. Я просто думаю, что это невозможно сделать в таблицах Google без API. Я получаю эту ошибку: «Исключение: у вас нет разрешения на вызов DriveApp.getFolderById. Необходимые разрешения: (googleapis. com/auth/drive.readonly || googleapis.com/auth/drive) (строка 22)."

Vansh Shah 16.05.2024 07:25

@Ванш Шах Спасибо за ответ. Да. В текущей спецификации этот процесс нельзя использовать с пользовательской функцией. Я глубоко извиняюсь за эту ситуацию. Итак, я предложил способ ручного выполнения скрипта. Например, в качестве другого подхода, когда значение помещается в столбец «A», ссылка на файл может быть автоматически помещена в столбец «B» с помощью устанавливаемого триггера OnEdit.

Tanaike 16.05.2024 07:33

@Vansh Shah Теперь я добавил еще один пример сценария с использованием устанавливаемого триггера OnEdit, пожалуйста, подтвердите это.

Tanaike 16.05.2024 07:57

Привет @Tanaike. Я не могу отблагодарить вас за то, что вы сделали это для меня. Может быть, это я делаю ошибку. Я собираюсь опубликовать ссылки на лист Google и проехать ниже. Я получаю неизвестную ошибку. Ссылка на лист Google- docs.google. com/spreadsheets/d/… Ссылка на папку Google Диска — drive.google.com/drive/folders/…

Vansh Shah 16.05.2024 14:34

@Ванш Шах Спасибо за ответ. Из вашего ответа я заметил, что в вашей ситуации файлы не существуют, существуют только папки. Итак, я обновил свой ответ. Пожалуйста, подтвердите это. Новый сценарий извлекает как папки, так и файлы.

Tanaike 17.05.2024 02:24

Я НЕ МОГУ ВАС ДОСТАТОЧНО СПАСИБО. Это работает. ОГРОМНОЕ СПАСИБО @Tanaike.

Vansh Shah 17.05.2024 09:58

Это не встроенная функция ни одного из API Google. Однако при некотором знании языка программирования. Это можно легко сделать с помощью Google Sheets API и Google Drive API.

Справочник по API Google Таблиц

Справочник по API Google Диска

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