【发布时间】:2013-02-19 19:08:30
【问题描述】:
我的 google 应用程序脚本将 csv 文件 [test.csv] 导入新选项卡,操作一些值,然后将操作的选项卡保存为 csv 文件 [test.csv]。当它保存新版本时,它只是制作另一个副本 [test(1).csv]。我希望覆盖以前的文件(或删除旧文件然后导出/写入新版本。)请帮忙?
我正在使用来自Interacting With Docs List Tutorial的参考代码
【问题讨论】:
我的 google 应用程序脚本将 csv 文件 [test.csv] 导入新选项卡,操作一些值,然后将操作的选项卡保存为 csv 文件 [test.csv]。当它保存新版本时,它只是制作另一个副本 [test(1).csv]。我希望覆盖以前的文件(或删除旧文件然后导出/写入新版本。)请帮忙?
我正在使用来自Interacting With Docs List Tutorial的参考代码
【问题讨论】:
我知道这是一个老问题,但从那时起,已接受答案中的大部分信息已被 Google 弃用。 DocsList 消失了,文件对象的 clear() 和 append() 方法也消失了。
我使用以下函数来创建或覆盖文件:
// Creates or replaces an existing file
function updateFile (folder, filename, data) {
try {
// filename is unique, so we can get first element of iterator
var file = folder.getFilesByName(filename).next()
file.setContent(data)
} catch(e) {
folder.createFile(filename, data)
}
}
作为参考,这里有一些对文件夹执行相同操作的代码。它假设我们在当前工作表的父文件夹中操作并且想要一个文件夹 那里的新文件夹或现有文件夹的对象。
// Get folder under current folder. Create it if it does not exist
function getOrCreateFolder(csvFolderName) {
var thisFileId = SpreadsheetApp.getActive().getId();
var thisFile = DriveApp.getFileById(thisFileId);
var parentFolder = thisFile.getParents().next();
try {
// csvFolderName is unique, so we can get first element of iterator
var folder = parentFolder.getFoldersByName(csvFolderName).next();
// asking for the folder's name ensures we get an error if the
// folder doesn't exist. I've found I don't necessarily catch
// an error from getFoldersByName if csvFolderName doesn't exist.
fname = folder.getName()
} catch(e) {
var folder = parentFolder.createFolder(csvFolderName);
}
return folder
}
【讨论】:
您可以执行DocsList.find(fileName),它会为您提供具有该名称的文件列表。如果文件名是唯一的,那么您可以使用var file = DocsList.find(fileName)[0]。
如果您是 Google Apps 用户,您可以使用 file.clear() 删除旧文件的所有内容,然后使用 file.append() 插入所有新内容。
否则,您必须先file.setTrashed(true) 然后DocsList.createFile() 才能制作新的。
【讨论】: