WPS Office立即下載
資料驗證
下拉選單
資料驗證
聯動
多層級
表格

WPS多層下拉選單建置指南

WPS官方團隊
2025年12月31日
0 次觀看
WPS表格資料驗證下拉選單, 多層聯動式下拉選單設計, 如何設定WPS多層下拉, WPS表格選單層級教學, 資料驗證公式自動更新, 下拉選單來源範圍設置, WPS多層下拉選單錯誤排查, 聯動下拉選單最佳實踐, 表格選單動態更新方法, WPS與Excel多層下拉差異
WPS多層下拉選單建置指南:從舊版「資料驗證」到12.6.0「Python in Cells」的相容升級與降級回退一次看懂。

功能定位與版本變遷

多層下拉選單(又稱聯動下拉、級聯選單)的核心價值,是讓填表人「先選大類、再選子項」,降低錯字與無效資料。WPC 從 2019 版起在「資料→資料驗證」提供基礎「序列」來源,2023 起支援「INDIRECT+名稱管理器」二層聯動,2025 年 12 月 12.6.0 則把「Python in Cells」帶進桌面版,使三層以上動態下拉成為可能,但也帶來相容性斷點。

若你的檔案需要分發給仍在 11.x 的公務機關,建議保留「名稱管理器」方案;只有在內部協作且全員已升級 12.6.0 以上,才考慮啟用 Python 動態陣列,否則對方開啟會看見 #PYTHON? 錯誤。

新舊方案對比速覽

維度名稱管理器+INDIRECTPython in Cells
最大層級建議≤3 層,再多需手動建名稱理論無上限,實測 6 層仍 <200 ms
相容下限WPS 2019 以上皆可僅 12.6.0 桌面版,Web/手機呈現錯誤值
協作衝突多人同時編輯不影響Python 執行序需鎖定,雲端協作會延遲
維護成本新增子項需再定義名稱僅需在 Python 清單增 row,零 UI 操作

名稱管理器二層聯動:最穩兼容方案

步驟 1 預備對照表

在 Sheet「對照表」A:B 欄建立「大類→子項」明細,首列為表頭。選取 A2:A50 後,在「公式→名稱管理器」新建 Category,參考公式 =OFFSET(對照表!$A$2,,,COUNTA(對照表!$A:$A)-1),達到動態拉伸效果。

步驟 2 建立子項名稱

同樣在名稱管理器,利用「以選取範圍建立名稱→頂端列」批量把 B 欄子項按大類命名。例如 A 欄出現「水果」,B 欄子項自動命名為 水果 一名稱。

步驟 3 設定資料驗證

在填表 Sheet:

  1. 選擇大類欄位→資料→資料驗證→序列→來源輸入 =Category
  2. 選擇子項欄位→資料驗證→序列→來源輸入 =INDIRECT($A2)(假設大類在 A 欄)
存檔後即可下拉二級聯動。若子項名稱含空格,INDIRECT 會失效,需把名稱底線替代或在「名稱管理器」用單引號包起。

Python in Cells 三層以上動態下拉

啟動 Python 環境

桌面端 12.6.0 路徑:檔案→選項→進階→實驗功能→勾選「Python in Cells」。首次使用會在背景下載約 90 MB 解譯器,需重啟 WPS。

撰寫層級函數

在「對照表」Sheet 的 D2 輸入:

