Google Sheets App Script:copyTo保留格式仅复制单元格值而非公式
解决方案
要实现**保留单元格格式但仅复制数据(不含公式)**的需求,你需要替换copyTT函数中copyTo方法的参数,使用专门的粘贴类型来同时保留值和格式,而非依赖contentsOnly参数。
修改后的完整代码
function mergeTT() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var source = ss.getRange("NEW_TTRACKER!J3:O3"); var destSheet = ss.getSheetByName("NEW_TTRACKER"); var lastRow = destSheet.getRange("J7:J11").getValues().filter(String).length; var destRange = destSheet.getRange(lastRow+7,10,1,6); source.copyTo(destRange, {contentsOnly: true}); var ws = ss.getSheetByName("NEW_TTRACKER") ws.getRange('K3:O3').clearContent(); } function copyTT() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var source = ss.getRange("NEW_TTRACKER!J5:O12"); var destSheet = ss.getSheetByName("NEW_TDATA"); // 确保目标区域与源区域行列数匹配 var destRange = destSheet.getRange(destSheet.getLastRow()+1,1, source.getNumRows(), source.getNumColumns()); // 关键修改:复制值和格式,忽略公式 source.copyTo(destRange, SpreadsheetApp.CopyPasteType.PASTE_VALUES_AND_FORMATS); var sheet = SpreadsheetApp.getActive().getSheetByName("NEW_TTRACKER"); sheet.getRange('J7:O11').clearContent(); }
关键修改说明
- 替换粘贴类型:将原代码的
{contentsOnly: false}改为SpreadsheetApp.CopyPasteType.PASTE_VALUES_AND_FORMATS,该选项会:- 提取源单元格的最终计算值/文本,完全忽略公式
- 完整保留源单元格的格式(字体、颜色、边框、对齐方式等)
- 匹配区域大小:调整
destRange的定义,让目标区域的行数、列数与源区域完全一致,避免粘贴时出现区域不匹配的报错。
额外提示
测试时可以先手动执行一次「粘贴值和格式」的操作确认效果,再运行脚本验证一致性,确保和预期行为完全匹配。
内容的提问来源于stack exchange,提问作者Abz Malek
相关产品推荐
相关产品推荐

