如何将 .getMergedRanges() 从字符串更改为范围?

How to Change .getMergedRanges() From String to a Range?

以下代码在我的 Google 表格中会 运行 非常慢,因为我的 getRange 太大了。有没有办法只循环遍历合并的列?我只希望 for 循环获取 "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;
};

第二个代码是我试图将字符串转换为范围的方式。我收到 "Cell reference out of range" 错误

如何将 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);

如果你想使用合并单元格范围,你可以这样做:

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

    }
};