调整Google Sheet App Script文章拆分逻辑:第七个H2后合并剩余内容
解决App Script文章拆分的列数限制问题
需求说明
- 已实现:第一列存放H1标题,第二列起依次对应每个H2标题及其下方所有段落
- 待修正:要求处理到第7个H2时,将该H2及后续所有内容合并存入最后一列,但当前脚本仍会把第7个H2拆分为单独列
修正后的脚本
function splitArticleToColumns() { const activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); const rawArticle = activeSheet.getRange("A1").getValue(); // 假设原始文章在A1单元格 const allLines = rawArticle.split("\n"); const resultColumns = []; let currentSectionContent = []; let h2Counter = 0; let isBeyondSeventhH2 = false; allLines.forEach((line, index) => { if (line.startsWith("# ")) { // 提取H1存入第一列 resultColumns.push([line.replace("# ", "")]); } else if (line.startsWith("## ") && !isBeyondSeventhH2) { h2Counter++; // 先把上一个H2的段落内容存入结果 if (currentSectionContent.length > 0) { resultColumns.push([currentSectionContent.join("\n")]); currentSectionContent = []; } // 判断是否是第7个H2 if (h2Counter === 7) { isBeyondSeventhH2 = true; // 合并第7个H2及所有剩余内容 const remainingContent = allLines.slice(index).join("\n"); resultColumns.push([remainingContent]); } else { // 存入当前H2标题 resultColumns.push([line.replace("## ", "")]); } } else { if (isBeyondSeventhH2) { // 追加到最后一列的内容里 resultColumns[resultColumns.length - 1][0] += "\n" + line; } else { // 收集当前H2下的段落 currentSectionContent.push(line); } } }); // 处理未完成的段落(未触发第7个H2的情况) if (currentSectionContent.length > 0 && !isBeyondSeventhH2) { resultColumns.push([currentSectionContent.join("\n")]); } // 写入工作表,从B1开始输出 activeSheet.getRange(1, 2, resultColumns.length, 1).setValues(resultColumns); }
核心修改点
- 新增
isBeyondSeventhH2状态标记,用于判断是否进入合并剩余内容的阶段 - 当检测到第7个H2时,直接截取从该H2开始的所有剩余内容,合并后存入最后一列,不再继续拆分
- 调整段落处理逻辑:进入合并阶段后,所有后续内容直接追加到最后一列,不再单独列存
内容的提问来源于stack exchange,提问作者user8702720
相关产品推荐
相关产品推荐

