首先,在上传新的.csv文件后,我执行了脚本。然后,.csv文件将转换为Google云端硬盘文件夹中的Google表格。我现在面临的问题是,当我删除.csv文件并上传另一个.csv文件时,它正在创建一个新工作表。上传新的.csv文件后,如何更新同一工作表?
到目前为止,此代码会将.csv文件转换为文件夹中的工作表。重新上传另一个具有相同名称的.csv文件时,我不确定如何覆盖工作表。当我上传新的.csv文件时,我不希望脚本创建另一个工作表
function convert() {
var folder = DriveApp.getFolderById('');
var files = folder.getFiles();
while (files.hasNext()) {
var file = files.next();
Drive.Files.copy({}, file.getId(), {convert: true});
}
}
我希望我上传的.csv文件覆盖Google云端硬盘中的现有工作表
答案 0 :(得分:2)
.csv
。但是Spreadsheet的文件名没有扩展名。例如,您要使用CSV文件的sample.csv
和电子表格的sample
的文件名作为同一文件名。我可以像上面那样理解。如果我的理解是正确的,那么该修改如何?修改后的脚本流程如下。请认为这只是几个答案之一。
{create: [], overWrite: [], deleteCsvFiles: []}
。在运行脚本之前,请设置变量folderId
。然后,请再次确认是否在高级Google服务中启用了Drive API。
function convert() {
var folderId = "###"; // Please set the folder ID here.
// Retrieve all files in the folder
var folder = DriveApp.getFolderById(folderId);
var files = folder.getFiles();
var fileList = [];
while (files.hasNext()) {
var file = files.next();
fileList.push({
id: file.getId(),
name: file.getName().split(".")[0],
mimeType: file.getMimeType()
});
}
// Create an object for processing files
var temp = {};
var res = fileList.reduce(function(o, e, i) {
if (e.mimeType == MimeType.CSV) o.deleteCsvFiles.push(e.id);
if (e.name in temp) {
if (temp[e.name].length == 2) throw new Error("Error");
if (fileList[temp[e.name][0]].mimeType != e.mimeType) {
o.overWrite.push({
from: e.mimeType == MimeType.CSV ? e.id : fileList[temp[e.name][0]].id,
to: e.mimeType == MimeType.GOOGLE_SHEETS ? e.id : fileList[temp[e.name][0]].id,
});
} else {
throw new Error("Error");
}
temp[e.name].push(i);
} else {
temp[e.name] = [i];
}
if (i == fileList.length - 1) {
o.create = Object.keys(temp).reduce(function(ar, e) {
if (temp[e].length == 1 && fileList[temp[e][0]].mimeType == MimeType.CSV) {
ar.push(fileList[temp[e][0]]);
}
return ar;
}, []);
}
return o;
}, {create: [], overWrite: [], deleteCsvFiles: []});
// Create new Spreadsheet from CSV file
if (res.create.length > 0) {
res.create.forEach(function(e) {
Drive.Files.copy({}, e.id, {convert: true});
});
}
// Overwrite Spreadsheet by CSV file
if (res.overWrite.length > 0) {
res.overWrite.forEach(function(e) {
var mediaData = DriveApp.getFileById(e.from).getBlob();
Drive.Files.update({}, e.to, mediaData);
});
}
// // Delete CSV files
// if (res.deleteCsvFiles.length > 0) {
// res.deleteCsvFiles.forEach(function(e) {
// Drive.Files.remove(e);
// });
// }
}