1234

ExcelHome技术论坛

用户名  找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

帖子
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 447|回复: 8

[求助] 我让DeepSeek帮我写了个JS宏,但运行不了。。。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2025-2-27 22:45 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我给DeepSeek的提问是:

这里上传了一个Excel文件,其中A:E是原数据,A1:E1是表头,下方各单元格中均为5个字母组成的港口代码,E列的单元格中可能有多个港口代码,以“,”分隔,如果只剩下一个港口代码,则不需要“,”。需要增加一个按钮控件,添加上文字“点击运行”,后续需要点击该按钮运行宏,因为我使用WPS办公软件,所以现在需要使用WSP宏编辑器,宏的内容如下:1、如果E列中有“VNSGN”且同一行的A列或D列有“KHPPH”,则把E列中该行的“VNSGN”删除,若此时该单元格只有“VNSGN”,单元格填上#,若单元格有多个港口则仅删除VNSGN,同时确保没有多余的“,”。2、如果E列中有“JPYOK”且同一行的A列或D列存在非JPYOK的其它的JP开头的港口,例如JPHHE、JPSDJ等,则把E列中该行的“JPYOK”删除,若此时该单元格只有“JPYOK”,单元格填上#,若单元格有多个港口则仅删除JPYOK,同时确保没有多余的“,”。
3、要考虑以上两种情况同时满足的情况。注意:第一,G1:K13是运行结果的示例,运行结果请直接体现在E列。第二,真实数据可能有无限行,附件中仅节选了一部分。


DeepSeek回复的代码如下:(但我运行没有任何反应,大牛们能帮我看一下吗?)


function ProcessData() {    try {        const sheet = Application.ActiveSheet;        const lastRow = sheet.Range("E65536").End(xlUp).Row;        let modifiedCount = 0;        for (let i = 2; i <= lastRow; i++) {            // 获取当前行数据            const cellE = sheet.Cells.Item(i, 5);            let originalE = cellE.Text.replace(/\s/g, ""); // 清理空格            const portA = sheet.Cells.Item(i, 1).Text.trim();            const portD = sheet.Cells.Item(i, 4).Text.trim();            let modified = false;            // 条件1:删除VNSGN(当A或D列有KHPPH时)            if (originalE.includes("VNSGN") && (portA === "KHPPH" || portD === "KHPPH")) {                originalE = ProcessString(originalE, "VNSGN");                modified = true;            }            // 条件2:删除JPYOK(当A或D列有JP开头非YOK时)            const hasJP = (portA.startsWith("JP") && portA !== "JPYOK") ||                           (portD.startsWith("JP") && portD !== "JPYOK");            if (originalE.includes("JPYOK") && hasJP) {                originalE = ProcessString(originalE, "JPYOK");                modified = true;            }            // 特殊双重删除逻辑(用户示例第10行)            if ((portA === "KHPPH" || portD === "KHPPH") && hasJP) {                originalE = ProcessString(originalE, "VNSGN");                originalE = ProcessString(originalE, "JPYOK");                modified = true;            }            // 更新单元格并记录修改            if (modified) {                cellE.Value2 = originalE === "" ? "#" : originalE;                modifiedCount++;            }        }        // 显示处理结果        Application.Alert(`处理完成!共修改 ${modifiedCount} 行数据。`, xlInformation);    } catch (e) {        Application.Alert("运行错误: " + e.message, xlCritical);    }}function ProcessString(inputStr, removeKey) {    if (!inputStr || inputStr === "#") return "#";    const arr = inputStr.split(",")                        .filter(item => item.trim() !== removeKey)                        .map(item => item.trim());    return arr.length > 0 ? arr.join(",") : "#";}

AAA.rar

13.13 KB, 下载次数: 10

TA的精华主题

TA的得分主题

发表于 2025-2-28 08:25 | 显示全部楼层
则把E列中该行的“VNSGN”删除,若此时该单元格只有“VNSGN”



感觉逻辑有点乱,“有”是精确匹配?还是模糊匹配?
先删除?还是先判断是否只有“VNSGN”?

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-2-28 09:10 | 显示全部楼层
逻辑是:先判断E列的VNSGN和A或D列的KHPPH是否同时存在,同时存在就要删E列的VNSGN,这时候VNSGN肯定是已经有了,但E列可能是只有VNSGN,也可能是VNSGN,JPYOK,也可能是CNSHA,VNSGN,还可能是CNSHA,VNSGN,THLCH等等,如果只有VNSGN时,删了之后要填充上#

题干中1和2点,逻辑是完全一样的

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-2-28 09:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
饮冰e士 发表于 2025-2-28 08:25
则把E列中该行的“VNSGN”删除,若此时该单元格只有“VNSGN”

逻辑是:先判断E列的VNSGN和A或D列的KHPPH是否同时存在,同时存在就要删E列的VNSGN,这时候VNSGN肯定是已经有了,但E列可能是只有VNSGN,也可能是VNSGN,JPYOK,也可能是CNSHA,VNSGN,还可能是CNSHA,VNSGN,THLCH等等,如果只有VNSGN时,删了之后要填充上#

题干中1和2点,逻辑是完全一样的

TA的精华主题

TA的得分主题

发表于 2025-2-28 13:50 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
DeepSeek写得蛮好的,非常简单易懂。运行问题可能是一些函数wps没有的缘故,比如"Alert"等。算法、逻辑没有任何问题。稍微改了一下,为体现结果,输出在F列。

AAA.zip

13.38 KB, 下载次数: 3

TA的精华主题

TA的得分主题

发表于 2025-2-28 14:38 | 显示全部楼层
DeepSeek这变量的命名太复杂了,要不是有中文注释,看着完全像来外写的风格

TA的精华主题

TA的得分主题

发表于 2025-2-28 15:24 | 显示全部楼层
AI写的代码,还是要会懂些代码,才会好继续提问,让AI给你继续优化

TA的精华主题

TA的得分主题

发表于 2025-3-1 12:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2025-3-12 11:14 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

1234

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-3-30 12:51 , Processed in 0.028459 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表