我用华为云码道 CodeArts 做了个报表合并工具
我用华为云码道 CodeArts 做了个报表合并工具一键开通华为云码道 CodeArts 代码智能体https://developer.huaweicloud.com/codeartsco.html?sourcedmzntgwatomgit1sourceaddmzntgwatomgithd在线体验https://excel-merge-tool-88500.app.workbuddy.host/开源仓库AtomGithttps://atomgit.com/qq_40202349/excel-merge-tool同一个订单一份报表写 5800另一份写 5850。月底汇总时这两行该保留哪一行删掉其中一行差额的线索就没了全部留着再求和又可能把同一笔订单算两遍。连把数据放到同一列都未必顺利。一份叫“金额”另一份叫“销售额”系统导出的 CSV 用的是amt。有的表还多了一列备注按位置复制粘贴很容易放错列。这次我用华为云码道 CodeArts 做了一个报表合并工具想先把这些麻烦摆到页面上确认列名怎么对应找出冲突和重复再带着来源文件、行号回原表核对。文件的解析、合并和导出都在浏览器本地完成。先看做出来的效果。从上传五份表到拿到合并报告整个操作过程不到 20 秒图1从上传报表到导出报告的操作演示。用五份分公司销售报表做测试四份 Excel 加一份 CSV一共 21 行。里面埋了几个坑各表列名不一样、一笔订单有两个金额、一条完全重复的记录还有几个空着的日期。合并后勾选“只看异常行”那笔对不上的订单就自己冒出来了图2筛选出合并结果中的异常记录。一、把五份表里的麻烦写进需求先在 AtomGit 网页端通过 CodeArts Agent 创建excel-merge-tool仓库再把需求交给它。技术栈选了 Vue 3、TypeScript 和 Vite表格解析用 SheetJS核心逻辑用 Vitest 测试。“把几份表合成一份”还不够具体。列名不同怎么办同一个订单出现两次能不能直接删这些都要提前交代。需求里要求先给出字段映射建议让使用者选主键和去重策略发生金额冲突时保留记录导出时另附一张合并报告写清输入、输出和跳过的行。页面按上传、字段映射、合并预览、导出分成四步。解析和合并放进 Web Worker核心函数单独放在core/不引用 Vue 或 DOM。这样后面发现一条数据不对就能直接给函数喂一个小样例不用每次都从页面点起。图3码道检查主键、空值等边界情况。执行中有个小细节它修正了报告测试里的行号断言。数据下标是 1加上表头对应的却是 Excel 第 3 行。这个差别会影响使用者回原表找记录不能只让程序内部的下标对得上。图4码道修正行号断言后94 项测试通过。到这里四步界面、核心代码和测试都有了。接下来要检查的是这些代码遇到实际文件以后会怎样。二、日期少了一天把问题发回码道初版检查中发现了日期偏移预期是2026-08-01结果却成了2026-07-31。当时的实现把Date用toISOString().slice(0, 10)转成日期字符串。toISOString()输出 UTC 时间东八区的本地午夜转过去会落在前一天。这次反馈写了出错位置、运行时区和预期结果还要求补一个回归用例让本地午夜的日期走完 Excel 写入、读取、解析再核对输出。图5向码道反馈日期少一天的问题。截图里的复现表达式写得不准确new Date(2026-08-01)按 UTC 解析构造本地午夜应使用new Date(2026, 7, 1)月份从 0 开始。历史截图保留原样这里更正。码道随后把格式化改成读取本地年月日补了三个回归用例并给出 97 项测试通过的修复报告。图6码道给出日期修复方案和 97 项测试通过的报告。从 94 项到 97 项新增的三项都有具体针对的问题。不过这还是码道环境里的交付结果拿到本地后需要再跑一次。三、97 项测试拿到本地仍有两项失败后续独立复核在这台东八区 Windows 电脑上运行结果是 95 项通过、2 项失败。失败的仍然是日期本地午夜走完 Excel 写入、读取和解析还是少了一天。继续往前查偏差发生在日期格式化之前。当时使用的 SheetJS 0.18.5在这条写入再读回的链路中读到的本地时间已经落在前一天午夜前。只改最后的字符串处理修不到这一层。核对 SheetJS 官方安装说明 后复核阶段把依赖固定到官方 CDN 提供的 0.20.3。读取方式也做了调整保留 Excel 的日期序列值和格式直接输出日历日期减少经过 JavaScript 时区转换的环节。下面是src/core/parse.ts中的关键设置和日期转换片段省略了遍历、日期类型判断及错误处理workbookXLSX.read(data,{type:array,cellDates:false,cellNF:true,raw:true,})cell.vXLSX.SSF.format(yyyy-mm-dd,cell.v,{date1904:!!workbook.Workbook?.WBProps?.date1904,})cell.tsdeletecell.wdeletecell.zdate1904也不能漏。工作簿使用的日期系统不同同一个序列值对应的日历日期就不同。这轮验证既保留了写入、读回的用例也构造了固定序列值覆盖 1900、1904 两种日期系统。相关解析和数据保全用例分别在 UTC、洛杉矶、UTC14 下运行检查换一个时区后日期是否仍然相同。日期问题到这里才算经过本地复核。后面的页面和数据处理修正同样属于独立复核阶段并非码道那份 97 项测试报告中的内容。四、再从上传走到预览检查每一步的数据浏览器走查先卡在了上传入口。选择文件后列表没有出现文件输入框的change事件又调用了打开选择器的方法没有接上读取逻辑。页面还缺少进入字段映射的按钮。核心测试不加载 Vue 页面这两处问题要实际点击才能发现。修好入口才能继续核对字段。华北表用“订单编号”“产品名称”“销量”“销售额”目标表则用统一列名。当前版本通过本地同义词表给建议例如把“销售额”和amt对应到“金额”不在运行时调用大模型建议不合适可以在下拉框里改。图7将各份报表的列名映射到统一字段。这里还补了一个拦截如果同一份表同时有“金额”和“销售额”不能让两列都写进同一个目标列否则后一次赋值会覆盖前面的内容。遇到重复映射现在会提示文件名等使用者改好再合并。到了合并步骤又遇到 Vue 响应式对象不能直接传入 Worker 的问题。postMessage使用结构化克隆算法无法直接克隆 Vue Proxy。当前合并协议只有数组、字符串和普通对象因此发送前转成普通 JSON 数据上传文件仍用ArrayBuffer通过 transfer list 传递。如果以后扩展协议来传日期对象或其他类型这部分也要跟着调整。预览能显示以后还要看标签有没有漏。选择“全部保留”时两条重复记录都应该带标签也都能被“只看异常行”筛出来。对于金额为 100、200、200 的三条冲突记录也不能只标出一个 200漏掉另一条。去重依据同样需要检查。原实现把复合主键中的空值过滤掉再用|拼接可能把不同记录拼成同一个键。修正后缺少部分主键就提示空值不自动去重完整的复合主键用结构化形式编码exportfunctioncreateRowKey(parts:string[]):string{if(parts.length0||parts.some(vv))returnreturnparts.length1?parts[0]:JSON.stringify(parts)}最后还要保住单元格本来的含义。CSV 编号00123按文本读取备注里的“运费50”保持原文金额比较时可以识别货币符号和千分位导出时再把金额、数量、单价写成数值方便继续求和。五、下载 Excel再把结果读回来修正后的版本在 Edge 中跑了一遍生产构建从选择文件、确认映射一直走到下载。导出完成后又重新读取真正下载下来的 Excel核对“合并结果”和“合并报告”。五份样例输入 21 行默认“保留一条”输出 20 行。少掉的是一条重复记录开头那笔 5800、5850 的冲突仍然保留报告能指出被去重的是华北表第 4 行。图8合并报告列出处理结果和去重明细。检查项本次结果输入文件4 份.xlsx、1 份.csv共 21 行选择“保留一条”输出 20 行跳过 1 行重复记录选择“全部保留”输出 21 行重复的两行均有标签金额冲突保留 5800、5850标记 2 个冲突单元格重复与空值1 组重复3 个空单元格含 1 个日期、2 个备注导出内容结果、报告两张工作表金额列为数值最终本地测试7 个测试文件112 项通过核心实现覆盖率行 98.88%分支 90.63%这里的冲突按单元格计重复按组计备注空值目前也会提示。覆盖率只统计解析、同义词、映射、校验、合并、导出六个实现文件不包含 Vue 页面。浏览器走查还覆盖了拖拽、清空重选、错误文件提示和 390px 小屏。页面加载并解析完文件后断网仍可导出本轮观察到的 HTTP 请求都是本地页面资源没有发现报表内容外发。这个结论限于本次测试环境。当前工具适合表头清楚的明细表每个文件只处理第一个工作表第一条非空行作为表头。它不会完整保留合并单元格、多级标题、复杂公式和原样式日期只输出到天。超大文件和其他浏览器还没做专项测试金额冲突最终采用哪条记录也仍需人工核对。六、实际使用感受码道这次帮忙最多的是把需求变成了一套可以继续检查的工程。四步界面、核心函数和首轮测试一起交付日期反馈后又有具体的修改和回归用例省去了从空白项目搭起的工作。后续花时间的地方往往比最初的需求细重复的两行是不是都能筛出来主键缺一部分会不会误删编号导出后还剩几个零。这些问题靠现成样例和下载后的文件更容易说清楚。94、97、112 也分别属于首轮交付、码道日期修复、后续本地复核不能混成一次验收结果。如果再做同类工具我会把这五份带问题的表随需求一起交出去连预期保留哪些行、报告写什么都说明白。交付后再用同一批文件核对反馈也更具体。你合并报表时最常遇到的是列名不一致还是同一笔业务在不同文件里对不上也欢迎在评论里说说其他难处理的表格结构。想试试当前版本可以直接打开在线体验版也可以拉下代码在本地启动gitclone https://atomgit.com/qq_40202349/excel-merge-tool.gitcdexcel-merge-toolnpmcinpmrun dev导入fixtures/review/里的五份样例在线版可以从这个下载目录逐个下载保留默认“订单号”主键和“保留一条”策略。合并后应有 20 行勾选“只看异常行”找到ORD-2026-0912看看那两个不同金额的来源。再点“上一步”把策略改成“全部保留”重新合并。结果会变成 21 行重复记录也会留下并带有标签。最后导出 Excel打开“合并报告”对照这两次处理的差别。测试和构建命令如下npmtestnpmtest----coveragenpmrun build的来源。再点“上一步”把策略改成“全部保留”重新合并。结果会变成 21 行重复记录也会留下并带有标签。最后导出 Excel打开“合并报告”对照这两次处理的差别。测试和构建命令如下npmtestnpmtest----coveragenpmrun build

