【问题标题】:Move, Remove, and Replace information from Google Sheets with new entries using Google Script使用 Google Script 使用新条目移动、删除和替换 Google 表格中的信息
【发布时间】:2025-12-05 09:20:08
【问题描述】:

我创建了一个 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 脚本限制电子表格中的行数? 如何用新条目/行覆盖最旧的行?

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

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

edit3:我删除了一些不必要的sn-ps代码以便于理解。

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

【问题讨论】:

  • 您好@AlejandroBarrientos,所以本质上您希望将工作表中的 10 个最新条目和其余条目保存在文件夹中?干杯!
  • 您好! @ale13,实际上我希望将工作表中最旧的 10 个回复保存在文件夹/电子表格中。如果有任何新的响应,希望它们只是覆盖我已经保存到另一个文件夹的那些行。谢谢!
  • 您在电子表格中存储的是什么?也许您可以分享电子表格选项卡的图像并解释其用途。
  • 你好@Cooper,我已经分享了我的电子表格的图像以及我的图像如何保存到 imageFolder。整个脚本应该拍摄图像并在几天后删除它们。因此,一旦我的 waitFolder 被填充,我将图像保留几天,然后再次运行代码,删除 waitFolder 中的任何内容,然后再次使用 imageFolder 中的 10 个最旧的图像重新填充 waitFolder。
  • 这没有任何意义var files = myFolder.getFileById(sourceFileId).getFiles()如何从文件中获取文件。

标签: arrays google-apps-script google-sheets google-drive-api spreadsheet


【解决方案1】:

也许这就是你要找的东西:

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

【讨论】: