Google Sheets Прерывистый IMPORTRANGE не работает, и скрипт приложения не может прочитать данные из ячеек - PullRequest
3 голосов
/ 08 октября 2019

Моя самая большая проблема заключается в том, что иногда мой скрипт приложения Google листов не может прочитать содержимое ячеекОн перестанет работать на 5-30 минут, затем снова начнет работать. Это лист оперативного подсчета очков, поэтому большая проблема заключается в невозможности сохранить данные в течение довольно больших периодов времени.

Я пытался получить данные ячейки несколькими способами: ss.getSheetByName ('Sheet1') .getRange ('L1'). getValue () Я также создал массив, используя getValues ​​() для диапазона и используя данные из этого массива. Оба способа работают какое-то время, без проблем будут часами, а затем просто не смогут прочитать содержимое ячейки.

function SaveScore(btn) {
  var ui = SpreadsheetApp.getUi(); // Same variations.
  var ss = SpreadsheetApp.getActiveSpreadsheet(); // ss is now the spreadsheet the script is associated with
  //var ss = SpreadsheetApp.openById('1rKzGRC7gAWKc1m4yrEDYlospgE-JcAxngV-70rNTbTs').getSheetByName('Announcer');

  var scoreData = ss.getSheetByName('Announcer').getRange('A1:Q7').getValues();
  //var curDrawRow = ss.getSheetByName('Setup').getRange('I11').getValue();
  var curDrawRow = scoreData[4][16];


  //var scoreJ1 = scoreData[1][1];
  //var scoreJ2 = scoreData[1][2];
  //var scoreJ3 = scoreData[1][3];
  //var scoreTotal = scoreData[1][4];
  //var classNum = scoreData[0][11];

  //var drawNumb = scoreData[3][0];
  //var exhNum = scoreData[3][8];

  var curOffset = scoreData[6][16];
  //var curOffset = ss.getSheetByName('Announcer').getRange('Q7').getValue();
  //var scoreJ1 = ss.getSheetByName('Announcer').getRange('B2').getValue();
  var scoreJ1 = scoreData[1][1];
  //var scoreJ2 = ss.getSheetByName('Announcer').getRange('C2').getValue();
  var scoreJ2 = scoreData[1][2];
  //var scoreJ3 = ss.getSheetByName('Announcer').getRange('D2').getValue();
  var scoreJ3 = scoreData[1][3];
  //var scoreTotal = ss.getSheetByName('Announcer').getRange('E2').getValue();
  var scoreTotal = scoreData[1][4];
  //var classNum = ss.getSheetByName('Announcer').getRange('L1').getValue();
  var classNum = scoreData[0][11];
  //var drawNumb = ss.getSheetByName('Announcer').getRange('Raw Data!A' + (curDrawRow + curOffset)).getValue();
  var drawNumb = scoreData[3][0];
  //if (drawNumb == '') {
  //  var drawNumb = ss.getSheetByName('Raw Data').getRange('A' + (curDrawRow + curOffset)).getValue();
  //}
  //if (drawNumb == '') {
  //  var drawNumb = ss.getSheetByName('Announcer').getRange('A4').getValue();
  //}
  //var exhNum = ss.getSheetByName('Announcer').getRange('Raw Data!B' + (curDrawRow + curOffset)).getValue();
  var exhNum = scoreData[3][8];

  //if (exhNum == '') {
  //  var exhNum = ss.getSheetByName('Raw Data').getRange('B' + (curDrawRow + curOffset)).getValue();
  //}
  //if (exhNum == '') {
  //  var drawNumb = ss.getSheetByName('Announcer').getRange('I4').getValue();
  //}

  if (scoreTotal == '--' && btn != 'review') {
    ui.alert('Please enter a score');
    ss.getActiveSheet().setActiveRange(ss.getActiveSheet().getRange('B2'));
  }else if (classNum == '') {
    ui.alert('Class # is blank. This is a google syncing issue and typically will fix itself in about 5-10 minutes. Please wait and try again in 5-10 minutes.');
  }else if (drawNumb == '') {
    ui.alert('Draw # is blank. This is a google syncing issue and typically will fix itself in about 5-10 minutes. Please wait and try again in 5-10 minutes.');
  }else if (exhNum == '') {
    ui.alert('Exhibitor # is blank. This is a google syncing issue and typically will fix itself in about 5-10 minutes. Please wait and try again in 5-10 minutes.');
  }else{
}

// если я зайду так далеко, остальная часть кода будет работать. Я часто получаю предупреждение о том, что Draw # пуст или Exhibitor # пуст.

Я ожидаю, что drawNumb и exhNum будут числами каждый раз. Но когда он не работает, они оба пустые.

1 Ответ

0 голосов
/ 08 октября 2019

Это работает для меня:

function runOne(btn) {
  var ui = SpreadsheetApp.getUi(); // Same variations.
  var ss = SpreadsheetApp.getActiveSpreadsheet(); // ss is now the spreadsheet the script is associated with
  var scoreData = ss.getSheetByName('Announcer').getRange('A1:Q7').getValues();
  var curDrawRow = scoreData[4][16];
  var curOffset = scoreData[6][16];
  var scoreJ1 = scoreData[1][1];
  var scoreJ2 = scoreData[1][2];
  var scoreJ3 = scoreData[1][3];
  var scoreTotal = scoreData[1][4];
  var classNum = scoreData[0][11];
  var drawNumb = scoreData[3][0];
  var exhNum = scoreData[3][8];
  if (scoreTotal == '--' && btn != 'review') {
    ui.alert('Please enter a score');
    ss.getActiveSheet().setActiveRange(ss.getActiveSheet().getRange('B2'));
  }else if (classNum == '') {
    ui.alert('Class # is blank. This is a google syncing issue and typically will fix itself in about 5-10 minutes. Please wait and try again in 5-10 minutes.');
  }else if (drawNumb == '') {
    ui.alert('Draw # is blank. This is a google syncing issue and typically will fix itself in about 5-10 minutes. Please wait and try again in 5-10 minutes.');
  }else if (exhNum == '') {
    ui.alert('Exhibitor # is blank. This is a google syncing issue and typically will fix itself in about 5-10 minutes. Please wait and try again in 5-10 minutes.');
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...