用 SpreadJS 数据验证实现省市区三级联动
地址、商品分类、组织架构、费用科目都有一个共同特点下一级选项取决于上一级选择。用户选了省份城市列表就不应该再出现其他省的城市选了城市区域也应该随之收窄。三级联动这个 demo 用 SpreadJS 的数据验证、自定义名称和INDIRECT函数组合在普通单元格里实现省份、城市、区域三级下拉。为什么这个细节重要级联下拉解决的是数据质量问题。让用户自由输入省市区后续清洗会很痛苦让用户从完整城市列表里找也不够友好。产品经理需要的是更低的填错概率开发者需要的是一套能维护的数据源结构业务用户需要的是“我选完上一级下一级自然变对”。这个 demo 的优势是它没有写复杂的弹窗控件而是沿用电子表格里的数据验证能力。用户仍然在单元格里选择表格仍然可以复制、粘贴、保存联动规则则由公式引用完成。这也让它更适合嵌入已有模板。很多企业表单已经围绕行列设计好了权限、导入和导出流程级联下拉如果仍然发生在单元格内部就不会破坏原来的工作方式。SpreadJS 的实现思路代码创建了一个名为“级联数据源”的工作表把树形地址数据展开到不同列。第一列存所有省份每个省份对应一列城市每个“省份城市”再对应一列区域。关键是用sheet.addCustomName给这些区域命名并用GC.Spread.Sheets.CalcEngine.rangesToFormula生成绝对引用。sourceSheet.name(级联数据源); ​ let prRange new GC.Spread.Sheets.Range(1, 0, source.length, 1); sourceSheet.addCustomName( 省份, 级联数据源! GC.Spread.Sheets.CalcEngine.rangesToFormula( [prRange], 0, 0, GC.Spread.Sheets.CalcEngine.RangeReferenceRelative.allAbsolute, false ) );主表三列分别是省份、城市、区域。省份列直接引用名称“省份”城市列使用INDIRECT拼出“级联数据源! 当前行 A 列值”区域列再拼接 A 列和 B 列找到对应区域列表。let provinceList GC.Spread.Sheets.DataValidation.createFormulaListValidator(级联数据源!省份); sheet.setDataValidator(1, 0, 10, 1, provinceList); ​ let cityList GC.Spread.Sheets.DataValidation.createFormulaListValidator( INDIRECT(级联数据源!$A2) ); sheet.setDataValidator(1, 1, 10, 1, cityList);可以扩展到哪些场景省市区只是最容易理解的例子。同样方法可以用于商品大类、中类、小类部门、岗位、人员费用一级科目、二级科目、明细科目设备类型、型号、点位。只要层级清晰、选项数量适中这种基于数据源表和名称的方案就比较好维护。需要注意自定义名称要避免冲突。demo 用“省份城市”作为区域名称如果业务里存在重名城市就要引入编码或更稳定的 key。数据量特别大时也可以考虑自定义 CellType 或服务端查询式下拉。实际交付时还建议监听上级单元格变化并清空下级旧值。否则用户先选了“广东省-广州市”再把省份改成“浙江省”城市列可能还保留旧城市形成看似合法但业务不一致的组合。如果要支持批量粘贴也要在粘贴后重新校验三列组合避免绕过下拉选择产生脏数据。给开发者的关键词SpreadJS、DataValidation、createFormulaListValidator、addCustomName、INDIRECT、GC.Spread.Sheets.Range、rangesToFormula、三级联动、省市区下拉、JavaScript 电子表格控件。小结三级联动展示了 SpreadJS 里很“电子表格原生”的交互方式用数据验证限制输入用自定义名称管理候选集用公式把上下级选项连起来。它让表格录入更稳也让层级数据维护留在工作簿结构里。

相关新闻

BI 看板上的数字为什么可能是错的?

BI 看板上的数字为什么可能是错的?

摘要:BI 看板上的数字并不是天然可靠的结果。数据从业务系统进入数据源,再经过同步、转换、关联、计算和权限过滤,任何一个环节出现问题,都可能让最终指标失真。本文从常见数据质量问题出发,分析错误如何传导到 BI 结论…

2026/10/15 3:18:38 阅读更多 →
ArduPilot 完整指南:自动驾驶飞控如何同时驾驭飞机、无人机与水下机器人

ArduPilot 完整指南:自动驾驶飞控如何同时驾驭飞机、无人机与水下机器人

ArduPilot 完整指南:自动驾驶飞控如何同时驾驭飞机、无人机与水下机器人 【免费下载链接】ardupilot ArduPlane, ArduCopter, ArduRover, ArduSub source 项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot ArduPilot 是开源自动驾驶飞控软件&…

2026/10/15 3:18:38 阅读更多 →
QGroundControl 用户界面设计模式解析:QML 页面与 C++ Controller 的 MVC 改良变体

QGroundControl 用户界面设计模式解析:QML 页面与 C++ Controller 的 MVC 改良变体

无人机智能硬件 【免费下载链接】qgroundcontrol Cross-platform ground control station for drones (Android, iOS, Mac OS, Linux, Windows) 项目地址: https://gitcode.com/gh_mirrors/qg/qgroundcontrol 点击查看 免费下载 QGroundControl(QGC&…

2026/10/15 3:18:38 阅读更多 →

最新新闻

2026大厂AI薪资大起底:普通研发卷到40万,Agent开发狂撒80万年薪?

2026大厂AI薪资大起底:普通研发卷到40万,Agent开发狂撒80万年薪?

2026年大厂AI薪资揭秘:普通研发岗薪资锚定40万左右,但竞争激烈;AI Agent开发岗(50-80K15薪)对标SSP,高薪且门槛低,企业抢“应用落地”人才;顶级AI科学家包揽80-220万年薪。求职建议分…

2026/10/15 4:00:45 阅读更多 →
婚恋系统的匹配为什么不能全交给算法:机筛、红娘终审与反馈回流

婚恋系统的匹配为什么不能全交给算法:机筛、红娘终审与反馈回流

十月初有篇报道被同行转了一圈:中国消费者报的观点是,面对个体差异极强的婚恋市场,单纯的算法匹配难以兼顾性格适配、相处模式这些软性维度,"AI 初筛 真人红娘终审"的双轨模式正在成为行业转型样本。做婚恋系统的工程师…

2026/10/15 4:00:45 阅读更多 →
从零入门计算机网络系列(五):UDP套接字编程实战——从核心API到客户端与服务器通信

从零入门计算机网络系列(五):UDP套接字编程实战——从核心API到客户端与服务器通信

本文从UDP Socket的基础出发,一路往下走。 先把socket、sockaddr_in这些最基础的概念讲清楚,再把字节序、recvfrom/sendto这对收发搭档逐一拆开。接着看服务端怎么bind,客户端为什么是隐式bind,INADDR_ANY又到底意味着什么。最后…

2026/10/15 4:00:45 阅读更多 →
不儿,豆包工作竟成了Codex、CC的第二个家?!

不儿,豆包工作竟成了Codex、CC的第二个家?!

大家好,我是常年在多个Agent之间反复横跳的袋鼠帝。我电脑里现在同时装着Codex、Claude Code、豆包工作等众多Agent,哪个顺手用哪个。哪个有羊毛薅哪个。但麻烦的是,每换一个Agent,我是谁、喜欢什么样的回答、上回任务做到哪了&am…

2026/10/15 4:00:45 阅读更多 →
Spring AOP 原理详解:从动态代理到切面注解的源码级剖析

Spring AOP 原理详解:从动态代理到切面注解的源码级剖析

~~ Talk is cheap. Show me the code. ~~本文基于 Spring Framework 5.x / Spring Boot 2.x 版本,讲解 Spring AOP 的核心机制与实现原理。一、引言AOP(Aspect-Oriented Programming,面向切面编程)是 Spring 框架的核心能力之一&a…

2026/10/15 4:00:45 阅读更多 →
Halcon 定位技术(Positioning)详解与算子说明

Halcon 定位技术(Positioning)详解与算子说明

Halcon 定位技术(Positioning)详解与算子说明 参考来源:Halcon 17.12 Operator Reference — Matching、2D Metrology、XLD Contours 章节 适用版本:Halcon 17.12(主基准)/ 20.11 / 22.11 / 24.05 官方示例路径:Applications/Matching/、Applications/Measuring-2D/、ex…

2026/10/15 3:59:45 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →