首页 > 解决方案 > 使用 Google Script 使用新条目移动、删除和替换 Google 表格中的信息

问题描述

我创建了一个 Google 表单,它将时间戳、数值和来自受访者的图像文件记录到 Google 表格中。图像文件保存到“imageFolder”,但是当我收到太多响应时,我的 imageFolder 和 Google Sheet 会变得太大。理想情况下,我希望我的 imageFolder 及其 Google Sheet 保持在 50 个以下。

我想将 imageFolder 中 10 个最旧的图像移动到 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?如何从 imageFolder 中删除 10 个最旧的图像?如何使用 Google 脚本限制电子表格中的行数?如何用新条目/行覆盖我最旧的行?

编辑1:我在每个函数中都得到了意想不到的标记,我不确定为什么?它似乎在我的函数 getMyId() 的 while 循环中弹出。

编辑2:我现在明白为什么我得到了意想不到的令牌。看来我对我的循环不负责任。我已经用 'for's 替换了我的 'while's 来修正这个错误。

编辑3:我删除了一些不必要的代码片段,使其更容易理解。

edit4:在此处输入图像描述这是我的电子表格中的表单响应的样子。图像保存到子文件夹 imageFolder。但是我无法使用 howMany() 从电子表格中获取我想要的 10 个数组元素。我似乎也无法将任何文件移动到任何地方。当我调用 moveFiles() 时,只要它要求我的 DriveApp,我就会收到一个意外错误。如何让 moveFiles() 将图像从源文件夹移动到目标文件夹?

标签: arraysgoogle-apps-scriptgoogle-sheetsgoogle-drive-apispreadsheet

解决方案


也许这就是你要找的:

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)
  }
}

推荐阅读