如何修改Google Sheets脚本实现指定单元格字体大小动态调整
解决方案
核心问题在于原脚本只处理了存在"Heading"的情况,没覆盖需要重置字体的场景。正确逻辑是先把B列所有单元格统一设为12号字体,再单独把符合条件的单元格下方设为18号,这样无论"Heading"被添加或移除,都能保证不符合规则的单元格自动恢复默认字体。
修改后的脚本如下:
function onEdit() { const sheetName = "Sheet1"; // 请设置目标工作表名称 const fontSizeLarge = 18; // 需要放大的字体尺寸 const fontSizeDefault = 12; // 默认字体尺寸 const targetColumn = 2; // 目标列(B列对应数字2) const triggerText = "Heading"; const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName); const lastRow = sheet.getLastRow(); // 第一步:全局重置B列所有单元格为默认12号字体 sheet.getRange(1, targetColumn, lastRow).setFontSize(fontSizeDefault); // 第二步:找到所有含"Heading"的单元格,设置其正下方单元格为18号 // 排除最后一行,避免越界报错 const triggerCells = sheet.getRange(1, targetColumn, lastRow - 1) .createTextFinder(triggerText) .matchEntireCell(true) .findAll(); if (triggerCells.length > 0) { const belowRangeList = triggerCells.map(cell => cell.offset(1, 0).getA1Notation()); sheet.getRangeList(belowRangeList).setFontSize(fontSizeLarge); } }
修改要点说明
- 全局重置优先:先把B列所有单元格设为12号,彻底解决"Heading"移除后无法恢复字体的问题。
- 规避越界问题:查找触发单元格时排除最后一行,防止最后一行是"Heading"时,
offset(1,0)指向不存在的行导致报错。 - 逻辑简化:先统一规则再单独处理特殊情况,代码更易懂,也避免了原脚本的遗漏场景。
验证场景
- 在B列某单元格输入"Heading",其下方单元格自动变为18号,其余保持12号。
- 删除该单元格的"Heading"内容,其下方单元格自动恢复为12号。
- 多个"Heading"单元格共存时,各自下方单元格独立生效。
内容的提问来源于stack exchange,提问作者jackratt
相关产品推荐
相关产品推荐

