Скрипт Google для копирования и перечисления последней строки из всех электронных таблиц в папке

Я хочу создать скрипт Google, который позволяет мне перечислить следующее в отдельной таблице (в столбцах):

  • столбец A, получить имя всех электронных таблиц в данной папке
  • столбец B, получить URL-адрес указанных электронных таблиц
  • Столбец C, получить последнюю ячейку первого листа в каждой электронной таблице
  • Столбец D, создайте формулу importrange с приведенной выше информацией.

Ключевая информация: все электронные таблицы состоят только из одного листа. На этих листах нет пустых строк, и все они имеют одинаковое количество столбцов.

Я выполнил столбцы A и B. Однако я понятия не имею, как получить последний из каждой электронной таблицы. Я предполагаю, что столбец D будет проще написать, поскольку единственная переменная в формуле для importrange — это lastBelow, что у меня есть:

function gatheredInfo(){
  var result = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var folder = DriveApp.getFolderById('FOLDERID');
  var list = [];
  list.push(['Name','URL']);
  var files = folder.getFiles();
  while (files.hasNext()){
    file = files.next();
    var row = []
    row.push(file.getName(),file.getUrl())
    list.push(row);
  }
   result.getRange(1,1,list.length,list[0].length).setValues(list);
}

Любая помощь/руководство искренне приветствуется. Я застрял на этом некоторое время.

Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
199
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Чтобы добраться до «последней ячейки», вам нужно сообщить сценарию, чтобы он открывал каждую электронную таблицу, пока вы находитесь в цикле «пока», и вы можете использовать для этого последнюю строку и последний столбец.

Редактировать примечание * В зависимости от того, что вы на самом деле подразумеваете под «последней ячейкой» и как структурированы ваши данные, вам может потребоваться настроить поиск ячейки и обозначение ... но это приведет вас к правильной части вашего кода и концепции *

Это раздел, который я добавил, чтобы сделать это в вашем коде...

//Checks if the file type is a Google Sheet
    if (DriveApp.getFileById(fileID).getMimeType() == MimeType.GOOGLE_SHEETS){
      //Gets the current spreadsheet and first sheet to open to look for the last column and row
    var CurrSheet = SpreadsheetApp.openById(fileID).getSheets()[0];
      
      //find last row, column, and put that into A1 notation
    var lastrow = CurrSheet.getLastRow();
    var lastColumn= CurrSheet.getLastColumn();
      //if you don't need A1 notation then this will spit out the row number and the column number.. this next line is what gives you A1 most easily.
    var lastcell = CurrSheet.getRange(lastrow,lastColumn).getA1Notation();
    
    var row = []
    row.push(file.getName(),file.getUrl(),lastcell);
    list.push(row);
    }

Сначала я добавил проверку, чтобы убедиться, что файл в папке является Google Sheet (это тип mime). Это поможет вам предотвратить ошибки, если что-то, что не является листом Google, попадет в эту папку.

Затем мы открываем лист по идентификатору файла, который вы уже установили. По умолчанию это первый лист в каждой электронной таблице (это часть .getSheets()[0]). Ты сказал, что у тебя только один лист, но на всякий случай.

Затем используйте это, чтобы получить последнюю строку и последний столбец, и я объединил их в поддельный диапазон, чтобы быстрее перевести его в нотацию A1 для вас. Затем это просто помещается в последний столбец вашего уже установленного массива.

Вот весь код. Я протестировал папку со смешанными типами файлов, и она работает правильно.

function gatheredInfo(){
  var result = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var folder = DriveApp.getFolderById('FOLDERID');
  var list = [];
  list.push(['Name','URL','Cell']);
  var files = folder.getFiles();
  while (files.hasNext()){
    file = files.next();
    
    var fileID = file.getId();
    
    //Checks if the file type is a Google Sheet
    if (DriveApp.getFileById(fileID).getMimeType() == MimeType.GOOGLE_SHEETS){
      //Gets the current spreadsheet and first sheet to open to look for the last column and row
    var CurrSheet = SpreadsheetApp.openById(fileID).getSheets()[0];
      
      //find last row, column, and put that into A1 notation
    var lastrow = CurrSheet.getLastRow();
    var lastColumn= CurrSheet.getLastColumn();
      //if you don't need A1 notation then this will spit out the row number and the column number.. this next line is what gives you A1 most easily.
    var lastcell = CurrSheet.getRange(lastrow,lastColumn).getA1Notation();
    
    var row = []
    row.push(file.getName(),file.getUrl(),lastcell);
    list.push(row);
    }
  }
   result.getRange(1,1,list.length,list[0].length).setValues(list);
}

Что касается создания формулы importrange, вы можете сделать это на самом листе с помощью формулы или в сценарии приложения, просто нажав текстовую строку, которая объединяет все эти переменные.

Однако я не включил это, потому что у меня нет всей информации, чтобы составить успешную формулу importrange(). Вам нужен URL-адрес, имя листа и диапазон, и я не знаю, каковы ваши имена листов и совпадают ли они. Если вам это тоже нужно, вы можете добавить это прямо под переменной CurrSheet (var SheetName=CurrSheet.getSheetName();). Что даст вам имя первого листа в вашей электронной таблице, из которого вы извлекаете информацию о ячейке. Вы можете просто проанализировать это в своем сценарии приложения, чтобы либо вывести предложенную формулу importrange(), либо поместить ее как собственный столбец, чтобы использовать формулу на листе.

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

Большое спасибо! Ваши модификации направили меня в правильном направлении. Я применил отмеченные вами изменения, за исключением последней ячейки. Я понял, что последнюю ячейку не брали, потому что она была пуста. Однако последней строки в первом столбце не было и это число как раз то, что мне нужно. Как вы упоминали ранее, я думаю, что могу в конечном итоге нажать текстовую строку, чтобы вывести формулу. Еще раз тысм; Я застрял на несколько дней, так как видел другие примеры циклического просмотра файлов, но не мог собрать их воедино.

Mark 10.12.2020 15:57

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

Скрипт для копирования существующей электронной таблицы при редактировании другой электронной таблицы
Перенос диапазона строк на другую вкладку, затем очистка вкладки без удаления формул
ОШИБКА при обновлении электронной таблицы с использованием python, API Google Seets, v4: получено несколько значений для аргумента «диапазон»
Как проверить правильность URL-адреса, используемого в формуле IMAGE, и отображение изображения?
Получение электронной почты при вставке строк в таблицы Google
Проверка того, пуста ли ячейка в скриптах google
Расчет на основе зависимого раскрывающегося списка с использованием двух источников
Умножение всех чисел в ячейке на определенное число
Подсчет уникальных значений в диапазоне, если совпадения найдены в наборе диапазонов критериев
Как я могу запросить сумму по столбцам, но избежать дублирования представлений/строк от уникальных пользователей?