相关新闻

叙事泡沫与事实重构:基于“科学/哲学之父”之辨对波普尔划界标准及当前AI大模型认知危机的深层审视

叙事泡沫与事实重构:基于“科学/哲学之父”之辨对波普尔划界标准及当前AI大模型认知危机的深层审视

叙事泡沫与事实重构:基于“科学/哲学之父”之辨对波普尔划界标准及当前AI大模型认知危机的深层审视摘要本文基于对当前全球AI大模型在基础认知测试中“集体失智”现象的深度观察,系统性地反思了波普尔“可证伪性”划界标准的内在逻辑缺陷及其对学术界与A…

2026/10/3 20:47:55 阅读更多 →
【Cover Letter 2】SCI 投稿加分必备,手把手教你写 投稿Cover Letter:用 TaoToken 统一 Key 打通 AI 辅助润色与投稿信生成

【Cover Letter 2】SCI 投稿加分必备,手把手教你写 投稿Cover Letter:用 TaoToken 统一 Key 打通 AI 辅助润色与投稿信生成

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

2026/10/2 17:21:40 阅读更多 →
偷师造轮胎和做跑鞋的三招把机器人足底噪音压到图书馆水平

偷师造轮胎和做跑鞋的三招把机器人足底噪音压到图书馆水平

