google-apps-script - 自动 .XLS 到 Google 表格转换器不起作用
问题描述
因此,我一直在使用脚本自动将文件夹中的所有 .xls 文件复制并转换为 Google 表格文件类型,并将它们存放在不同的文件夹中。不幸的是,它正在复制已复制的同一文件的副本,即使在脚本中指定不这样做(第 10 行)。我可能在这里遗漏了一些东西,但并没有真正改变,似乎只是自发地不遵循脚本中的 IF 条件。请看下面:
function XLSConvert() {
var files = DriveApp.searchFiles("title contains '.xls' and parents in 'File_ID:A' and trashed = false");
var destinationFolderId = "File_ID:B";
var existingFileNames = getFilesInFolder(destinationFolderId);
while (files.hasNext()) {
var xFile = files.next();
var name = xFile.getName();
try {
if (!existingFileNames[name] && (name.indexOf('.xls') > -1)) {
var ID = xFile.getId();
var xBlob = xFile.getBlob();
var newFile = {
title: name,
key: ID,
'parents': [{
"id": destinationFolderId
}]
}
file = Drive.Files.insert(newFile, xBlob, {
convert: true
});
}
} catch (error) {
console.error("Error with file " + name + ": " + error);
}
}
function getFilesInFolder(folderId) {
var folderId = "File_ID:B";
var folder = DriveApp.getFolderById(folderId);
var filesIterator = folder.getFiles();
var files = {};
while (filesIterator.hasNext()) {
var file = filesIterator.next();
files[file.getName()] = true;
}
return files;
}
}
任何帮助将不胜感激解决这个问题。谢谢 :)
解决方案
修改点:
- 为了检索特定文件夹中的文件列表,请修改
parents in 'File_ID:A'
为'File_ID:A' in parents
进行搜索查询。 - 在您的脚本中,当 XLSX 文件转换为 Google 电子表格时,扩展名似乎已被删除。这是需要考虑的。
当以上几点反映到您的脚本时,它变成如下。
修改后的脚本:
function XLSConvert() {
var files = DriveApp.searchFiles("title contains '.xls' and 'File_ID:A' in parents and trashed = false"); // Modified
var destinationFolderId = "File_ID:B";
var existingFileNames = getFilesInFolder(destinationFolderId);
while (files.hasNext()) {
var xFile = files.next();
var name = xFile.getName().split("."); // Modified
name.pop(); // Added
try {
if (!existingFileNames[name]) { // or if (!existingFileNames[name] && xFile.getMimeType() != MimeType.GOOGLE_SHEETS) {
var ID = xFile.getId();
var xBlob = xFile.getBlob();
var newFile = {title: name,key: ID,'parents': [{"id": destinationFolderId}]};
file = Drive.Files.insert(newFile, xBlob, {convert: true});
}
} catch (error) {
console.error("Error with file " + name + ": " + error);
}
}
function getFilesInFolder(folderId) {
var folderId = "File_ID:B";
var folder = DriveApp.getFolderById(folderId);
var filesIterator = folder.getFiles();
var files = {};
while (filesIterator.hasNext()) {
var file = filesIterator.next();
files[file.getName()] = true;
}
return files;
}
}
参考:
推荐阅读
- php - 用php命令mysql查询
- fabricjs - Fabric.js - 如何为多个活动对象设置值?
- r - 将两个 ggplot() 箱线图合并在一起
- excel - Excel VBA根据范围检查值列表并在另一列中返回设定值
- javascript - 如何删除传单地图末尾的空白
- php - Google oAuth javascript to PHP - 如何获取刷新和访问令牌
- sortablejs - Sortable.js/Vue 可拖动光标
- kubernetes - 从本地网络连接到内部 Kubernetes 服务
- scala - 基于列值分区后将 Bucketizer 应用于 Spark 数据帧
- typescript - 打字稿通用对象属性常量名称在映射后丢失