You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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(); 
}

关键修改说明

  1. 用dataRange.getVisibleView().getRange()获取筛选后仅可见的单元格范围,替代原代码中直接取整列A:AA的操作
  2. 复制时使用这个可见范围作为源,确保只粘贴筛选后的"Virginia"相关数据

内容的提问来源于stack exchange,提问作者Bascax

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 22:13:17