如果你需要做一套“在线文档能力”第一反应可能是用腾讯文档、飞书文档组件或者自己从零撸一个Excel的Web版。但最近两年开源圈里冒出了一个很值得关注的项目Univer。它不是又一个demo玩具而是一个真正能把“Excel级在线表格”塞进你自己产品里的引擎。在开始动笔之前我先说明白它是什么、能做什么、适合谁用然后从原理到实操给你拆一遍包括我实际接项目时踩过的坑和排查经验。Univer的定位是“跨端的开源文档与数据协同解决方案”通俗讲就是一套专门给Web页面用的在线办公组件库里最核心也最成熟的是它的在线表格能力。它能做到嵌入你的网站或App后用户不用装任何Office软件打开浏览器就能看到一张完整的、带公式、带图表、带数据透视的表格并且支持多人同时在线编辑。如果你的产品需要一个Excel编辑器但不想被大厂的在线表格服务锁定Univer是目前最值得关注的方案之一。它适合谁适合做SaaS产品、低代码平台、企业内部系统、数据分析工具、教育产品的研发团队也适合那些想在网页里提供“导入Excel、在线编辑、导出Excel”能力的独立开发者。下面我从团队需求、架构原理、实操接入、问题排查和选型心得这几个角度把Univer讲透。1. Univer是什么一个能嵌入你页面的在线办公套件1.1 为什么会出现Univer这类项目如果你在企业里做过业务系统大概率遇到过这种需求运营人员习惯用Excel管理数据但公司内部系统只提供普通表单和表格控件用户想粘贴一段带公式的Excel内容到系统里结果格式全丢、公式变死值领导要求“像腾讯文档那样大家同时改一张表”但团队既没有办公SaaS的预算又不能把业务数据放到第三方平台。这就是Univer要解决的核心问题把一套完整在线文档能力以组件形式植入你的服务而不是让你把用户引导去另一个软件。它和只做展示的表格库最大的区别是Univer从底层把自己当成一个“编辑器”来做而不是一个“表格查看器”。Excel能做的常规操作它都有对应的数据结构、操作命令、公式引擎、渲染管线。解决这个问题有多难很多人以为在线表格就是HTML表格加一个contenteditable真做起来才知道。阶梯状的行列结构、百万行数据下的平滑滚动、公式的跨工作表引用和重算、复制粘贴时保留格式、撤销重做、多人冲突合并这些都不是靠DOM堆性能能搞定的。Univer选择了一条很重的技术路线底层全部用Canvas自绘数据层完全自己建模甚至公式引擎、协同协议也是独立实现的。这也就是为什么它敢把自己叫“下一代表格引擎”。1.2 从Excel到Univer生态位与竞争对手分析做选型时大家通常会对比Luckysheet、Handsontable、x-spreadsheet这些开源表格库或者对比直接用腾讯文档、飞书文档这类商业组件。我按自己的实际使用体验简单对比一下Univer的生态位。方案上手难度编辑能力协同能力二次开发典型适用场景Handsontable低中偏向数据录入需要自己接中后台管理系统的数据编辑Luckysheet低中公式支持有限社区版基本没有中需要在网页里展示/编辑Excel商业在线文档组件低高平台自带低受平台限制不介意数据放到第三方平台Univer中高自研公式引擎开源方案支持高全链路开放要深度集成在线文档能力的产品Univer和其他开源库最大的区别不只是界面上更“像Excel”而是它的代码结构是奔着长期演进去的。命令模式、插件解耦、数据层和UI层分离、协同协议独立成包。这些设计在刚接触时觉得繁琐等你要在表格里加一个自定义工具栏按钮、实现一个私有格式或者要对接自己后端的鉴权系统时才体会到这个架构多值钱。2. 整体架构拆解为什么Univer敢叫“下一代表格引擎”2.1 渲染层Canvas分层与“像游戏一样画表格”Univer没有用DOM去渲染单元格而是用Canvas绘制整个工作表区域。第一次看到Univer渲染引擎时很多人会想到游戏引擎的分层渲染思路它把一个表格场景拆成多个layer比如单元格背景层、边框层、文本层、选区层、滚动层渲染时按层级合成而不是每次操作都推倒重画。这样做带来的直接好处是性能。在DOM实现里数据量一旦上万节点数会迅速拖垮页面用Canvas的话不管数据是1万行还是10万行渲染的画布节点本身只有那么几个耗性能的只是绘制动作本身。配合Canvas的离屏渲染、脏矩形标记和高效的重绘调度Univer在长表格滚动、批量填充、大面积复制粘贴时能做到肉眼比较流畅的体验。图层分离还带来了一个对开发者非常友好的结果你可以很容易地定制表格的皮肤、强调选区的颜色、甚至自己画一个浮动元素。我在实际项目中就通过Univer的渲染层接口把表格里的关键单元格用自定义高亮绘制出来在做数据校验场景时非常管用。这个能力是纯DOM表格库很难想象的。当然Canvas也不是银弹它最大的问题是文本排版和可访问性。Univer对此有自己的一套文字测量和排版方案用Canvas来做精确的字体度量同时保留了对ARIA的兼容处理。这项工程复杂度极高也是为什么愿意做这件事的团队这么少。2.2 数据层与Command机制一切用户操作都变成可回放的消息如果说渲染层决定了Univer的“手感”那么数据层和命令机制决定了Univer的“灵魂”。Univer对用户操作的建模非常像Redux用户点一个按钮、输入一个字符、拖动一个选区都会生成一个Command命令。命令包含了操作类型、范围、参数所有对数据的修改都通过Command执行而不是直接修改内存状态。这种模式有什么好处第一撤销重做变成了一件很自然的事撤销就是把命令队列倒着滚一遍。第二协同编辑变得可管理每个用户的每个操作都能被序列化成消息通过WebSocket广播给其他人其他用户只需要在本地执行同一条命令即可保持状态一致。第三审计和跟踪变得容易你想知道谁在什么时候改了什么单元格只需要记录命令日志甚至可以用命令流完整重建一个工作表的状态。Univer对协同的实现并不是简单地在多人之间同步最终数据而是同步“操作流”。它从传统的OT协议转向了基于CRDT思想的协同算法配合权威协同服务端的调度能比较好地处理多人同时编辑同一区域可能产生的冲突。这套东西的好处是离线编辑、弱网环境下的体验更好但同时它也提高了接入门槛你需要有协同服务端配合而不仅仅是把前端组件摆上去。2.3 插件体系与SDK和Excel/WPS的最大差别Excel和WPS虽然开放了COM加载项、插件API但本质上你还是在一个桌面软件里打转。Univer更像一个文档能力平台官方通过SDK把能力开放给开发者同时整个Univer本身就建立在插件机制上。它的插件体系很直白官方能力由官方插件提供比如公式、图表、数据透视、批注、条件格式、协同等你要扩展能力就注册自己的插件。插件可以扩展工具栏、右键菜单、快捷键、单元格类型、公式函数甚至可以替换默认的数据源。这种思路让Univer很适合做垂直场景的产品集成。举个例子我在一个制造业客户的项目里需要在表格里加一个“物料二维码”的单元格类型用户点这个单元格右侧面板直接显示物料的工艺流程。在Univer里我只需要实现一个新的单元格渲染器和侧边栏组件注册到插件里就能无缝出现在编辑器的工具栏和单元格右键菜单里。换成任何一家商业在线表格服务这几乎是不可能完成的需求。3. 实操把Univer表格搬进你的页面3.1 环境准备与依赖安装从零开始接入Univer需要先决定你用哪种构建方式。Univer官方推荐Vite TypeScript但其实你用React、Vue甚至原生HTML都能集成因为Univer本体是框架无关的。我这里以一个Vite TypeScript的项目为例因为这种组合在现在的国内前端团队里最常见排查问题也相对容易。安装Univer你要有一点心理准备它不像引入一个依赖那么简单而是引入一组包。按照官方推荐的preset方式最快的是用预置包把整个表格能力一次性装好。在你的项目根目录执行pnpm add univerjs/preset-sheets这个包会把核心引擎、Canvas渲染、公式引擎、数字格式、协同协议需要的基础包都带进来。如果你只是想先跑起来看效果这个包就够了等后面做按需裁剪时再去拆细粒度包。这里必须强调一个经验Univer包非常多一定要保证所有“univerjs/”开头的依赖版本号完全一致否则很可能出现插件注册时报类型错误或运行时完全没反应的情况。如果是用npm安装也可以用npm install。装完之后在入口文件里引入基础样式。Univer的样式分两层一套是design系统的UI样式一套是各业务插件的样式。实际接入时最稳妥的是在入口文件里把css一起引进来import univerjs/design/lib/index.css; import univerjs/preset-sheets/lib/styles.css;很多新手上来只装JS包忘了引CSS结果页面一片空白或者工具栏错位。这个方法不算复杂但没有官方文档提醒的话却很容易被忽略。3.2 初始化一张在线表格依赖装好、样式引入之后Univer的初始化就是一个对象实例化加一个创建表格面的过程。我写一个最小可运行示例import { Univer, UniverSheetsPlugin, UniverFormulaEnginePlugin, UniverUIPlugin } from univerjs/preset-sheets; import univerjs/design/lib/index.css; import univerjs/preset-sheets/lib/styles.css; const univer new Univer({ locale: zhCN, theme: default, plugins: [ UniverSheetsPlugin(), UniverFormulaEnginePlugin(), UniverUIPlugin(), ], }); univer.createUnit(/sheet, { id: mySheet, name: 示例表格 });这里有几个关键的初始化细节。插件数组的顺序不要乱调整先注册核心Sheet插件再注册公式最后注册UI插件。虽然Univer内部做了插件间的依赖管理很多情况下顺序颠倒也不会报错但一旦出现“工具栏不见了、功能区加载失败”这种问题先把插件顺序恢复到官方顺序再排查能省掉很多时间。createUnit传入的第一个参数是单元类型Univer内部按文档类型区分表格这一类单元。第二个参数里的id是这张表的唯一标识。在单页应用里如果你希望刷新之后还能恢复之前的编辑状态或者要对接保存机制这个id就是关联后端存储结构的关键。如果你用的是React项目管理还需要在组件销毁时正确释放Univer实例。官方提供了对应的生命周期方法不要图省事直接在组件卸载时什么都不做。否则多次进入页面后浏览器内存会被多个表格实例塞满页面越来越卡。正确释放形式如下univer.dispose();3.3 常用配置项做完这一步才像真正的产品把一张空白表格渲染出来只是万里长征第一步。真实产品里你肯定需要控制哪些功能开放给用户、Excel文件怎么导入导出、界面上显示什么。Univer在这方面的配置足够灵活但也会让习惯了“一个init参数解决一切”的人头疼。菜单和工具栏的配置一般在你创建UI插件时传入。比如我只想保留字体、字号、加粗、颜色、合并单元格、公式栏不想开放数据透视和图表就可以在配置中把不需要的菜单项裁剪掉。这个配置项的结构是树状的官方文档里有很长的清单。我个人的习惯是先通篇保留看用户反馈再慢慢裁剪而不是一上来就追求极简。导入导出Excel文件Univer采用的是“文件转换插件”机制。你要在最初初始化插件数组时把导入导出插件也注册进去。以xlsx导入为例import { UniverImportXlsxPlugin } from univerjs/sheets-import-xlsx; plugins: [ UniverSheetsPlugin(), UniverFormulaEnginePlugin(), UniverUIPlugin(), UniverImportXlsxPlugin() ]注册完成后UI里会自然多出“打开/导入”的入口。如果你是做后台系统集成希望用户点击自己业务里的“上传Excel”按钮来导入数据就更推荐用Univer提供的核心API直接读取File对象并把数据负载进当前工作表而不是走到工具栏的导入流程。Univer允许你在自己的按钮事件里调用导入服务把返回的数据结构手动写入一个工作簿实例。这样业务逻辑完全在你手里界面表现也更统一。3.4 数据接入与协同从演示走向生产当你做完上面几步Univer已经像模像样了但它只是一张本地表格。真正要投入生产至少还要解决两件事把数据存到你的后端以及让多人能同时编辑。数据接入方面Univer有非常清晰的数据模型。一个完整的表格文件在Univer内部本质上是一个可序列化的结构化数据树。你完全可以把用户编辑后的数据序列化存成JSON放进数据库下次打开时再反序列化回来。这对很多内部系统已经足够了。如果你的系统必须导出成xlsx也只要调用导出插件把当前工作簿转成Blob格式再交给前端下载或上传到对象存储。如果要做多人协同Univer官方提供了一套完整的服务端解决方案它包含了一个基于WebSocket的实时协同服务以及一套文档权限管理服务。官方也提供了Docker部署方式适合自建。部署协同服务后前端配置里要指定连接协同服务的地址Univer会自动在打开单元时建立实时连接并把所有Command通过协同通道广播。这里我要特别说一句不要刚启动就同时上协同。协同编辑对业务场景的适配要求很高比如怎么分配文档权限、怎么处理离线文档、怎么保存每个人的草稿版本。在Univer里协同开关一旦打开你就需要认真设计和测试它的冲突解决策略。如果你只是需要一个“多人顺序编辑、后写覆盖前写”的能力其实可以不用Univer的协同服务只要自己在保存接口上加锁或版本号校验就够了成本低很多。4. 常见问题与排查技巧实录4.1 版本地狱主包与子包版本不一致我在实际项目里踩到的第一个坑就是版本不一致。Univer处于快速迭代期版本号几乎每个月都在变。如果你用包管理器一次性安装了所有依赖很可能会遇到核心包升到0.3.x但某个子包依赖的还是0.2.x。安装时的依赖树里并不会有红色报错但运行时会莫名奇妙地报一些类型错误、缺少方法、甚至页面白屏。排查的时候不要急着一层层看代码先执行一条命令把所有Univer相关包的真实版本列出来npm ls univerjs/core如果发现版本参差不齐统一改成相同版本号再重新install一次。我建议直接锁版本在package.json里把“univerjs/”开头的所有依赖配置成完全相同的版本。这是组内协作时最省心的做法否则不同同事安装依赖时间不同都可能因为版本漂移产生不一致的行为。4.2 容器高度“塌陷”和画布不显示第一次跑通Univer时很多人会发现页面里只有一个小小的工具栏或者干脆一片空白。问题多半出在Univer外部容器的尺寸上。Univer渲染引擎默认会去测量容器的宽高如果父级容器高度为0它计算出来的就是一张0像素高的画布。这种情况下你在控制台不会看到明显的JavaScript报错只有元素尺寸异常。解决方法是给容器一个明确的高度常见做法是#app { height: 100vh; }如果你的Univer是嵌在一个弹窗里那就必须在弹窗完全显示之后再创建Univer实例否则弹窗动画里容器尺寸还没就绪很容易计算出错误尺寸。我一般会等弹窗的动画结束或者用requestAnimationFrame包一层再初始化。另外如果用户在浏览器尺寸改变后表格不跟着自适应你也需要监听resize事件调用Univer的刷新布局方法。4.3 协同里的数据不一致或丢失开启协同后遇到比较多的现象是保存下来的数据偶尔缺少某些单元格内容或者终端用户反馈“我明明填了数字刷新后不见了”。这通常不是Univer本身丢了数据而是你对自己业务的数据流理解不够清晰。Univer协同的数据一致性基于命令流命令流靠网络传输。一旦网络断开或者前端把命令发出去后立即关闭了页面服务端可能没来得及收到命令。所以生产级接入时你的保存方案不能仅仅依赖实时协同的最终一致还要考虑落盘保存的时机。我的推荐做法是两层结构协同服务负责多人状态同步你的业务后端定期从Univer服务端拉取当前文档快照存库。快照频率通常是每10到30秒一次或者检测到文档空闲时再存一次。排查协同问题可以先在单个浏览器标签里做一份“伪协同”测试同时打开一个表格并做修改看数据是否异常。确认单机正常后再引入第二个客户端一步步缩小问题的范围。协同问题大多出在配置而不是数据上不要轻易怀疑Univer算错数据先把环境变量、版本、网络连接检查一遍。4.4 大数据量下的公式重算与性能优化Univer虽然底层是Canvas渲染但公式引擎在工作表数据量很大时仍然可能成为瓶颈。尤其是VLOOKUP、SUMIF这类需要跨单元格引用的函数在几万行数据里如果引用范围很大每一次编辑触发重算都会明显卡顿。Univer提供了公式计算链的机制默认情况下它只重算依赖变更区域的那个公式链而不是全表所有公式。如果你发现性能不佳先检查是不是自己在代码里频繁设置了单元格值导致一次操作触发了多次重算。正确的做法是批量提交变更把一次业务操作里的所有单元格修改收集起来一次性执行写入这样公式引擎只需要重算一次。对于确实需要处理超大数据的用户还有一个思路是把高频计算放到后端或者用Web Worker。Univer公式引擎支持在Worker中运行配置好之后可以把计算压力从主线程卸掉。不过这个配置对有些包版本要求比较高如果只是中等规模数据建议先优化写入方式暂时不要上Worker避免复杂度失控。4.5 常见问题速查表现象可能原因排查建议页面空白 / 画布不显示容器高度为0或依赖CSS未引入检查容器尺寸检查是否引入design和preset样式工具栏缺失 / 插件不生效插件注册不完整或版本不一致检查插件数组统一univerjs包版本导入xlsx后格式错乱缺少对应导入插件或文件特殊格式注册import插件用标准文件测试公式计算结果不对公式引擎未注册或数据依赖不含公式确保已注册Formula插件验证公式引用范围协同状态不同步协同服务地址错误或命令流丢失查看网络消息检查连接状态确认保存策略弹窗里初始化偶现空白容器尺寸未就绪时创建实例等弹窗完全打开后初始化实例页面内存占用持续上升多次创建Univer实例未释放在组件销毁时调用dispose方法5. 谁适合上Univer以及我的一些踩坑心得5.1 适合的场景与不适合硬上的场景当有人问我“Univer能不能直接拿来用”我的回答往往要看他的具体项目形态。如果只是一个内部管理后台需要一个给运营录入数据、能够支持复杂公式的表格组件Univer绝对值得上甚至可以说当前阶段开源社区里没有比它更合适的选择。它的公式能力、转Excel能力、Canvas性能都不是普通表格库能比的。如果你的产品核心就是在线文档比如你要做一个垂直行业的Notion、一套带表格的企业知识库Univer也几乎是最优选。它的插件机制和文化能让你以较低成本把表格能力跟自己的业务深度融合。但如果你要的是在一个App里快速展示一张表格并没有那么多编辑需求那Univer反而是杀鸡用牛刀。它的包体体积比纯表格展示库大不少初始化逻辑也更重这种情况下用一个几百KB的轻量组件更合适。还有一点要注意Univer当前最成熟的是sheets能力文档、幻灯片等模块还相对年轻如果你需要的是一个能编辑Word的在线组件目前还是更建议去评估成熟商业组件。5.2 团队接入时需要的工程化准备Univer上手不难但要让一个团队顺畅使用有几个工程化问题要提前想清楚。第一模板工程化。Univer的初始化配置有很多可以复用的部分我建议团队里先封装一个有统一主题、统一权限校验、统一保存逻辑的React/Vue组件而不是每个页面从零new一个Univer实例。这个组件把你的业务需求固化成一套内部API开发人员只需要传递数据源和配置项就能快速产出页面。第二文档与知识沉淀。Univer还在快速迭代网上资料偏少遇到问题直接查官方GitHub和Demo比搜普通论坛效率高得多。建议团队成员把踩坑记录维护到内部Wiki形成团队的“Univer避坑手册”不然每来一个新人就要重新踩一轮同样的版本坑和容器高度坑。第三CI和依赖检查。在CI流水线里加一个依赖检查确保package-lock里univerjs包都保持版本一致。这种检查看似次要但实际能在第一时间把版本漂移问题暴露在测试阶段而不是等到上了生产环境才在用户那里炸出来。5.3 我的推荐路径与一个实用小技巧如果让我给一个完全没接触过Univer的团队规划接入路径我的建议是分三步走。第一步先两周时间做一个技术验证。用官方Demo跑起一张表格试着导入一份真实业务中常见的Excel文件感受一下公式和编辑是否满足要求。第二步再做一个小型试点。把你现有的一个后台页面中的表格控件替换成Univer跑一个迭代周期。这一步主要观察性能和用户反馈。第三步才启动整体推广。在试点没问题的基础上再把协同能力加上以及逐步沉淀组件模板。最后分享一个小技巧接手Univer项目后很多人会被它一大堆官方包弄得很慌但请记住一句话——当你遇到什么奇怪问题时先把所有univerjs包升级到最新版并且统一版本号大概50%的问题会直接消失。Univer目前的迭代速度非常快每天都有大量bug被修复和优化。与其花两天读源码去定位一个已经被修复的问题不如先升级试试这是我在几个项目里最划算的经验。剩下的问题再根据日志和社区Issue去排查也不迟。
企业数字化 ERP 产品动态
相关推荐
hindsight复盘法:从后见之明到事前判断力 hindsight 这个词,我在英文语境里见得最多的一句话是“Hindsight is 20/20”,翻译过来就是“事后再看,一切都清清楚楚”。以前我总把它当成一句万能的马后炮托词,直到有一次,我自己把一个线上问题在三个月后“一眼看穿… · 2026/11/3 15:35:14
Windows 11上WSL2与Docker容器化开发环境配置指南 1. 环境准备与WSL2配置在Windows 11上搭建完整的容器化开发环境,WSL2是最佳选择。相比传统虚拟机方案,WSL2提供了接近原生Linux的性能表现,同时保持了与Windows系统的深度集成。我实际测试发现,在相同硬件配置下,WSL2的… · 2026/11/3 15:35:14
先进成像与机器视觉:AIMV 2026技术风向与工程落地实践 2026年先进成像与机器视觉国际学术会议(AIMV 2026)这个标题,我第一眼看到的时候就特别想聊一聊。做机器视觉这行久了,你会发现圈内真正值得跑的会其实就那么几个,而AIMV这种把“先进成像”和“机器视觉”放在一起的会议… · 2026/11/3 16:15:33
大模型时代,国产AI芯片的全栈协同之战 大模型规模还在膨胀,国内AI芯片的竞争已经不止于算力指标,而是一场围绕全栈协同的系统工程。这两年我参与了不少国产芯片落地项目,一个感受很强烈:单看峰值性能,很多芯片已经追得很近,但真要跑一个大模型的… · 2026/11/3 16:15:33
中文大模型评测基线:C-EVAL 多级多学科评估实战指南 简介:C-EVAL 是面向中文语境下基础模型评测的多层级、跨学科评估套件,适合自然语言处理与大模型评估方向的研究人员及技术从业者使用,用于系统分析各类大模型在中文环境中的知识储备与推理短板。套件按中学、高中、大学、专业四个难度层级组织… · 2026/11/3 16:15:33
OctaFuse 2.11.0:流式请求优化与用户折扣策略的网关级治理 1. OctaFuse Gateway 是什么:不是“又一个网关”,而是业务流量的智能调度中枢 很多人看到“OctaFuse Gateway”第一反应是:“哦,又一个 Spring Cloud Gateway 或 Envoy 的包装壳?”——这种理解在 2.11.0 版本之前或许… · 2026/11/3 16:15:33
Java开发者必备AI编程工具对比与实战指南 1. Java开发者的AI辅助编程工具全景解析 作为一名深耕Java领域多年的开发者,我亲历了从纯手工编码到AI辅助开发的演进历程。当前主流的三大工具——Cursor、Claude Code和Kiro,各自在集成度、专业深度和安全性方面形成了差异化优势。本文将基于实际项目经… · 2026/11/3 16:15:33
RAG中Embedding优化的三重空间对齐工程 1. 这个问题背后,藏着整个RAG落地的真实瓶颈 “Embedding RAG 还值得优化吗”——这句话不是技术讨论的起点,而是很多团队在跑通第一个RAG demo之后,深夜盯着QPS曲线和召回率报表时,真实脱口而出的困惑。我带过6个从零搭建知识库的… · 2026/11/3 16:14:30
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46