求可删除含高亮单元格行的Excel Office Script
Excel Office Script:删除包含高亮单元格的行
你提到的录制器无法记录筛选/删除高亮行的操作,下面是基于你现有脚本修改后的完整解决方案,实现先设置重复值高亮,再删除所有包含高亮单元格的行:
function main(workbook: ExcelScript.Workbook) { let selectedSheet = workbook.getActiveWorksheet(); // 1. 为B列设置重复值高亮的条件格式(保留你原有的逻辑) let conditionalFormatting = selectedSheet.getRange("B:B").addConditionalFormat(ExcelScript.ConditionalFormatType.presetCriteria); conditionalFormatting.getPreset().getFormat().getFont().setColor("#9C0006"); conditionalFormatting.getPreset().getFormat().getFill().setColor("#FFC7CE"); conditionalFormatting.getPreset().setRule({criterion: ExcelScript.ConditionalFormatPresetCriterion.duplicateValues}); // 2. 获取所有应用了该条件格式的单元格 const formattedCells = conditionalFormatting.getRange().getSpecialCells(ExcelScript.SpecialCellType.cellTypeAllFormatConditions); if (!formattedCells) { console.log("没有找到高亮单元格"); return; } // 3. 收集所有需要删除的行号,去重 const rowsToDelete = new Set<number>(); formattedCells.getAreas().forEach(area => { const rowStart = area.getRowIndex(); const rowEnd = rowStart + area.getRowCount() - 1; for (let i = rowStart; i <= rowEnd; i++) { rowsToDelete.add(i + 1); // Excel行号从1开始,API返回的索引是0开始 } }); // 4. 将行号倒序排列,从下往上删除(避免删除行导致后续行号偏移) const sortedRows = Array.from(rowsToDelete).sort((a, b) => b - a); sortedRows.forEach(row => { selectedSheet.getRow(row).delete(ExcelScript.DeleteShiftDirection.up); }); console.log(`已删除 ${sortedRows.length} 行包含高亮单元格的记录`); }
关键逻辑说明:
- 定位高亮单元格:通过
getSpecialCells(ExcelScript.SpecialCellType.cellTypeAllFormatConditions)精准获取所有应用了条件格式的单元格 - 行号去重:用
Set存储行号,避免同一行存在多个高亮单元格时重复执行删除操作 - 倒序删除:从最大行号开始删除,防止删除行后后续行的索引偏移,导致漏删或误删
内容的提问来源于stack exchange,提问作者Jibroni
相关产品推荐
相关产品推荐

