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

基于查询在Excel中创建可选择项表格:单选/复选框/切片器是否适用?

在Excel中实现组选择并生成查询结果的方案

这三个控件(单选按钮、复选框、切片器)都能满足你的需求,只是适用场景和实现复杂度不同,下面分情况给出具体实现方案:

一、切片器(推荐)

切片器是最直观的交互式筛选工具,配合Power Query参数能快速实现动态查询,适合批量选组的场景:

1. 先加载所有组数据到Excel

把你现有的Power Query查询(可以先去掉AND item."ID" in (" & #"Old Items In-Line" & ")"这行,先获取全量组列表)加载到Excel,把这个工作表命名为GroupsList。

2. 创建Power Query参数

  • 打开Power Query编辑器,点「主页」→「管理参数」→「新建参数」
  • 参数名设为SelectedGroups,类型选「文本」,允许的值选「列表」,从GroupsList[GroupName]加载,勾上「允许多选」,确定保存。

3. 修改原始查询代码

把SQL语句改成动态引用参数的形式,同时可以添加你需要的附加字段,修改后的代码如下:

let
    // 把选中的组转换成SQL需要的格式(单引号包裹、逗号分隔)
    SelectedGroupsText = "'" & Text.Combine(SelectedGroups, "','") & "'",
    // 构建SQL查询,这里可以添加你要的附加字段
    itemPOG="SELECT DISTINCT
         POG.DESC10    AS ""GroupName"",
         POSIT.NAME AS LocationName,
         ITEM.NAME AS ItemName
      
    FROM ADMIN.GROUP POG
    INNER JOIN ADMIN.LOCATION POSIT
    ON POG.DBKEY = POSIT.PARENTKEY
    INNER JOIN ADMIN.INV ITEM
    ON ITEM.DBKEY = POSIT.PARENTKEY

    WHERE POG.DBSTATUS IN (1)
    AND POG.DESC10 IN (" & SelectedGroupsText & ")
    -- 如果要保留原有的item.ID过滤,就把下面这行注释去掉
    -- AND item.""ID"" in (" & #"Old Items In-Line" & ")
    ;
    ",
    Source = Odbc.Query("dsn=CKBPRD1_SVC", itemPOG)
in
    Source

4. 关联切片器和参数

  • 回到Excel,选中GroupsList里的GroupName列
  • 点「插入」→「切片器」,选GroupName生成切片器
  • 右键切片器→「链接参数」,选你创建的SelectedGroups参数,确定即可。

5. 刷新获取结果

调整切片器的选择后,点「数据」→「全部刷新」,查询就会自动拉取选中组的附加信息到Excel里。

二、复选框

如果需要精准控制每个组的选择(比如只选某几个特定组),可以用复选框:

1. 加载组列表并添加复选框

  • 把组列表加载到工作表,A列放GroupName,B列给每个组加复选框(开发工具→插入→复选框(窗体控件))
  • 右键每个复选框→「设置控件格式」,把单元格链接设到对应的C列单元格,选中时C列对应单元格显示TRUE,未选中是FALSE。

2. 提取选中的组到单元格

在D1单元格输入公式,自动提取所有选中的组:

=TEXTJOIN("','",TRUE,IF(C:C=TRUE,A:A,""))

如果是Excel 365直接回车,旧版本按Ctrl+Shift+Enter作为数组公式输入。然后把D1单元格命名为SelectedGroupsCell(右键单元格→定义名称)。

3. 修改查询引用该单元格

修改Power Query代码,引用D1的内容:

let
    // 从Excel单元格获取选中的组字符串
    SelectedGroupsText = "'" & Excel.CurrentWorkbook(){[Name="SelectedGroupsCell"]}[Content]{0}[Column1] & "'",
    itemPOG="SELECT DISTINCT
         POG.DESC10    AS ""GroupName"",
         POSIT.NAME AS LocationName,
         ITEM.NAME AS ItemName
      
    FROM ADMIN.GROUP POG
    INNER JOIN ADMIN.LOCATION POSIT
    ON POG.DBKEY = POSIT.PARENTKEY
    INNER JOIN ADMIN.INV ITEM
    ON ITEM.DBKEY = POSIT.PARENTKEY

    WHERE POG.DBSTATUS IN (1)
    AND POG.DESC10 IN (" & SelectedGroupsText & ")
    ;
    ",
    Source = Odbc.Query("dsn=CKBPRD1_SVC", itemPOG)
in
    Source

4. 刷新查询

勾选/取消复选框后,刷新查询就能得到对应结果。

三、单选按钮

如果只需要选择单个组,单选按钮是最简单的方案:

1. 添加单选按钮控件

  • 开发工具→插入→单选按钮(窗体控件),给每个组加一个单选按钮
  • 把所有单选按钮的单元格链接设到同一个单元格(比如E1),选中的单选按钮会返回对应的序号(1、2、3...)

2. 提取选中的组名称

在F1单元格输入公式,根据序号获取组名:

=INDEX(A:A,E1)

把F1单元格命名为SelectedGroupCell。

3. 修改查询引用该单元格

修改Power Query代码:

let
    // 获取选中的单个组名称
    SelectedGroup = Excel.CurrentWorkbook(){[Name="SelectedGroupCell"]}[Content]{0}[Column1],
    itemPOG="SELECT DISTINCT
         POG.DESC10    AS ""GroupName"",
         POSIT.NAME AS LocationName,
         ITEM.NAME AS ItemName
      
    FROM ADMIN.GROUP POG
    INNER JOIN ADMIN.LOCATION POSIT
    ON POG.DBKEY = POSIT.PARENTKEY
    INNER JOIN ADMIN.INV ITEM
    ON ITEM.DBKEY = POSIT.PARENTKEY

    WHERE POG.DBSTATUS IN (1)
    AND POG.DESC10 = '" & SelectedGroup & "'
    ;
    ",
    Source = Odbc.Query("dsn=CKBPRD1_SVC", itemPOG)
in
    Source

4. 刷新查询

切换单选按钮选择后,刷新查询即可获取对应组的信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:04:54