我对尝试通过应用程序脚本进行编码是全新的,我做了一些似乎主要完成我需要的事情,但是它会运行,但有时会执行大量失败的触发器。 我的目标是让这张 Google 表格每小时清理一次,然后从 Google Drive 文件夹中提取数据,稍后将 Google Drive 连接到 FTP 客户端,该文件夹中将放置一个文件。
我已经花了几周时间在这上面,它似乎“大部分”都做得很好,但我会完成并关闭它。 当我潜伏和学习时,这个社区对我帮助很大。 任何有关如何完成此任务的建议都会有所帮助。
目标是完全清除工作表,然后每小时导入一次文件。如果可以按时完成,那就太好了,但没有必要。我还没有看过那个编码,到目前为止(我认为)它应该每 2 小时运行一次,因为我现在已经设置好了。
缺少的顶行是
const FOLDER_ID - “链接到导入文件所在的 google 文件夹”,这 100% 有效
无数的版本和搜索来找到可靠的东西。 我以前从未使用过这个,所以我主要复制我发现的内容。
const FOLDER_ID = "link to the folder on google drive"
// run the two functions below as the MAIN command
function Main() {
clearTheSheet();
ImportCSV();
}
//clear the entire sheet before uploading new folder
function clearTheSheet() {
var app = SpreadsheetApp;
var activeSheet = app.getActiveSpreadsheet().getActiveSheet();
activeSheet.getRange("A2:T99999").clearContent();
//one second delay
Utilities.sleep(6000);}
//import the entire csv file from google drive and then delete the file
function ImportCSV() {
Utilities.sleep(6000);
let folder = DriveApp.getFolderById(FOLDER_ID) ;
let files = folder.getFiles() ;
let data = [];
while (files.hasNext()) {
let file = files.next();
let fileType = file.getMimeType();
if (fileType == "text/csv") {
let csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
csvData.splice(0,1);
csvData = csvData.filter(x => x[0] != '');
csvData.forEach(x => data.push(x));
file.setTrashed(true);
}
}
let ss = SpreadsheetApp.getActiveSpreadsheet();
let sheet = ss.getSheetByName("NAME OF TAB");
sheet.getRange(sheet.getLastRow()+1,1,data.length,data[0].length).setValues(data);
sheet.getRange(2,1,sheet.getLastRow()-1,sheet.getLastColumn()).sort({column: 3, ascending: true});
}
您可以使用方法链接简化代码,如下所示:
function test() {
importCsvFiles_(FOLDER_ID, 'NAME OF TAB');
}
function importCsvFiles_(folderId, sheetName) {
const sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
if (!sheet) throw new Error(`Cannot find sheet '${sheetName}'.`);
if (sheet.getFrozenRows()) sheet.setFrozenRows(1);
sheet.getDataRange().offset(1, 0).clearContent();
const files = DriveApp.getFolderById(folderId).getFiles();
while (files.hasNext()) {
const file = files.next();
if (file.getMimeType() === 'text/csv') {
const csvData = Utilities.parseCsv(file.getBlob().getDataAsString())
.slice(1)
.filter(row => row.join(''));
appendRows_(sheet, csvData);
file.setTrashed(true);
}
}
sheet.sort(3);
}