arrays - 使用 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() 将图像从源文件夹移动到目标文件夹?
解决方案
也许这就是你要找的:
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)
}
}
推荐阅读
- visual-studio - 更新后 Visual Studio IntelliSence 工作不正常
- excel - 如何修复运行时间 1004:未找到单元格错误
- android - Android:如何以编程方式更改应用程序语言?
- javascript - 检测跨域 iframe 内的最后一次点击/触摸?
- macos - 如果我不以 root 身份运行 vs code,则 vs code 无法安装扩展
- java - 实现cacheStore时没有ID时如何加载数据以点燃缓存?
- c# - Asp.Net Core EF Core 表连接
- html - Netsuite FreeMarker 如何拆分字符串并使用索引
- machine-learning - 训练 SVM 模型后如何加载未标记的数据进行情感分类?
- android - 获取插入 SIM 卡的唯一 ID