【发布时间】: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