Непоследовательное применение скрипта рисования границ - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть сценарий, запланированный на каждый вечер, чтобы просматривать различные листы и рисовать границы вокруг любых новых записей данных.

Сценарий работает, но не работает.Когда я проверяю это работает полностью для некоторых листов Google и частично для других.В каждой электронной таблице Google есть около 10 внутренних листов, и для некоторых границы нарисованы, а для других - нет.

Я не понимаю, почему он не работает чисто.

function addBorders() {
  //Access the sheet which contains all the IDs
  var idSheet = SpreadsheetApp.openById('example');

  //Check for the last row
  var lastRow = 0;
  var currRow = 2;
  //Loop through the sheet and find the last ID available
  while (idSheet.getRange("A" + currRow).getValue() != "")
  {
    currRow = currRow + 1;
  }
  //Set the last row with an ID found to be the lastRow
  lastRow = currRow;
  idSheet.getRange("B1").setValue("Total Rows");
  idSheet.getRange("B2").setValue(lastRow);

  //Loop through the ID sheet to find the ID to make changes to
  for( var y = 2; y < lastRow; y++) 
  { 
    var studentID = idSheet.getSheetByName("Sheet1").getRange(y, 1).getValue();

    //As IDs are take from the ID sheet, open the relevant sheet and run the code below
    var ss = SpreadsheetApp.openById(studentID);
    var sheetsCount = ss.getNumSheets();
    var sheets = ss.getSheets();

    //For each sheet in the individal student spreadsheets, set the borders correctly
    for (var i = 0; i < sheetsCount; i++)
    {
      var sheet = sheets[i]; 
      var range = sheet.getRange(6, 3, 35);
      var values = range.getValues().map(function(d){ return d[0] });

      //clear previous border
      var selection = sheet.getRange(6,2,35,5)
      selection.setBorder(false,false,false,false,false,false);  

      //set border
      var index = values.indexOf("");

      var border = sheet.getRange(5, 2, index+1, 5);
      border.setBorder(true, true, true, true, true, true);
    }
  }
}

1 Ответ

0 голосов
/ 20 февраля 2019

Это неверно while (idSheet.getRange("A" + currRow).getValue() != "") Вы должны указать пример листа (т.е. вкладки): idSheet.getRange( "Sheet1!A" + currRow).getValue()!="") Если это работает, то, вероятно, всегда используется ss.getSheets () [0] самый левый лист.

Это приведет к невозможности доступа к данным в последней строке

for( var y = 2; y < lastRow; y++) 

Откуда вы знаете, что индекс ниже никогда не будет -1.Если это так, то index + 1 = 0, что не является допустимым значением строки.Мне немного не по себе.

var index = values.indexOf("");
var border = sheet.getRange(5, 2, index+1, 5); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...