Как изменить .getMergedRanges () из строки в диапазон? - PullRequest
0 голосов
/ 08 января 2020

Следующий код будет работать очень медленно в моих Google Sheets, потому что мой getRange слишком велик. Есть ли способ только l oop через объединенные столбцы? Я только хочу, чтобы для l oop было получено количество объединяемых столбцов в yourRange.

function getUpfrontCosts() {
    var sheet = SpreadsheetApp.getActive().getSheetByName('LPB_COST');
    var cl , count=0;
    var yourRange = sheet.getRange("H13:UV13");
    for (var i = 1; i < yourRange.getNumColumns()+1; i++)
    {
        cl=yourRange.getCell(1, i);
        if (cl.isPartOfMerge()){
            if (cl.offset(15, 0).getBackground() == "#ff8300" && cl.getMergedRanges()[0].getCell(1, 1).getValue()=='Upfront Costs') {
               count = count + cl.offset(15, 0).getValue();
            }
            else {
            }   
        } else {
        }
    }
   return count;
};

Второй код - это то, как я пытаюсь превратить строку в диапазон. Я получаю сообщение об ошибке "Ссылка на ячейку вне диапазона"

Как я могу изменить cl, чтобы он не был строкой и был диапазоном?

function getUpfrontCosts() 
{
    var sheet = SpreadsheetApp.getActive().getSheetByName('LPB_COST');
    var destSheet = SpreadsheetApp.getActive().getSheetByName('Top Level PN');
    var cl , count=0;
    var yourRange = sheet.getRange("I13:UZ13");
    var mergedRanges = yourRange.getMergedRanges();
    for (var i = 0; i < mergedRanges; i++){
    }
    var newRange = sheet.getRange(mergedRanges[i].getA1Notation());
    Logger.log(newRange.getA1Notation());
    for (var i = 0; i < newRange.getNumColumns()+1; i++){
      cl=newRange.getCell(1, i);
      Logger.log(newRange.getA1Notation());
          if (cl.offset(15, 0).getBackground() == "#ff8300" && cl.getValue()=='Upfront Costs') {
               count = count + cl.offset(15, 0).getValue();
            }
            else {
            }
    }
   return count;
};

Это строка с ошибка

   cl=newRange.getCell(1, i);

1 Ответ

2 голосов
/ 09 января 2020

Если вы хотите использовать диапазон ячейки слияния, вы можете сделать это:

function UntitledMacro1() 
{
    var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1');
    var cl , count=0 ;
    var yourRange = sheet.getRange("I13:UZ13");
    var bb = yourRange.getMergedRanges();
    for (a=bb[0].getColumn();a<bb[0].getLastColumn()+1;a++)
    {
      //Your actual columns from I13, for first merge range, here your cl, 
      //but if your range is ("13:13"), you don't need 
      //-sheet.getRange("I13").getColumn()+1
      cl=yourRange.getCell(1, a-sheet.getRange("I13").getColumn()+1);

      //For your offset 15
      Logger.log(cl.offset(15, 0).getValue());

      //on so on

    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...