GAS中用if else调整行高遇问题:仅自动调行高未设置固定行高
修正Google Apps Script行高设置问题
我来帮你排查下脚本里的问题,你的代码里有几个关键错误,导致第10列空值的行没被设置成72行高,咱们一步步来修正:
原脚本的核心错误点
- 单元格值获取错误:你用
sheet.getRange(i, 10)拿到的是Range对象(不是单元格内容),直接和空字符串""比较永远不成立,得用getValue()/getDisplayValue()获取实际单元格值。 - lastRow处理冗余且错误:
getMaxRows()本身返回的就是整数,不需要转字符串再替换,而且你重复声明了lastRow变量,会导致逻辑混乱。 - 循环范围遗漏行:
i < lastRow会让循环漏掉最后一行,应该改成i <= lastRow才能覆盖所有行。 - 行操作参数格式错误:
autoResizeRows和setRowHeight的第一个参数是数字类型的行号,不是数组[i],数组格式会让方法无法识别目标行。
修正后的完整脚本
function reset_rows_auto() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var lastRow = sheet.getMaxRows(); // 直接获取整数类型的最后一行号 for (var i = 1; i <= lastRow; i++) { var cellValue = sheet.getRange(i, 10).getValue(); // 获取第10列第i行的单元格值 if (cellValue !== "") { // 判断值是否非空 sheet.autoResizeRows(i, 1); // 对单行自动调整行高 } else { sheet.setRowHeight(i, 72); // 空值时设置行高为72 } } }
优化建议(针对大表格)
如果你的表格行数很多,循环调用getRange会比较慢,推荐用批量获取值的方式提升效率:
function reset_rows_auto_optimized() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getActiveSheet(); var lastRow = sheet.getLastRow(); // 只处理有内容的行,比getMaxRows()更高效 var col10Values = sheet.getRange(1, 10, lastRow, 1).getValues(); // 批量获取第10列所有值 for (var i = 0; i < col10Values.length; i++) { var rowNum = i + 1; // 数组索引从0开始,行号从1开始转换 if (col10Values[i][0] !== "") { sheet.autoResizeRows(rowNum, 1); } else { sheet.setRowHeight(rowNum, 72); } } }
内容的提问来源于stack exchange,提问作者SRCOMSEC
相关产品推荐
相关产品推荐

