如何修改谷歌Apps脚本,清除活动工作表内容时保留公式与列标题文本?
如何修改谷歌Apps脚本,清除活动工作表内容时保留公式与列标题文本?
嗨,我完全懂你现在的困惑!你的脚本已经能做到清除内容时保留公式,但现在想额外把自己设置的列标题(也就是那些用来提示数据位置的文本)也保留下来,对吧?别着急,咱们来调整一下代码就能实现这个需求。
核心思路
原来的keepFormulas函数会直接清空整个指定范围,再重新写入公式,这就把第一行的标题也清掉了。我们需要做的是:
- 先把标题行(默认是第一行)的内容单独存下来
- 对除了标题行之外的区域,保留公式、清除其他数据
- 最后把标题行的内容还原回去
修改后的完整代码
function onOpen(e) { SpreadsheetApp.getUi().createMenu('Utills') .addItem("Entire current sheet", 'entireSheet') .addItem('Current active range', 'activeRange') .addToUi(); } function entireSheet() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getActiveSheet(); const range = sheet.getDataRange(); keepFormulasAndHeaders(range); } function activeRange() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const sheet = ss.getActiveSheet(); const range = sheet.getActiveRange(); keepFormulasAndHeaders(range); } function keepFormulasAndHeaders(range) { // 获取整个范围的公式和所有单元格的值 const formulas = range.getFormulas(); const allValues = range.getValues(); // 准备一个新的二维数组来存储要保留的内容 const newContent = formulas.map((row, rowIndex) => { // 如果是第一行(标题行),直接保留原内容 if (rowIndex === 0) { return allValues[rowIndex]; } // 其他行:保留公式,没有公式的单元格设为空 return row.map(cellFormula => cellFormula || ""); }); // 把处理后的内容写回范围 range.setValues(newContent); }
代码说明
- 我把原来的
keepFormulas函数改成了keepFormulasAndHeaders,更贴合现在的功能 - 新增了
allValues来获取所有单元格的内容,专门用来保留第一行的标题文本 - 通过
map遍历每一行:- 第一行直接用原来的标题内容,完全不改动
- 其他行只保留公式,没有公式的单元格就设为空(也就是清除原数据)
- 最后用
setValues一次性把处理好的内容写回表格,这样比多次操作单元格效率更高
额外提示
如果你的标题行不是第一行(比如前两行都是标题),只需要把判断条件改成rowIndex < 2(前两行的情况),这样就能保留多行标题了。
赶紧试试修改后的脚本吧,不管是选整个工作表还是活动范围,列标题和公式都会被保留,其他数据会被清除~
备注:内容来源于stack exchange,提问作者marc Ostrensky
相关产品推荐
相关产品推荐

