在Google Apps Script中按条件为重复值对应行添加删除线
实现重复值对应小行号单元格添加删除线的方案
核心思路
先按值对单元格分组,再在每个重复值组里筛选出行号更小的单元格,最后给这些单元格添加删除线样式。
具体实现(以JavaScript为例)
按值分组收集单元格
遍历原始对象,将相同值对应的所有单元格键归类到同一组:const cellObj = { C43: 'X13', C59: 'X13', C75: 'X14', C91: 'X14', C107: 'X16', C123: 'X17', C139: 'X17' }; const valueGroups = {}; for (const cell in cellObj) { const value = cellObj[cell]; valueGroups[value] ? valueGroups[value].push(cell) : valueGroups[value] = [cell]; }筛选需添加删除线的单元格
对每个值组,提取单元格的行号(去掉前缀C)并排序,把除行号最大之外的单元格加入待处理列表:const strikethroughCells = []; for (const value in valueGroups) { const cells = valueGroups[value]; if (cells.length > 1) { // 按行号升序排序 const sorted = cells.sort((a, b) => parseInt(a.slice(1)) - parseInt(b.slice(1))); // 取除最后一个(最大行号)之外的所有单元格 strikethroughCells.push(...sorted.slice(0, -1)); } }执行后,
strikethroughCells结果为['C43', 'C75', 'C123'],完全匹配需求。应用删除线样式
- 如果是操作HTML表格:
strikethroughCells.forEach(cellId => { const cell = document.getElementById(cellId); if (cell) cell.style.textDecoration = 'line-through'; }); - 如果是生成Markdown文本:
// 假设rowContents存储各单元格的文本内容 const rowContents = { C43: '行43内容', C59: '行59内容', C75: '行75内容', C91: '行91内容', C107: '行107内容', C123: '行123内容', C139: '行139内容' }; const result = {}; for (const cell in rowContents) { result[cell] = strikethroughCells.includes(cell) ? `~~${rowContents[cell]}~~` : rowContents[cell]; }
- 如果是操作HTML表格:
内容的提问来源于stack exchange,提问作者Shaik Naveed
相关产品推荐
相关产品推荐