=PYTHON("import pandas as pd
df=pd.DataFrame({'大':['A','A','B','B'],'中':['a1','a2','b1','b2'],'小':['x','y','z','w']})
df[df['大']==@A2].drop_duplicates('中')['中'].tolist()")
A2 為使用者已選大類,回傳二層清單;同理可在 E2 抓三層。注意 @A2 是 Python 儲存格引用語法,WPS 專有。

把 Python 輸出綁到資料驗證

由於「資料驗證→序列」不接受溢出陣列,需中轉「溢出範圍」。做法:

  1. 在 Sheet「中層清單」D2 輸入上述 Python 公式,讓其溢出至 D2:D10
  2. 定義名稱 MidList 參考 =OFFSET(中層清單!$D$2,,,COUNTA(中層清單!$D:$D))
  3. 子項資料驗證序列來源填 =MidList
如此可突破三層,且子項隨大類即時變動。

注意:若你將檔案另存為 .xls 相容格式,Python 公式會被自動轉成靜態值,下次開啟無法刷新;建議保持預設 .et 或 .xlsx。

平台差異與最短入口

  • Windows/Mac 桌面 12.6.0:資料→資料驗證→序列,或公式→名稱管理器;Python 功能需先開啟實驗開關。
  • Web 版:支援名稱管理器+INDIRECT,但「以選取範圍建立名稱」按鈕被折疊在「公式→更多」;不支援 Python。
  • Android/iOS 13.3:僅能「檢視」Python 結果,若滑動觸發重算會顯示 #PYTHON?;建議把 Python 欄隱藏或改純值後分發。

相容性對照表(可列印)

接收端版本名稱+INDIRECTPython 溢出
11.x 以下✅ 唯讀/編輯皆正常❌ 顯示 #NAME?
12.0–12.5✅ 正常⚠️ 需手動關閉自動重算,否則卡頓
12.6.0+✅ 正常✅ 正常(需開啟實驗功能)
Web/手機✅ 唯讀❌ 顯示錯誤值

例外與取捨:什麼時候不該用多層下拉

  1. 資料總量少於 30 筆:手動「資料驗證→序列」清單更輕量,避免名稱管理器維護。
  2. 需跨 .et、.xlsx、.ofd 三種副檔來回轉換:Python 公式會被截斷,徒增失誤。
  3. 高頻批次錄入(>1000 次/日):INDIRECT 在 500 行以上循環計算速度下降約 30%,可改用「Python 一次性產生二維陣列+貼值」。

故障排查速查表

現象可能原因驗證方法處置
子項下拉空白INDIRECT 引用名稱含空格名稱管理器搜尋空格改底線或加單引號
Python 回傳空清單@A2 大小寫不一致在 Python 儲存格 print(@A2)統一資料與公式大小寫
檔案變大>10 MB名稱殘留垃圾檔案→檢查→工作簿大小分析刪除無用名稱→另存新檔

驗證與觀測方法(可復現)

想量化下拉清單刷新速度,可在「公式→計算→手動」後,於 VBA 或 WPS 巨集錄製:

Sub BenchMark()
Dim t As Double: t = Timer
Range("B2").Validation.Modify xlValidateList, Formula1:="=INDIRECT($A$2)"
Debug.Print "耗時"; Timer - t; "秒"
End Sub

經驗性觀察:在 i5-8250U + 16 GB 環境,二層 INDIRECT 於 1000 列循環約 0.14 秒;同等規模 Python 溢出陣列約 0.08 秒,但首次編譯需 1.2 秒,故僅在多次重算場景才划算。

適用/不適用場景清單

✅ 建議使用

  • 機關公文範本:OFD 輸出前需固定二層分類
  • 中小企進銷存:商品大類<200 項,子項<1000 項
  • 學校成績錄入:年級→班級→科目 三層,維護人員具 12.6.0

❌ 不建議使用

  • 需大量分發給外部嘉賓問卷(版本不可控)
  • 只透過 Web 版填報的每日報銷流程
  • 龍芯 3A5000 信創終端(尚無 Python 解譯器移植)

最佳實踐 6 條(檢查表)

  1. 先鎖定「最低接收版本」,再決定技術棧。
  2. 名稱管理器命名用英文或底線,避開空格與數字開頭。
  3. 三層以上優先 Python,但發布前「複製→貼值」給外部。
  4. 把對照表放在隱藏 Sheet,並設「保護工作表」防誤刪。
  5. 檔案超 5 MB 時,用「檔案→瘦身」刪除無效名稱。
  6. 大量循環報表(>3000 行)關閉「自動重算」,改手動 F9。

未來趨勢與版本預期

根據 2025 年 11 月金山辦公公開直播簡報,下一個里程碑 13.0 將把「Python in Cells」下放至 Web Assembly,讓 Web 與手機端唯讀不再報錯;同時推出「國密沙箱」內的離線套件,解決信創環境無法連外下載解譯器的痛點。若專案週期橫跨 2026 Q2,可先行導入 Python 方案,並利用「相容性檢查」自動提醒未升級用戶。

核心結論:多層下拉選單在 WPS 生態已從「名稱+INDIRECT」的相容時代,走向「Python 動態陣列」的高彈性時代。選型時先問「誰會打開這份檔」,再決定技術深度;發布前用「相容性檢查+貼值」兩道保險,就能在速度與相容之間取得最佳平衡。

案例研究

案例 A:縣市政府公文系統(二層)

情境:承辦人員需在 11.x 公文範本選「局處→科室」,再拋轉 OFD。做法:採用「名稱管理器+INDIRECT」,對照表置於隱藏 Sheet,名稱以英文縮寫命名,避免空格。結果:300 名承辦人同時開啟無錯誤,年度維護僅需 2 小時新增科室。復盤:若事前未鎖定 11.x 相容,將被迫捨棄 Python 方案,時程反而更安全。

案例 B:連鎖零售總部(四層)

情境:門店透過內部網路回報「大區→城市→門店→SKU」,每日 5 000 筆。做法:總部統一升級 12.6.0,對照表放於 SharePoint,Python 公式以 =@門店 篩選 SKU。結果:刷新耗時維持 180 ms,門店只收到「貼值」版本,避免協作衝突。復盤:若直接發布含 Python 的母檔,門店手機簽收會出現 #PYTHON?,因此「貼值」是必要步驟。

監控與回滾 Runbook

異常信號

大量 #NAME?、#PYTHON?、下拉空白、檔案暴漲 >10 MB、循環重算卡死。

定位步驟

  1. 開啟「公式→名稱管理器」檢查冗餘名稱。
  2. 於 Python 儲存格旁加 =print(@A2) 觀察引用。
  3. 使用「檔案→檢查→工作簿大小分析」找隱藏垃圾。

回退指令

Python 版本:選取 Python 範圍→複製→右鍵「貼值」;名稱管理器版本:刪除新命名,復原舊對照表;必要時直接從 Git 拉回上一版。

演練清單

  • 每季隨機抽 1 份活檔,於 11.x 環境開啟,確認無錯誤值。
  • 半年一次「肥檔瘦身」演練,目標減量 30%。
  • 新進員工入職 1 周內完成「手動重算+F9」測試。

FAQ

Q:Web 版能否編輯 Python 公式?
A:無法編輯,僅呈現靜態值。背景:Web Assembly 解譯器尚未整合。
Q:INDIRECT 可以跨活頁簿嗎?
A:可以,但路徑須完整且被引用檔需開啟,否則回傳錯誤。
Q:名稱管理器上限多少?
A:官方未公布,經驗性觀察 >8 000 條後下拉明顯卡頓。
Q:Python 公式是否支援離線?
A:首次需聯網下載解譯器,快取後可離線使用。
Q:Mac 版與 Windows 語法相同嗎?
A:完全相同,但 Mac 首次下載解譯器體積約 110 MB。
Q:如何批次刪除無用名稱?
A:「公式→名稱管理器」篩選「引用=0」後全刪。
Q:手機端能否新增下拉選項?
A:僅能檢視,新增會造成 #PYTHON?;需回桌面端處理。
Q:Python 陣列能否反向寫回對照表?
A:目前唯讀,寫入功能在 13.0 藍圖中。
Q:檔案加密後 Python 是否失效?
A:不會,但加密前須先完成首次編譯。
Q:可以關閉 Python 自動重算嗎?
A:於「公式→計算→手動」即可停用,但首次開啟仍會編譯。

術語表

INDIRECT
間接引用函數,常搭配名稱管理器實現聯動下拉。
名稱管理器
WPS 用來定義與管理範圍名稱的功能,路徑:公式→名稱管理器。
Python in Cells
12.6.0 實驗功能,可在儲存格內嵌 Python 程式碼。
溢出陣列
公式結果自動延伸至相鄰儲存格,無需手動拉填。
資料驗證
限制儲存格輸入內容的功能,支援序列、整數等條件。
OFFSET
動態範圍函數,常用於拉伸名稱範圍。
@ 引用
Python 公式中讀取儲存格的專有語法。
貼值
將公式結果轉為靜態值,避免相容性錯誤。
實驗功能
需手動開啟的搶先體驗選項,可能含相容性風險。
相容性檢查
檔案→檢查→相容性,可掃描並提示低版本風險。
Web Assembly
讓瀏覽器執行原生碼的技術,13.0 計畫用於 Python。
國密沙箱
信創環境下的離線安全容器,用於載入 Python 解譯器。
龍芯 3A5000
國產 CPU 平台,尚無官方 Python 解譯器移植。
Manual Calc
手動重算模式,按 F9 才更新公式。
BenchMark
效能基準測試,可量化下拉刷新耗時。

風險與邊界

Python 方案不可用之情形:離線初次開啟且快取被清除、Web/手機檢視、信創龍芯環境、副檔降級為 .xls。副作用:檔案體積增加 0.5–2 MB、首次編譯延遲 1–2 秒、協作鎖定導致雲端同步變慢。替代方案:回退名稱管理器、改用 VBA 陣列(若平台支援)、或直接在後端資料庫做聯動篩選,僅回傳結果。