基于单元格值调整Google Sheets行列数的脚本实现需求
Google Sheets脚本实现:根据单元格值自动调整签到表行列数
核心思路
- 读取指定单元格的上课天数和学生数量
- 清除原有签到表区域的旧内容与格式,避免残留数据干扰
- 根据读取的数值插入对应数量的列和行
- 自动生成签到表的基础表头(姓名列、日期列)
完整脚本代码
function adjustSignInTable() { const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); // 可根据实际需求修改单元格位置 const classDays = sheet.getRange("A1").getValue(); // 上课天数所在单元格 const studentCount = sheet.getRange("B1").getValue(); // 学生数量所在单元格 // 校验输入有效性 if (typeof classDays !== 'number' || classDays < 1 || typeof studentCount !== 'number' || studentCount < 1) { SpreadsheetApp.getUi().alert("请在指定单元格输入大于0的有效数字!"); return; } // 定义签到表起始位置(C1为姓名列表头) const startCol = 3; const startRow = 1; // 清除原有签到表区域的内容和格式 const oldRange = sheet.getRange(startRow, startCol, sheet.getLastRow() - startRow + 1, sheet.getLastColumn() - startCol + 1); oldRange.clear({contentsOnly: true, formatsOnly: true}); // 添加日期列:姓名列后插入对应天数的列 sheet.getRange(startRow, startCol + 1, 1, classDays).insertColumnsAfter(startCol, classDays); // 设置日期列表头(示例:第1天、第2天...) for (let i = 0; i < classDays; i++) { sheet.getRange(startRow, startCol + 1 + i).setValue(`第${i+1}天`); } // 添加学生行:表头行下插入对应数量的行 sheet.getRange(startRow + 1, startCol, studentCount, 1).insertRowsAfter(startRow, studentCount); // 设置姓名列提示(可替换为实际姓名导入逻辑) sheet.getRange(startRow, startCol).setValue("姓名"); for (let i = 0; i < studentCount; i++) { sheet.getRange(startRow + 1 + i, startCol).setValue(`学生${i+1}`); } // 可选:自动调整列宽行高 sheet.autoResizeColumns(startCol, classDays + 1); sheet.autoResizeRows(startRow, studentCount + 1); }
使用说明
- 调整单元格位置:把代码里的
A1和B1改成你实际存放上课天数、学生数量的单元格地址 - 运行脚本:打开Google Sheets,点击「扩展程序」→「Apps脚本」,粘贴代码后保存并运行,首次运行需要完成授权
- 自定义表头:如果需要用实际日期代替“第X天”,可修改日期列循环部分的代码,用
new Date()生成对应日期格式 - 导入学生姓名:若要从表格其他区域导入真实姓名,替换掉
学生${i+1}的代码,改为读取对应单元格的值即可
注意事项
- 运行前建议备份表格数据,避免误操作清除重要内容
- 确保输入的上课天数和学生数量为正整数,脚本已加入基础校验,不符合要求会弹出提示
- 如果签到表与其他数据区域重叠,需调整
startCol和startRow的数值,避免影响其他数据
内容的提问来源于stack exchange,提问作者HBB0001
相关产品推荐
相关产品推荐

