Google Sheets App Script 首列连续两空单元格时终止While循环的实现
Google Sheets App Script 循环条件修正方案
核心逻辑说明
你需要的循环终止条件为「工作表A列出现两个连续空单元格」,因此循环继续的条件为当前A列首个空行与其下一行未同时为空。此外你原有代码中的firstEmptyRow仅在函数初始化时获取一次,循环过程中不会自动更新,需要在每次循环末尾重新赋值。
修正后的完整代码
function doubleEntry() { var sheet = SpreadsheetApp.getActiveSpreadsheet(); // 首次获取A列第一个空行 var firstEmptyRow = sheet.setActiveSelection(sheet.getRange("A"+getFirstEmptyRowWholeRow())); // 循环条件:只要A列当前空行和下一行没有同时为空就继续执行 while( !(sheet.getRange("A" + firstEmptyRow.getRow()).isBlank() && sheet.getRange("A" + (firstEmptyRow.getRow() + 1)).isBlank()) ) { //selectFirstEmptyRow firstEmptyRow.activate(); //conditionalFill sheet.getCurrentCell().setFormulaR1C1('=R[-1]C[0]'); sheet.getCurrentCell().offset(0, 1).activate(); sheet.getCurrentCell().setFormulaR1C1('=R[-1]C[0]'); sheet.getCurrentCell().offset(-1, 1).activate(); sheet.getCurrentCell().setFormulaR1C1('=IFS(R[0]C[1]="Owner Withdrawal","Dividends",R[0]C[1]="Supplies","Expenses",R[0]C[1]="Services","Expenses",R[0]C[1]="Cash", "Assets", R[0]C[1]="Equipment", "Assets", R[0]C[1]="Accounts Payable", "Liabilities", R[0]C[1]="Owner Equity", "Equity", R[0]C[1]="Retained Earnings", "Equity", R[0]C[1]="Revenue","Revenue", R[0]C[1]="Accounts Receivable", "Revenue")'); sheet.getCurrentCell().offset(1, 1).activate(); sheet.getCurrentCell().setFormulaR1C1('=IF(R[-1]C[0]="Owner Withdrawal","Cash")'); sheet.getCurrentCell().offset(0, -1).activate(); sheet.getCurrentCell().setFormulaR1C1('=IF(R[0]C[1]="Cash","Assets")'); sheet.getCurrentCell().offset(0, 2).activate(); sheet.getCurrentCell().setFormulaR1C1('=R[-1]C[0]'); sheet.getCurrentCell().offset(0, 1).activate(); sheet.getCurrentCell().setFormulaR1C1('=R[-1]C[0]'); sheet.getCurrentCell().offset(0, 1).activate(); sheet.getCurrentCell().setFormulaR1C1('=R[-1]C[0]'); sheet.getCurrentCell().offset(0, 1).activate(); sheet.getCurrentCell().setFormulaR1C1('=R[-1]C[1]'); sheet.getCurrentCell().offset(0, 1).activate(); sheet.getCurrentCell().setFormulaR1C1('=R[-1]C[-1]'); // 每次循环结束后重新获取最新的A列第一个空行 firstEmptyRow = sheet.setActiveSelection(sheet.getRange("A"+getFirstEmptyRowWholeRow())); } };
改动说明
- 补全了while循环判断逻辑,当A列出现两个连续空单元格时自动终止循环
- 新增了循环末尾的空行更新逻辑,避免每次循环都操作同一个固定行
内容的提问来源于stack exchange,提问作者Galen Farrel
相关产品推荐
相关产品推荐

