我想创建一个对象,在其中存储单元格地址以及列和行索引。 我已经使用此代码实现了这一点,但在合并单元格中我遇到了问题。如果 A1 和 B1 单元格合并,那么我只需要 A1 单元格,但目前我同时获得 A1 和 B1 单元格。 有没有办法可以从给定范围(namedRange)中找到合并的单元格。
这是我的图片 我的 Excel 图片 根据此表,我只需要给定范围内的 A1 和 G1 单元格,因为其他单元格已合并。
这里
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);
}
}
}
我有这个函数,用于获取所有“合并单元格”的对象数组。您可以首先使用下面的函数,然后在函数的循环中交叉引用以查看单元格是否是“合并区域”的一部分并且仅包含第一个单元格。我把它留给你去整合,希望下面的内容能让你走上正轨..
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;
};