如何查找给定命名范围(NamedItem)的合并单元格

问题描述 投票:0回答:1

我想创建一个对象,在其中存储单元格地址以及列和行索引。 我已经使用此代码实现了这一点,但在合并单元格中我遇到了问题。如果 A1 和 B1 单元格合并,那么我只需要 A1 单元格,但目前我同时获得 A1 和 B1 单元格。 有没有办法可以从给定范围(namedRange)中找到合并的单元格。

这是我的图片 我的 Excel 图片 根据此表,我只需要给定范围内的 A1 和 G1 单元格,因为其他单元格已合并。

这里

  • sheetName 是我的 activeSheetName
  • 上下文只是我当前的办公室上下文。
  • SheetRange 是我的地址,如 A1:I14
  • createRangeName 是我对 NameItem 的唯一命名,例如 S_361a26feb074409584f04deef2a9e354
async function setDefineNameInExcel(context, sheetName, SheetRange, createRangeName) {
    var uniqueNamedRange = createRangeName;
    let sheet = context.workbook.worksheets.getItem(sheetName);
    let range = sheet.getRange(SheetRange);
    sheet.names.add(uniqueNamedRange, range);
    range.load("address,rowCount,columnCount,cellCount,values");
    sheet.load("names");
    await context.sync();
    const propertiesToGet = range.getCellProperties({ address: true });
    await context.sync();
    for (let iRow = 0; iRow < range.rowCount; iRow++) {
        for (let iCol = 0; iCol < range.columnCount; iCol++) {
            const cellAddress = propertiesToGet.value[iRow][iCol];
            var address = cellAddress.address.slice(cellAddress.address.lastIndexOf("!") + 1)
            excelTableObj = {};
            excelTableObj.Range = uniqueNamedRange;
            excelTableObj.Address = address;
            excelTableObj.RowIndex = iRow;
            excelTableObj.ColIndex = iCol;
            lstexcelTableObj.push(excelTableObj);
        }
    }
}
office-js excel-addins
1个回答
0
投票

我有这个函数,用于获取所有“合并单元格”的对象数组。您可以首先使用下面的函数,然后在函数的循环中交叉引用以查看单元格是否是“合并区域”的一部分并且仅包含第一个单元格。我把它留给你去整合,希望下面的内容能让你走上正轨..

async function Get_Merged_Areas_Arr_Of_Objs(context, ws) {
  var mergedAreas = ws.getUsedRange(true).getMergedAreasOrNullObject();
  mergedAreas.load("areas");
  await context.sync();

  var Merged_Areas_Arr_Of_Objs = [];
  if (mergedAreas.isNull != true) {
    var arrlen = mergedAreas.areas.items.length;
    for (var ai = 0; ai < arrlen; ai += 1) {
      var obj = mergedAreas.areas.items[ai];
      var rng_obj = {};
      rng_obj["worksheet"] = obj["address"].split("!")[0];
      rng_obj["rowIndex"] = obj["rowIndex"];
      rng_obj["columnIndex"] = obj["columnIndex"];
      rng_obj["rowCount"] = obj["rowCount"];
      rng_obj["columnCount"] = obj["columnCount"];
      rng_obj["end_rowIndex"] = obj["rowIndex"] + obj["rowCount"] - 1;
      rng_obj["value"] = obj["values"][0].toString();
      Merged_Areas_Arr_Of_Objs.push(rng_obj);
    }
  }
  return Merged_Areas_Arr_Of_Objs;
};
© www.soinside.com 2019 - 2024. All rights reserved.