Google apps script 如何排除计划应用程序脚本的单个故障
我使用谷歌脚本来安排移动、清理和归档数据。我们最近有一个脚本失败,它将员工联系人聚合到一个主列表中。它似乎只失败了一次,但在一次重要的通信中断之前失败了。它似乎无法调用所需的csv文件,但查看另一个脚本的日志,该文件似乎确实存在。除了将此归因于随机的谷歌应用程序脚本服务失败之外,还有人有其他建议吗Google apps script 如何排除计划应用程序脚本的单个故障,google-apps-script,Google Apps Script,我使用谷歌脚本来安排移动、清理和归档数据。我们最近有一个脚本失败,它将员工联系人聚合到一个主列表中。它似乎只失败了一次,但在一次重要的通信中断之前失败了。它似乎无法调用所需的csv文件,但查看另一个脚本的日志,该文件似乎确实存在。除了将此归因于随机的谷歌应用程序脚本服务失败之外,还有人有其他建议吗 function import() { importCSVFromGoogleDrive('1vnTdA0yJEra1zCwLv5PKGxkTSrGxA4G-','A01_Contacts.csv'
function import() {
importCSVFromGoogleDrive('1vnTdA0yJEra1zCwLv5PKGxkTSrGxA4G-','A01_Contacts.csv','01')
importCSVFromGoogleDrive('1vnTdA0yJEra1zCwLv5PKGxkTSrGxA4G-','A02_Contacts.csv','02')
importCSVFromGoogleDrive('1vnTdA0yJEra1zCwLv5PKGxkTSrGxA4G-','A03_Contacts.csv','03')
importCSVFromGoogleDrive('1vnTdA0yJEra1zCwLv5PKGxkTSrGxA4G-','A04_Contacts.csv','04')
importCSVFromGoogleDrive('1vnTdA0yJEra1zCwLv5PKGxkTSrGxA4G-','A05_Contacts.csv','05')
importCSVFromGoogleDrive('1vnTdA0yJEra1zCwLv5PKGxkTSrGxA4G-','A06_Contacts.csv','06')
importCSVFromGoogleDrive('1vnTdA0yJEra1zCwLv5PKGxkTSrGxA4G-','A07_Contacts.csv','07')
importCSVFromGoogleDrive('1vnTdA0yJEra1zCwLv5PKGxkTSrGxA4G-','A08_Contacts.csv','08')
importCSVFromGoogleDrive('1vnTdA0yJEra1zCwLv5PKGxkTSrGxA4G-','A09_Contacts.csv','09')
importCSVFromGoogleDrive('1vnTdA0yJEra1zCwLv5PKGxkTSrGxA4G-','A10_Contacts.csv','10')
importCSVFromGoogleDrive('1vnTdA0yJEra1zCwLv5PKGxkTSrGxA4G-','A11_Contacts.csv','11')
importCSVFromGoogleDrive('1vnTdA0yJEra1zCwLv5PKGxkTSrGxA4G-','A12_Contacts.csv','12')
}
function importCSVFromGoogleDrive(FolderID,FileName,SheetName) {
var folder =DriveApp.getFolderById(FolderID)
var file = folder.getFilesByName(FileName).next();
var csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(SheetName);
sheet.clear();
sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
// You can use commands like the following to dictate the data formatting of some columns after import
// sheet.getRange("R:R").setNumberFormat('@STRING@');
}
试试这个:
它可能无法解决问题,但当问题发生时,它会给您留下更多的信息
function import() {
var fA=[{filename:'A01_Contacts.csv',sheetname:'01'},{filename:'A02_Contacts.csv',sheetname:'02'},{filename:'A03_Contacts.csv',sheetname:'03'},{filename:'A04_Contacts.csv',sheetname:'04'},{filename:'A05_Contacts.csv',sheetname:'05'},{filename:'A06_Contacts.csv',sheetname:'06'},{filename:'A07_Contacts.csv',sheetname:'07'},{filename:'A08_Contacts.csv',sheetname:'08'},{filename:'A09_Contacts.csv',sheetname:'09'},{filename:'A10_Contacts.csv',sheetname:'10'},{filename:'A11_Contacts.csv',sheetname:'11'},{filename:'A12_Contacts.csv',sheetname:'12'}];
var id='1vnTdA0yJEra1zCwLv5PKGxkTSrGxA4G-';
Logger.log(importCSV({files:fA,folderid:id}));
}
function importCSV(obj) {
var folder=DriveApp.getFolderById(obj.folderid);
var ss=SpreadsheetApp.getActive();
obj['status']=[];
obj.files.forEach(function(O,i){
try {
var csvData=Utilities.parseCsv(folder.getFilesByName(O.filename).next().getBlob().getDataAsString());
if(csvData) {
var sh=ss.getSheetByName(O.sheetName);
sh.clear();
sh.getRange(1,1,csvData.length,csvData[0].length).setValues(csvData);
obj.status=Utilities.formatString('Success: FileName: %s SheetName: %s',O.filename,O.sheetname);
}
}
catch(e) {
obj.status=Utilities.formatString('Error: %s, Failure: FileName: %s SheetName: %s',e,O.filename,O.sheetname);
}
});
return obj;
}
当csvData
为空数组时(因为.csv文件为空),试图访问csvData
数组的第一个值的长度会导致错误“TypeError:无法从未定义的”中读取属性“length”,当csvData
数组为空时,可以使用andif
来防止这种情况,如下所示:
function importCSVFromGoogleDrive(FolderID,FileName,SheetName) {
var folder =DriveApp.getFolderById(FolderID)
var file = folder.getFilesByName(FileName).next();
var csvData = Utilities.parseCsv(file.getBlob().getDataAsString());
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName(SheetName);
sheet.clear();
if( csvData.length == 0) { return }
sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
}
有时,当您使用驱动器api调用文件时会出现延迟,脚本将继续运行,就好像文件不存在一样。你可能想调查谷歌云的东西,或者其他一些文件存储选项。你能提供错误消息和它发生的地方吗?谢谢你的帮助!错误为TypeError:无法从undefined读取属性“length”。在ImportCsvFromGoogleDrive(Import:26)在Import(Import:8)在try循环中发出csv调用,直到成功为止,怎么样?看起来它失败的频率很低,这是有道理的,尽管您可能希望将其限制为10次或20次尝试。直到成功意味着如果它真的找不到它,就会有一个无止境的循环。