如何使用Excel Script仅粘贴筛选后的数据?
解决Excel Automate复制筛选后数据时选中全部行的问题
问题原因
当前代码直接复制了PO Data NBR Source工作表的整列A:AA,这会包含所有行(包括被筛选隐藏的行),导致粘贴的不是仅筛选后的"Virginia"相关数据。
解决方案
需要获取筛选后仅可见的单元格范围,再执行复制操作。修改代码中复制筛选数据的部分即可:
修改后的完整代码
function main(workbook: ExcelScript.Workbook) { let yesterdays_Open_PO_File = workbook.getWorksheet("Yesterdays Open PO File"); // 清空Yesterdays Open PO File工作表所有单元格内容 yesterdays_Open_PO_File.getRange().clear(ExcelScript.ClearApplyTo.contents); let open_PO_File = workbook.getWorksheet("Open PO File"); // 将Open PO File的A:AA区域值复制到Yesterdays Open PO File的A1开始位置 yesterdays_Open_PO_File.getRange("A1").copyFrom(open_PO_File.getRange("A:AA"), ExcelScript.RangeCopyType.values, false, false); // 刷新所有数据连接 workbook.refreshAllDataConnections(); // 获取PO Data NBR Source工作表的自动筛选器 const PODataNBR = workbook.getWorksheet("PO Data NBR Source"); const dataRange = PODataNBR.getUsedRange(); const autoFilter = PODataNBR.getAutoFilter(); // 筛选出第27列(索引26)值为"Virginia"的数据 autoFilter.apply(dataRange, 26, { criterion1: "Virginia", filterOn: ExcelScript.FilterOn.custom }); // 清空Open PO File的A:AA区域内容 open_PO_File.getRange("A:AA").clear(ExcelScript.ClearApplyTo.contents); // --- 核心修改部分 --- // 获取筛选后的可见数据范围 const visibleDataRange = dataRange.getVisibleView().getRange(); // 将可见范围的值复制到Open PO File的A1开始位置 open_PO_File.getRange("A1").copyFrom(visibleDataRange, ExcelScript.RangeCopyType.values, false, false); // --- 修改结束 --- let firm_DMD = workbook.getWorksheet("Firm DMD"); // 清空Firm DMD的A:R区域内容 firm_DMD.getRange("A:R").clear(ExcelScript.ClearApplyTo.contents); let selectedSheet = workbook.getActiveWorksheet(); // 将当前活动工作表的A:Q区域值复制到Firm DMD的A1开始位置 firm_DMD.getRange("A1").copyFrom(selectedSheet.getRange("A:Q"), ExcelScript.RangeCopyType.values, false, false); // 刷新所有数据连接 workbook.refreshAllDataConnections(); }
关键修改说明
- 用
dataRange.getVisibleView().getRange()获取筛选后仅可见的单元格范围,替代原代码中直接取整列A:AA的操作 - 复制时使用这个可见范围作为源,确保只粘贴筛选后的"Virginia"相关数据
内容的提问来源于stack exchange,提问作者Bascax
相关产品推荐
相关产品推荐

