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

Office Script技术求助:Excel表格筛选后迁移至新表并创建表格

Office Script 修正方案:筛选并导出风险PM数据

原代码存在的问题

  • 新建工作表名称与需求不符(应为「PM On Risk」而非「PMRisk」)
  • 错误使用单元格范围的筛选方法处理表格对象,表格需用自身原生筛选API
  • 「Days till the target end date」列用字符串"7"做筛选值,可能导致数值比较不准确
  • 新建表格名称与需求不符(应为「PM On Risk」而非「PM_Notification」)

修正后的完整代码

function main(workbook: ExcelScript.Workbook) {
  // 获取「PMs」表格
  const pmTable = workbook.getTable("PMs");
  if (!pmTable) {
    throw new Error("未找到名为「PMs」的表格");
  }

  // 清除表格原有筛选,避免历史条件干扰
  pmTable.getAutoFilter().clearCriteria();

  // 设置Status列筛选条件:匹配「WSCH」「WAPPR」「INPRG」
  const statusCol = pmTable.getColumnByName("Status");
  statusCol.getFilter().applyValuesFilter(["WSCH", "WAPPR", "INPRG"]);

  // 设置Days列筛选条件:数值≤7
  const daysCol = pmTable.getColumnByName("Days till the target end date");
  daysCol.getFilter().applyCustomFilter(ExcelScript.FilterOperator.lessThanOrEqual, 7);

  // 获取筛选后的可见数据范围(包含表头)
  const filteredDataRange = pmTable.getRange().getVisibleView();

  // 处理目标工作表:存在则删除,再新建「PM On Risk」工作表
  let targetSheet = workbook.getWorksheet("PM On Risk");
  if (targetSheet) {
    targetSheet.delete();
  }
  targetSheet = workbook.addWorksheet("PM On Risk");

  // 将筛选数据复制到新工作表的A1起始位置
  filteredDataRange.copyTo(targetSheet.getRange("A1"), ExcelScript.RangeCopyType.all);

  // 基于粘贴的数据创建名为「PM On Risk」的表格
  const pasteRangeAddress = filteredDataRange.getAddress().split("!")[1];
  targetSheet.addTable(`A1:${pasteRangeAddress}`, true).setName("PM On Risk");

  // 清除原表格的筛选,恢复原始状态
  pmTable.getAutoFilter().clearCriteria();
}

关键修改说明

  • 改用表格原生的筛选方法,确保筛选逻辑适配Excel表格的筛选机制,结果更准确
  • 增加表格存在性校验,避免因表格不存在导致运行报错
  • 处理目标工作表已存在的情况,避免重复创建引发冲突
  • 使用数值7而非字符串做天数筛选,保证数值比较的准确性
  • 复制数据后基于粘贴范围创建表格,确保新表格结构与筛选数据完全一致
  • 最后清除原表格的筛选,不影响原表格的后续使用

内容的提问来源于stack exchange,提问作者AmazingBand Proyect's

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 02:34:53