📌 偷师造轮胎和做跑鞋的:三招把机器人足底噪音压 作者:陈卫东 陈宝隆 | RobotSole RobotSole | www.robotsole.com 偷师造轮胎和做跑鞋的:三招把机器人足底噪音压到图书馆水平 作者:陈卫东 陈宝隆 | RobotSole | www.…

2026/10/2 17:21:40 阅读更多 →

最新新闻

龙勃透镜电磁聚焦原理与Matlab仿真实现:雷达增益提升的工程解读

龙勃透镜电磁聚焦原理与Matlab仿真实现:雷达增益提升的工程解读

雷达信号中的“光学魔术”:用Matlab模拟龙勃透镜的聚焦放大效应做雷达信号处理这些年,我一直对天线和传播路径上的“另类”器件很感兴趣。龙勃透镜这名字听着像光学里的东西,但它在雷达领域的作用其实非常硬核——把一个球形的介质透镜放在天…

2026/10/3 20:47:48 阅读更多 →
Go语言实现三数之和:排序+双指针去重技巧全解析

Go语言实现三数之和:排序+双指针去重技巧全解析

这道题我刷了好几遍,每次在面试前都会把它翻出来重新写一遍。不是说它难,而是它在 LeetCode Hot 100 里的地位很特别——你几乎不可能在真正的面试里碰到一模一样的三数之和,但面试官完全可能换一个壳,考你排序加双指针这个组合套…

