如何编写Excel Office Script实现向下填充,或将对应VBA转为Office Script
Excel Office Script 空值向下填充实现方案
完全可以编写Office Script实现和旧版Excel「定位条件(Go To Special)」完全一致的空值向下填充效果,以下是适配你需求的完整代码,等效于你提供的VBA逻辑:
function main(workbook: ExcelScript.Workbook) { let selectedSheet = workbook.getActiveWorksheet(); // 若需要针对选中区域填充,替换下一行为 let range = workbook.getSelectedRange(); let range = selectedSheet.getUsedRange(); // 获取所有空单元格区域 let blankAreas = range.getSpecialCells(ExcelScript.SpecialCellType.blanks).getAreas(); // 遍历所有不连续的空单元格区域 blankAreas.forEach(area => { // 获取区域的起始行、列、行列数 let startRow = area.getRowIndex(); let startCol = area.getColumnIndex(); let rowCount = area.getRowCount(); let colCount = area.getColumnCount(); // 遍历区域内每个空单元格 for (let i = 0; i < rowCount; i++) { for (let j = 0; j < colCount; j++) { let currentCell = area.getCell(i, j); // 跳过第一行的空单元格(无上方值可填充) if (currentCell.getRowIndex() > 0) { // 取上方单元格的值赋值到当前空单元格 let aboveValue = selectedSheet.getCell(currentCell.getRowIndex() - 1, currentCell.getColumnIndex()).getValue(); currentCell.setValue(aboveValue); } } } }); }
代码说明
- 默认对当前工作表的已用范围执行填充,如果需要和你提供的VBA逻辑一致,仅对选中区域执行填充,只需将代码中获取range的行替换为
let range = workbook.getSelectedRange();即可 - 自动跳过工作表第一行的空单元格,避免因无上方值引发的报错
- 兼容空单元格为不连续区域的场景,和原生「定位条件-空值」填充效果完全一致
内容的提问来源于stack exchange,提问作者George Chitechi
相关产品推荐
相关产品推荐

