Как устранить неполадки в случае сбоя запланированного сценария приложения - PullRequest
0 голосов
/ 04 марта 2020

Я использую скрипты Google для планирования перемещения, очистки и архивирования данных. Недавно у нас произошел сбой сценария, который объединяет контакты сотрудников в основной список. Похоже, что он только один раз потерпел неудачу, но потерпел неудачу до того, как вышел важный контакт Похоже, что он не может вызвать необходимый CSV-файл, но, глядя на журналы другого скрипта, похоже, что файл действительно существует. У кого-нибудь есть какие-либо рекомендации, кроме как объяснить случайный сбой службы скриптов приложений Google?

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@');

}

введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 12 марта 2020

Ошибка «TypeError: Невозможно прочитать свойство« length »из неопределенного», которое вы получаете, вызвано попыткой доступа к длине первого значения массива csvData, когда csvData является пустым массивом (потому что. CSV-файл пуст), вы можете предотвратить это, используя if, когда массив csvData пуст, например:

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);
}
0 голосов
/ 05 марта 2020

Попробуйте это:

Возможно, это не решит проблему, но при этом вам нужно будет получить немного больше информации.

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...