2026/10/3 20:47:48 阅读更多 →
Redis服务器部署与生产级排障实战:从安装到缓存治理

Redis服务器部署与生产级排障实战:从安装到缓存治理

服务器之 Redis:从零搭建到生产级排障的完整实战笔记 Redis 在服务器端的重要性,根本不需要我再多吹。只要你的系统扛过一定的并发,Redis 基本就是那根绕不开的“救命稻草”。它是高性能键值存储服务器,能做缓存、分布式锁、消息队…

2026/10/3 20:47:48 阅读更多 →
人机协同实战指南:从分工逻辑到落地流程

人机协同实战指南:从分工逻辑到落地流程

做AI项目这几年,我越来越觉得,真正决定项目上限的往往不是模型本身的参数量,而是我们和AI协作的方式。人机协同不是一句贴在PPT里的口号,它直接决定了你是被AI替代,还是用AI放大自己的能力。这篇内容算是“AI全景”系列…

2026/10/3 20:47:48 阅读更多 →
Node.js全栈实战:天远车牌查询API从接入到上线

Node.js全栈实战:天远车牌查询API从接入到上线

现在不少做车辆管理、出行服务、二手车核验的朋友都在找车牌查询接口,但真正能把整套调用流程跑通、并且知道怎么接到自己业务里的人其实不多。这个标题里提到的天远名下车辆车牌查询API,本质上是把“输入车牌号 -> 返回车辆基础信息”这个能力封装成…

2026/10/3 20:47:47 阅读更多 →
VRChat头像性能优化:避免“贪多”工程,打造高评分角色

VRChat头像性能优化:避免“贪多”工程,打造高评分角色

VRChat 里有一个很常见的日文词叫“よくばり”,翻译过来就是“贪多”。这个词用来形容一类头像工程再合适不过:一个人物模型里想同时塞进 4K 贴图、几十个待机动作、满身 PhysBone、粒子特效、换装部件,甚至再挂一个音乐播放器。结果往往是模…

2026/10/3 20:45:45 阅读更多 →

日新闻

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南 【免费下载链接】ex-skill 前任 skill 项目地址: https://gitcode.com/gh_mirrors/exsk/ex-skill 前任.skill 是一个运行在 Claude Code 上的开源 Skill:导入微信、iMessage、短信、…

2026/10/3 0:00:27 阅读更多 →
45个经典Linux面试题:从命令到网络排障的完整考点解析

45个经典Linux面试题:从命令到网络排障的完整考点解析

刚开始带应届生的时候,我最头疼的就是他们拿着一摞Linux面试题背得滚瓜烂熟,一上机全露馅。后来自己从被面的人变成面别人的人,才慢慢摸清楚:Linux面试题考的根本不是答案本身,而是你面对一个不确定的系统问题时&#…

2026/10/3 0:01:28 阅读更多 →
SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

简介:本资源是一份面向SAP ABAP开发人员、生产计划专员及ERP实施顾问的实操型操作指南,聚焦SAP生产预留核心业务场景,系统解决物料预留创建、查询、校验与批量处理等高频问题。文档以结构化方式覆盖预留背景原理、OMC2编码规则、工厂级参数配…

2026/10/3 0:01:28 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/3 9:14:33 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/3 9:47:50 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/3 9:42:31 阅读更多 →

月新闻

我发现了一个新思路:用 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/2 10:36:31 阅读更多 →
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/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练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/3 9:42:36 阅读更多 →