Перемещать, удалять и заменять информацию из Google Sheets новыми записями с помощью Google Script - PullRequest
0 голосов
/ 27 апреля 2020

Я создал форму Google, в которой записываются метки времени, числовое значение и файл изображения от его респондентов в Google Sheet. Файлы изображений сохраняются в «imageFolder», но когда я получаю слишком много ответов, мои imageFolder и Google Sheet становятся слишком большими. В идеале я хочу, чтобы мой imageFolder и его Google Sheet оставались ниже 50 записей.

Я хочу переместить 10 самых старых изображений в imageFolder в waitFolder. Я хочу сохранить массив этих самых старых значений из столбца "Сколько?" до того, как запись удалена. Затем я хочу, чтобы любые новые записи заменяли самые старые, чью информацию я уже сохранил в waitFolder и массиве howMany () (myArray10).

Я знаю, что мне нужно переместить 10 изображений из «imageFolder» в «waitFolder» "Использование функций в соответствии с:

var text1 = "Response Form";
var text2 = "imageFolder";
var text3 = "Copy of imageFolder";
var text4 = "Wait Folder"

function moveFiles(sourceFileId, targetFolderId) {
  var myFolder = DriveApp;
  var files = myFolder.getFileById(sourceFileId).getFiles()
  while (files.hasNext()) {
    var file = files.next());
    var dest = myFolder.getFolderById(targetFolderId);
    dest.addFile(file);
    var pull = DriveApp.getFolderById(sourceFolderId);
    pull.removeFile(file);
  }
}


function getMyId(text) {                   
  var Ids = [];
  var myFolder = DriveApp;
  var folderIter = myFolder.getFoldersByName(text);
  var folder = folderIter.next();
  var folderIter = folder.getFiles();
  while(folderIter.hasNext()) {
    var file = folderIter.next();
    var fileId = file.getId();
    Ids.push(fileId);
  }
  return Ids
}

function getMyId10(text) {                   
  var Ids = [];
  var myFolder = DriveApp;
  var folderIter = myFolder.getFoldersByName(text);
  var folder = folderIter.next();
  var folderIter = folder.getFiles();
  for (var i = 0; i < 10; i++) {  //Take the first 10
    while(folderIter.hasNext()) {
      var file = folderIter.next();
      var fileId = file.getId();
      Ids.push(fileId);
    }
  }   
  return Ids
}

function main() {
  var imageFolderId = getMyId(text2);
  var imageFolderId10 = getMyId10(text2);
  var waitFolderId = getMyId(text4);
  var Copy_imageFolderId = getMyId(text3);
  moveFiles(imageFolderId, Copy_imageFolderId); //make a copy of imageFolder
  moveFiles(imageFolderId10, waitFolderId);     //Move first 10, remove from original
}

Как я могу переместить изображения из imageFolder в Copy_imageFolder? Как я могу переместить 10 самых старых изображений из imageFolder в waitFolder? Как я могу удалить 10 самых старых изображений из imageFolder? Как я могу ограничить количество строк в моей электронной таблице, используя скрипт Google? Как я могу перезаписать мои самые старые строки новыми записями / строками?

edit1: я получаю неожиданные токены в каждой функции, и я не уверен, почему? Кажется, в то время, когда я * oop моей функции getMyId () выскочил.

edit2: Теперь я понимаю, почему я получаю неожиданные токены. Кажется, я был безответственным со своими петлями. Я заменил свое 'while's на' на 'for, чтобы исправить эту ошибку.

edit3: я удалил некоторые ненужные фрагменты кода, чтобы было легче следовать.

edit4: enter image description here Вот как выглядит мой ответ в форме в моей электронной таблице. Изображения сохраняются в подпапке imageFolder. Но я не могу взять 10 элементов массива из электронной таблицы, используя howMany (). Я также не могу переместить какие-либо файлы в любом месте. Когда я вызываю moveFiles (), я получаю неожиданную ошибку, как только он запрашивает мое DriveApp. Как мне сделать так, чтобы мои moveFiles () перемещали мои изображения из исходных в целевые папки?

1 Ответ

1 голос
/ 28 апреля 2020

Возможно, это то, что вы искали:

function moveFiles(sourceFolderId, targetFolderId) {
  var srcFolder=DriveApp.getFolderById(sourceFolderId);
  var desFolder=DriveApp.getFolderById(targetFolderId);
  var files=srcFolder.getFiles();
  while(files.hasNext()) {
    var file=files.next();
    desFolder.addFile(file);
    srcFolder.removeFile(file)
  }
}
...