WPS JS宏入门实战:用JavaScript实现办公自动化与数据处理
1. 项目概述为什么要在WPS里折腾JS宏如果你经常和WPS表格打交道大概率遇到过这样的场景每天都要重复处理一堆格式雷同的报表比如合并几十个表格、批量替换特定内容、或者给一堆数据自动标红加粗。手动操作不仅耗时还容易出错。这时候你可能会想要是能有个“小助手”自动完成这些枯燥的活就好了。这个“小助手”就是宏。过去在WPS里写宏大家首先想到的是VBA。但VBA学习曲线陡峭环境配置也麻烦。现在WPS提供了一个更轻量、对前端开发者更友好的选择JS宏。简单来说JS宏就是让你用JavaScript或者更准确地说是WPS提供的JS API来编写自动化脚本直接在WPS表格、文字或演示里运行实现办公自动化。我最初接触JS宏就是因为被一个每周都要做的数据汇总报表搞烦了。手动复制粘贴、调整格式每次都要花上半小时。后来用JS宏写了个脚本现在点一下按钮10秒钟搞定准确率100%。这不仅仅是省时间更是把我们从重复劳动中解放出来去处理更有价值的问题。对于有一定JavaScript基础或者想快速上手办公自动化的朋友来说WPS JS宏是一个门槛低、见效快的利器。2. JS宏环境搭建与初体验2.1 开启你的JS宏编辑器首先确保你使用的是WPS 2019个人版/专业版及以上版本或者WPS 365。教育版或某些特殊版本可能功能不全。打开WPS表格你会看到顶部菜单栏有一个“开发工具”选项卡。如果没有需要手动调出来点击“文件”-“选项”-“自定义功能区”在右侧主选项卡列表中勾选“开发工具”。在“开发工具”选项卡里找到“JS宏”按钮点击它。这时WPS界面右侧会滑出一个新的窗格这就是WPS宏编辑器。它的界面非常简洁左侧是项目浏览器显示当前工作簿下的所有宏模块中间是代码编辑区右侧是属性窗口。你可以把它理解为一个内置的、专为操作WPS文档而设计的轻量级IDE。注意第一次打开时可能会提示启用宏。请务必选择“启用宏”否则JS宏功能将无法使用。同时请确保你的WPS来源可靠以规避安全风险。2.2 你的第一个JS宏Hello, WPS!我们来写一个最简单的宏体验一下整个流程。在宏编辑器左侧的“项目”窗格右键点击你的工作簿名称选择“插入”-“模块”。这会创建一个新的代码模块默认名称为“Module1”。在右侧的代码编辑区输入以下代码function HelloWPS() { let sheet Application.ActiveSheet; let cell sheet.Range(A1); cell.Value Hello, WPS JS Macro!; cell.Font.Bold true; cell.Font.Color #FF0000; }这段代码做了几件事function HelloWPS() { ... }定义了一个名为HelloWPS的宏函数。Application.ActiveSheet获取当前活跃的工作表。sheet.Range(A1)选中A1单元格。cell.Value ...为A1单元格设置文本内容。cell.Font.Bold和cell.Font.Color设置了字体加粗和颜色。写完代码后直接关闭宏编辑器窗格即可代码会自动保存。回到WPS表格界面在“开发工具”选项卡点击“宏”按钮不是JS宏会弹出一个对话框。在“宏位置”下拉菜单中选择“当前工作簿”你就能看到刚刚编写的HelloWPS函数。选中它点击“运行”。瞬间你会发现当前工作表的A1单元格被填上了红色的加粗文字“Hello, WPS JS Macro!”。恭喜你的第一个JS宏成功运行了这个过程清晰地展示了JS宏的核心工作模式编写函数 - 触发运行 - 操作文档对象。2.3 理解WPS JS API的对象模型要写好JS宏最关键的是理解WPS提供的JavaScript API对象模型。它和操作DOM有些类似都是对一层层对象进行操作。顶层对象Application。这是入口代表整个WPS应用程序。通过它可以获取工作簿、文档等。工作簿Workbook。在表格中一个.et文件就是一个Workbook。Application.ActiveWorkbook获取当前活动工作簿。工作表Worksheet。一个工作簿包含多个工作表即我们常说的一个个标签页。ActiveWorkbook.ActiveSheet或Application.ActiveSheet获取当前活动工作表。区域Range。这是最常用、最核心的对象代表一个或一组单元格。可以通过Range(“A1”)、Range(“A1:B10”)等方式引用。其他对象还有Font字体、Interior单元格内部填充、Borders边框等它们通常是Range对象的属性。一个实用的技巧是在宏编辑器里输入对象名加一个点.后编辑器会触发代码提示列出该对象可用的属性和方法这对学习和探索API非常有帮助。3. 核心功能实战从数据处理到自动报表掌握了基础我们来看几个实战案例这些是我在实际工作中提炼出的高频需求。3.1 批量数据处理与格式刷场景有一份从系统导出的销售数据需要将“销售额”列假设是D列大于10000的单元格标为绿色背景小于3000的标为红色背景并给整个数据区域加上边框。代码实现function FormatSalesData() { let sheet Application.ActiveSheet; // 假设数据从第2行开始第1行是表头 let lastRow sheet.Cells.Find(*, undefined, undefined, undefined, 1, 2).Row; // 查找最后一行 let dataRange sheet.Range(A2:D${lastRow}); // 数据区域A到D列 // 1. 清除可能存在的旧格式 dataRange.Interior.Color null; // 清除填充色 dataRange.Borders.LineStyle 0; // 清除边框 // 2. 遍历D列条件格式 for (let i 2; i lastRow; i) { let cell sheet.Range(D${i}); let value cell.Value; if (value 10000) { cell.Interior.Color #C6EFCE; // 浅绿色 } else if (value 3000) { cell.Interior.Color #FFC7CE; // 浅红色 } } // 3. 为整个数据区域添加细线边框 let borderRange sheet.Range(A1:D${lastRow}); // 包括表头 let borders borderRange.Borders; borders.LineStyle 1; // 连续细线 borders.Color #000000; // 4. 自动调整列宽以适应内容 dataRange.Columns.AutoFit(); Application.Alert(数据格式化完成); }代码解析与技巧Cells.Find(“*”, ... , 2)是一个经典技巧用于动态查找工作表中最后一个非空单元格的行号这样无论数据有多少行代码都能自适应。在修改格式前先清除旧格式是一个好习惯可以避免格式叠加导致的混乱。Interior.Color属性接受十六进制颜色字符串和CSS中用法一致。Borders是一个集合通过设置LineStyle和Color来定义边框。LineStyle 1代表细实线。Columns.AutoFit()方法非常实用能自动调整列宽让表格看起来更整洁。最后用Application.Alert给用户一个简单的完成提示。3.2 多工作表数据汇总与合并场景每个月各个分公司会提交一个格式相同的销售报表都是一个单独的工作表放在同一个工作簿里。现在需要创建一个“汇总”表自动将所有分公司的“销售总额”数据抓取过来。假设每个分公司工作表的名字就是分公司名如“北京分公司”、“上海分公司”且每个表的销售总额数据都在B10单元格。代码实现function ConsolidateReports() { let workbook Application.ActiveWorkbook; let sheets workbook.Sheets; // 1. 寻找或创建“汇总”表 let summarySheet; try { summarySheet workbook.Sheets.Item(汇总); // 如果存在清空旧数据从第2行开始 let usedRange summarySheet.UsedRange; if (usedRange.Row 1 || usedRange.Column 1) { summarySheet.Range(A2).Resize(usedRange.Rows.Count - 1, usedRange.Columns.Count).Clear(); } } catch (e) { // 如果不存在则创建 summarySheet workbook.Sheets.Add(undefined, workbook.Sheets.Item(sheets.Count)); summarySheet.Name 汇总; // 设置表头 summarySheet.Range(A1).Value 分公司; summarySheet.Range(B1).Value 销售总额; summarySheet.Range(A1:B1).Font.Bold true; } let targetRow 2; // 从第2行开始填写数据 // 2. 遍历所有工作表 for (let i 1; i sheets.Count; i) { let sheet sheets.Item(i); // 跳过“汇总”表本身 if (sheet.Name 汇总) { continue; } // 3. 从每个工作表的B10单元格获取数据 let totalSalesCell sheet.Range(B10); let salesValue totalSalesCell.Value; // 4. 将数据写入汇总表 summarySheet.Range(A${targetRow}).Value sheet.Name; // 分公司名 summarySheet.Range(B${targetRow}).Value salesValue; targetRow; } // 5. 为汇总表的数据区域添加边框 let lastRow targetRow - 1; if (lastRow 2) { let dataRange summarySheet.Range(A2:B${lastRow}); let borders dataRange.Borders; borders.LineStyle 1; borders.Color #666666; } // 6. 激活汇总表方便查看 summarySheet.Activate(); Application.Alert(已汇总 ${sheets.Count - 1} 个分公司的数据。); }避坑指南try...catch用于处理“汇总”表可能不存在的情况这是一种健壮的编程习惯。UsedRange属性获取工作表已使用的区域但要注意有时格式设置也会被计入“已使用”。更精确的做法可能是记录上次写入的最大行号。在遍历工作表时一定要用sheet.Name判断并跳过“汇总”表自身否则会陷入逻辑错误。获取单元格值使用.Value。如果单元格是公式.Value获取的是计算结果.Formula获取的是公式字符串。这个例子是简单的单单元格抓取。实际中数据可能位于不固定的位置这时可能需要结合Find方法根据表头文字来定位。3.3 自定义函数与交互式对话框除了自动执行JS宏还能创建自定义函数和简单的用户界面。创建自定义函数比如我们需要一个函数用来计算销售额的增值税假设税率13%。function CALC_VAT(sales) { // 这个函数可以在单元格中像SUM()一样使用 if (sales 0 || typeof sales ! number) { return 0; } return sales * 0.13; }保存后在任意单元格输入CALC_VAT(B2)就能计算出B2单元格销售额对应的增值税。这极大地扩展了WPS表格的函数库。创建简单的输入对话框让用户输入一些参数再执行操作。function PromptAndProcess() { let input Application.InputBox( “请输入需要处理的数据起始行号” // 提示信息 “数据范围设置” // 对话框标题 “2” // 默认值 undefined, undefined, undefined, undefined, 1 // 最后一个参数1表示要求输入数字 ); // 检查用户是否点击了取消 if (input false) { Application.Alert(“用户取消了操作。”); return; } let startRow parseInt(input); if (isNaN(startRow) || startRow 1) { Application.Alert(“输入无效请输入一个正整数。”); return; } // 接下来可以使用 startRow 进行后续处理... let sheet Application.ActiveSheet; Application.Alert(您输入的行号是 ${startRow}将从第 ${startRow} 行开始处理。); }Application.InputBox方法比简单的Alert强大它可以获取用户输入。其最后一个参数Type很关键1代表数字2代表文本8代表单元格引用等。善用这个功能可以让你的宏脚本更加灵活和友好。4. 高级技巧与性能优化当处理的数据量变大或者逻辑变复杂时一些高级技巧和性能考量就变得至关重要。4.1 减少API调用批量操作JS宏与WPS的交互API调用是有开销的。最影响性能的操作是在循环中频繁读写单个单元格。反面教材慢for (let i 1; i 1000; i) { sheet.Range(A${i}).Value i; // 循环内进行了1000次API调用 sheet.Range(A${i}).Font.Bold true; // 又是1000次 }优化方案快// 1. 将要写入的数据准备好 let values []; let boldFlags []; for (let i 1; i 1000; i) { values.push([i]); // 注意写入一个二维数组每个子数组代表一行 boldFlags.push([true]); } // 2. 批量写入值和格式 let targetRange sheet.Range(“A1:A1000”); targetRange.Value values; // 一次API调用写入1000个值 // 对于格式可以操作整个区域 targetRange.Font.Bold true; // 一次API调用设置1000个单元格加粗 // 或者如果需要逐行不同格式可以考虑其他策略如条件格式核心思想是将数据在JavaScript内存中组装好然后通过一次或少数几次API调用写入一个大的Range区域。对于格式设置尽可能操作整个区域而不是单个单元格。4.2 处理事件与自动化触发JS宏可以响应WPS中的某些事件比如打开工作簿、切换工作表、更改单元格内容时自动执行代码。这需要用到Application对象的事件。例如我们想在每次打开某个工作簿时自动将“汇总”表的数据备份到另一个隐藏工作表// 这段代码通常放在“ThisWorkbook”模块中 function Workbook_Open() { console.log(“工作簿已打开开始执行备份...”); // 调用我们之前写的备份函数 BackupSummaryData(); } function BackupSummaryData() { let workbook Application.ThisWorkbook; let summarySheet; try { summarySheet workbook.Sheets.Item(“汇总”); } catch (e) { Application.Alert(“未找到‘汇总’表。”); return; } // 寻找或创建“数据备份”表 let backupSheet; try { backupSheet workbook.Sheets.Item(“数据备份”); backupSheet.Cells.Clear(); // 清空旧备份 } catch (e) { backupSheet workbook.Sheets.Add(undefined, workbook.Sheets.Item(workbook.Sheets.Count)); backupSheet.Name “数据备份”; backupSheet.Visible 0; // 设置为隐藏0隐藏1显示2深度隐藏 } // 将汇总表的数据复制到备份表 summarySheet.UsedRange.Copy(backupSheet.Range(“A1”)); console.log(“数据备份完成。”); }要启用事件需要在宏编辑器的“项目”窗格中双击“ThisWorkbook”在打开的代码文件中编写Workbook_Open这类事件处理函数。事件驱动能让你的宏更加智能和自动化。4.3 错误处理与脚本健壮性一个健壮的宏脚本必须处理可能出现的错误。使用try...catch块包裹可能出错的代码段比如访问不存在的工作表、单元格或者进行类型转换时。function SafeGetValue() { let sheet; try { sheet Application.ActiveWorkbook.Sheets.Item(“可能不存在的表名”); let value sheet.Range(“A1”).Value; Application.Alert(“获取到的值是” value); } catch (error) { Application.Alert(“出错了” error.message); // 可以在这里进行错误恢复操作比如创建默认表 } }数据验证在执行核心逻辑前检查输入数据的有效性。例如检查单元格是否是数字范围是否合理。if (typeof cellValue ! ‘number’ || isNaN(cellValue)) { Application.Alert(单元格 ${cell.Address} 的内容不是有效数字已跳过。); continue; // 跳过本次循环 }使用console.log()调试在宏编辑器里console.log()输出的信息会显示在编辑器下方的“立即窗口”中这是调试时追踪变量状态和程序流程的利器。5. 常见问题排查与实战心得在实际编写和运行JS宏的过程中你肯定会遇到各种各样的问题。下面是我总结的一些典型问题及其解决方法。5.1 宏无法运行或报错“未定义”问题描述点击运行宏时提示“函数未定义”或直接没有任何反应。排查步骤检查函数名确保在宏对话框里选择的函数名与你代码中function定义的名称完全一致包括大小写。JS是区分大小写的。检查模块确保你的函数写在了正确的模块里。通常新建的宏函数都放在自己插入的“模块”中而不是“ThisWorkbook”或工作表对象下。保存与重新打开编写完代码后确保已经保存直接关闭宏编辑器即可自动保存。有时需要完全关闭并重新打开WPS工作簿宏列表才会刷新。语法错误在宏编辑器里仔细检查代码是否有明显的语法错误比如括号不匹配、字符串引号未闭合等。编辑器通常会有简单的错误提示波浪线。5.2 代码运行缓慢尤其是处理大量数据时问题描述一个简单的循环处理几千行数据却要等上十几秒甚至更久。解决方案应用4.1节的批量操作原则这是最立竿见影的优化。将循环内的单元格读写改为构建数组后一次性写入。关闭屏幕更新在宏开始执行时关闭WPS的屏幕刷新结束时再打开可以极大提升速度。function FastOperation() { let app Application; let oldScreenUpdate app.ScreenUpdating; // 保存原状态 app.ScreenUpdating false; // 关闭屏幕更新 try { // 在这里执行你的大量数据操作代码 // ... } finally { app.ScreenUpdating oldScreenUpdate; // 恢复屏幕更新 } }使用try...finally确保即使代码出错屏幕更新也能被恢复避免WPS界面卡死。禁用自动计算如果你的操作会触发大量公式重算可以先设置为手动计算。let oldCalculation app.Calculation; app.Calculation -4135; // 手动计算模式 // ... 执行操作 ... app.Calculation oldCalculation; // 恢复原计算模式5.3 如何调试复杂的JS宏脚本当逻辑复杂时仅靠Alert弹窗不够用。善用console.log()这是最基本的调试工具可以输出变量值、函数执行到哪一步。使用“立即窗口”在宏编辑器下方有一个“立即窗口”。你可以在代码中设置断点在代码行号左侧点击然后运行宏。当执行到断点时程序会暂停。此时你可以在“立即窗口”中输入变量名直接查看其当前值或者执行简单的语句。分步执行在调试模式下触发断点后可以使用工具栏的“逐语句”F8、“逐过程”ShiftF8按钮一步步执行代码观察程序流程和变量变化。编写可测试的小函数将复杂功能拆分成多个小函数每个函数只做一件事。这样你可以单独测试每个小函数更容易定位问题。5.4 代码安全与分享密码保护如果你的宏代码涉及敏感逻辑可以在VBA编辑器中是的JS宏模块目前的管理还在这个界面通过“工具”-“VBAProject属性”-“保护”为项目设置查看密码。这样别人打开工作簿时无法查看或修改你的源代码。分享工作簿将包含宏的工作簿发给别人时需要保存为.et格式WPS表格启用宏的工作簿而不是普通的.xlsx。对方打开时可能会看到安全警告需要点击“启用内容”才能正常使用宏功能。注意宏病毒永远不要启用来源不明的文档中的宏。只运行自己编写或信任的开发者提供的宏代码。从我自己的使用经验来看WPS JS宏最大的优势在于轻便和与Web技术的亲和性。对于熟悉JavaScript的开发者几乎可以零成本上手。它的API设计虽然不如VBA历史久远、生态庞大但对于日常办公自动化、数据清洗、报表生成等任务已经绰绰有余。最关键的是它能实实在在地把我们从那些重复、繁琐的鼠标点击中解放出来。开始可能只是为了解决一两个小问题但当你尝到自动化的甜头后自然会想着用它在更多场景中提升效率。不妨就从今天介绍的几个例子开始动手试试吧。

相关新闻

SSE流式对话实战:从传统接口到实时交互的全栈升级

SSE流式对话实战:从传统接口到实时交互的全栈升级

1. 项目缘起:从“后端回答”到“流式对话”的体验鸿沟最近在做一个全栈项目,核心功能是让用户提问,后端处理并返回答案。最开始,我实现了一个最朴素的版本:前端一个输入框,一个提交按钮,用户点击…

2026/8/7 5:06:55 阅读更多 →
AHA-WAM:观察引导上下文路由的异步范围-自适应的世界-动作建模

AHA-WAM:观察引导上下文路由的异步范围-自适应的世界-动作建模

26年6月来自上海交大、上海AI实验室、百度AI和港大的论文“AHA-WAM: Asynchronous Horizon-Adaptive World-Action Modeling with Observation-Guided Context Routing”。 世界动作模型已成为机器人操作的一个有前景的范式,它将视觉场景动态和动作联合建模&#xf…

2026/8/7 5:06:55 阅读更多 →
LaWAM:用于高效动态-觉察机器人策略的潜世界行动模型

LaWAM:用于高效动态-觉察机器人策略的潜世界行动模型

26年6月来自清华、吉林大学、南开、北大、哈工大、中关村学院、正行创新(Striding AI)公司和无问芯穹(Infinigence AI)公司的论文“LaWAM: Latent World Action Models for Efficient Dynamics-Aware Robot Policies”。 视觉-语言…

2026/8/7 5:06:55 阅读更多 →

最新新闻

分类模型评估与不平衡数据处理:从混淆矩阵到SMOTE的实战指南

分类模型评估与不平衡数据处理:从混淆矩阵到SMOTE的实战指南

1. 项目概述:为什么分类评估与不平衡数据是每个数据科学家的必修课如果你做过分类任务,尤其是那些真实世界里的分类任务,比如预测客户是否会流失、判断一张图片里是否有瑕疵、或者诊断某种疾病,那你大概率遇到过这样的场景&#x…

2026/8/7 5:47:23 阅读更多 →
Wireshark解码H.264实战:从网络抓包到视频帧可视化分析

Wireshark解码H.264实战:从网络抓包到视频帧可视化分析

1. 从网络包到视频帧:为什么我们需要解码H.264如果你做过网络音视频相关的开发或者运维,大概率遇到过这样的场景:一个视频通话或者直播应用,在测试环境跑得好好的,一上线就出现卡顿、花屏或者延迟飙升。你手头有服务器…

2026/8/7 5:47:23 阅读更多 →
Unity全平台语音识别实战:从麦克风权限到讯飞STT对接

Unity全平台语音识别实战:从麦克风权限到讯飞STT对接

1. 项目概述:为什么Unity音频处理是个技术活最近在做一个需要实时语音交互的Unity项目,从启动麦克风到最终把用户说的话变成可处理的文字,这一整套流程走下来,踩的坑比预想的要多得多。尤其是在WebGL平台和移动端(Andr…

2026/8/7 5:47:23 阅读更多 →
三维瞬变电磁正演:从时域求解、非结构化网格到AMG预处理的工程实践

三维瞬变电磁正演:从时域求解、非结构化网格到AMG预处理的工程实践

1. 从二维到三维:一个地球物理人的执念干了十几年地球物理勘探,尤其是电磁法这块,我最大的感受就是,二维模型越来越不够用了。客户拿着复杂地形、多层矿体或者城市地下空间探测的需求过来,你再用一个简单的二维剖面去解…

2026/8/7 5:47:23 阅读更多 →
不可通约假设:论函数之虚妄与无穷比较的终结

不可通约假设:论函数之虚妄与无穷比较的终结

——论函数之虚妄与无穷比较的终结 摘要 本文提出不可通约假设:在无穷面前,“多”“少”“包含”“相等”等比较性概念失去了统一的参照系,任何关于无穷集合大小的断言都依赖于特定的人为约定,而这些约定之间是不可通约的。本文从…

2026/8/7 5:47:23 阅读更多 →
C语言五子棋AI实战:从随机到搜索算法的智能实现

C语言五子棋AI实战:从随机到搜索算法的智能实现

1. 项目概述:从棋盘到智能的C语言之旅五子棋,这个规则简单却变化无穷的棋盘游戏,一直是检验AI策略的经典沙盒。你可能玩过不少五子棋游戏,但有没有想过亲手用C语言,从零开始构建一个能与你对弈的AI?这听起来…

2026/8/7 5:46:22 阅读更多 →

日新闻

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 想要将Android手机屏幕完美投射到电脑上,享受大屏操作的自…

2026/8/7 0:00:19 阅读更多 →
如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南 【免费下载链接】tom-select Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget wi…

2026/8/7 0:00:19 阅读更多 →
5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件 【免费下载链接】nsz NSZ - Homebrew compatible NSP/XCI compressor/decompressor 项目地址: https://gitcode.com/gh_mirrors/ns/nsz 你是否在为Nintendo Switch游戏文件占用大量存储…

2026/8/7 0:00:19 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →