Google Apps Script复制表格仅保留值不复制公式如何实现?
Google Apps Script 跨工作表复制仅保留纯值解决方案
问题核心原因
原有代码调用copyTo()方法时未指定粘贴类型,默认会复制单元格的全部属性,包括公式、格式、数据验证规则等。
最小改动方案(基于原代码调整)
仅需修改最后一行的copyTo调用,传入指定仅粘贴值的参数即可:
function CopyandPasteToB() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var mysheet = ss.getSheetByName('F1'); var sourceSheet = ss.getSheetByName('F2'); var sourceRange = sourceSheet.getRange("A52:E52"); var rlast = mysheet.getLastRow(); if (rlast === mysheet.getMaxRows()) mysheet.insertRowsAfter(rlast, 1); // 避免最后一行是表格最大行时报错 var destRange = mysheet.getRange(rlast + 1, 1); // 指定粘贴类型为仅粘贴值,第三个参数false表示不转置内容 sourceRange.copyTo(destRange, SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); }
更高效的替代方案(无需操作剪贴板)
直接读取源范围的纯值写入目标范围,执行速度更快,不受剪贴板内容干扰:
function CopyandPasteToB() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var mysheet = ss.getSheetByName('F1'); var sourceSheet = ss.getSheetByName('F2'); // 直接获取源范围的纯值数组 var sourceValues = sourceSheet.getRange("A52:E52").getValues(); var rlast = mysheet.getLastRow(); if (rlast === mysheet.getMaxRows()) mysheet.insertRowsAfter(rlast, 1); // 目标范围尺寸需要和源范围完全匹配(1行5列) var destRange = mysheet.getRange(rlast + 1, 1, 1, 5); destRange.setValues(sourceValues); }
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

