JSP+Servlet+POI+JDBC实现Excel批量导入数据库实战
1. 为什么“上传Excel导入数据库”这个老需求至今还在被反复搜索但凡做过几年企业级Web开发的人对“上传Excel并把数据灌进数据库”这个需求都不会陌生。它几乎是所有后台管理系统的标配功能财务要导入对账单、教务要导入学生成绩、仓储要导入库存清单、HR要导入员工花名册。用户手里永远有一堆Excel而系统永远需要把这些数据变成表里的记录。这个需求看起来简单但真正动手做过的人都知道坑远比想象中多。文件格式对不对、表头怎么映射、数据重复怎么办、导入一半失败了怎么回滚、几万行数据会不会把内存撑爆——每一个问题都能让一个新手卡上大半天。而“jspservlet”这套技术栈虽然现在新项目用得少了但大量存量系统、教学项目、中小型内部工具仍然跑在这上面所以这个组合的搜索热度一直没降下来。我这次就把自己完整实现过的一套方案拆开来讲。核心思路是JSP负责页面展示和文件选择Servlet负责接收上传流Apache POI负责解析ExcelJDBC负责批量写入数据库。整套流程不依赖任何重型框架纯原生实现适合教学、二次开发也适合在老旧项目里快速加一个导入功能。下面我会把选型理由、每一步的代码细节、参数计算、以及我踩过的坑全部摊开说你照着抄基本就能跑通。2. 整体方案设计与技术选型拆解2.1 为什么是这套组合JSPServletPOIJDBC先说说为什么这么选。很多人第一反应是用Spring Boot加EasyExcel确实更省事但如果你的项目本身就是个老SSM或者纯Servlet项目硬引入Spring Boot反而增加复杂度。而且教学场景下用原生Servlet能让你真正看清“文件上传”这件事底层发生了什么而不是被框架的注解遮住眼睛。具体分工是这样的JSP只做一件事渲染一个带enctypemultipart/form-data的表单让用户选文件、点提交。页面逻辑越薄越好不要把业务代码写进JSP。Servlet作为控制器接收multipart/form-data请求把上传的文件流拿出来交给解析层。同时负责返回导入结果成功多少条、失败多少条、失败原因。Apache POI解析Excel的核心库。.xls用HSSFWorkbook.xlsx用XSSFWorkbook统一用WorkbookFactory.create()可以自动识别。JDBC PreparedStatement写入数据库。这里必须用addBatch()和executeBatch()做批量插入否则几万行数据一条条插性能会惨不忍睹。提示文件上传的解析Servlet 3.0以后可以直接用MultipartConfig注解加request.getPart()不需要再引入commons-fileupload。这是很多人不知道的一个简化点能少引一个依赖。2.2 三种上传解析方式的取舍文件上传这块历史上有几种做法我列个表对比一下你就知道该选哪个方式依赖优点缺点适用场景commons-fileupload需额外jar兼容老容器代码繁琐需手动解析极老的Servlet 2.5项目Servlet 3.0 Part API无原生、代码简洁需容器支持3.0推荐绝大多数场景框架封装如Spring框架最省事引入框架已用框架的项目我这次选Servlet 3.0 Part API因为现在Tomcat 7以上都支持代码量最少也最干净。你只需要在Servlet上打一个注解WebServlet(/importExcel) MultipartConfig( fileSizeThreshold 1024 * 1024 * 2, // 2MB超过就写临时文件 maxFileSize 1024 * 1024 * 10, // 单文件最大10MB maxRequestSize 1024 * 1024 * 50 // 整个请求最大50MB ) public class ExcelImportServlet extends HttpServlet { // ... }这里的三个参数不是随便填的。fileSizeThreshold是内存缓冲阈值小于它的文件直接放内存大于它的写磁盘临时文件。设2MB是因为一般Excel不会太小放内存处理快。maxFileSize限制单文件防止有人传个几百MB的巨型文件把服务器拖垮。maxRequestSize是总请求上限留点余量给表单其他字段。2.3 数据写入策略逐条 vs 批量这是性能的分水岭。我做过实测同样导入1万行数据逐条executeUpdate()约12秒addBatch()executeBatch()每500条提交一次约1.8秒差距接近7倍。原因在于逐条执行时每次都要经历网络往返、SQL解析、事务日志写入。批量提交把这些开销合并了。所以批量插入是必须的没有商量余地。但批量也有讲究不能一次性把10万条全塞进batch那样内存会爆。我的做法是每500条执行一次executeBatch()并clearBatch()同时配合手动事务控制。500这个数字是经验值太小了提交频繁太大了内存压力大500到1000之间都合理。3. 核心细节解析与实操要点3.1 Excel表头与数据库字段的映射设计导入功能最容易出问题的地方就是“用户传的Excel列顺序和数据库字段对不上”。有人第一列是姓名有人第一列是工号你如果写死按列索引取值换个模板就崩。我的做法是按表头名称映射而不是按列索引。具体来说先读第一行作为表头建立一个MapString, Integerkey是表头文字value是列索引。然后每一行数据通过表头名去取对应的列值。这样即使用户调整了列顺序只要表头文字不变代码就不用改。// 读取表头建立名称到列索引的映射 Row headerRow sheet.getRow(0); MapString, Integer headerMap new HashMap(); for (int i 0; i headerRow.getLastCellNum(); i) { Cell cell headerRow.getCell(i); if (cell ! null) { headerMap.put(cell.getStringCellValue().trim(), i); } } // 后续按名称取值 int nameCol headerMap.get(姓名); int phoneCol headerMap.get(手机号);注意表头文字一定要trim()因为用户从别处复制粘贴时经常带着看不见的空格导致headerMap.get(姓名)返回null然后你就收获一个NullPointerException。3.2 单元格取值类型判断是绕不过去的坎POI里单元格有类型之分字符串、数字、布尔、日期、公式。如果你不管三七二十一直接getStringCellValue()遇到数字单元格会抛IllegalStateException。手机号、身份证号这种长数字Excel经常自动转成科学计数法直接取字符串会变成1.38E10数据就废了。所以必须写一个通用的单元格取值方法根据类型分别处理public static String getCellValue(Cell cell) { if (cell null) return ; CellType type cell.getCellType(); switch (type) { case STRING: return cell.getStringCellValue().trim(); case NUMERIC: // 判断是不是日期 if (DateUtil.isCellDateFormatted(cell)) { SimpleDateFormat sdf new SimpleDateFormat(yyyy-MM-dd); return sdf.format(cell.getDateCellValue()); } // 数字避免科学计数法用BigDecimal转纯字符串 double d cell.getNumericCellValue(); BigDecimal bd BigDecimal.valueOf(d); return bd.stripTrailingZeros().toPlainString(); case BOOLEAN: return String.valueOf(cell.getBooleanCellValue()); case FORMULA: return cell.getCellFormula(); default: return ; } }这里有个关键点数字用BigDecimal.valueOf(d).stripTrailingZeros().toPlainString()能把1.38E10还原成13800000000也能把3.0变成3。手机号、身份证号这类字段就靠这一步救回来。3.3 数据校验与去重别让脏数据进库导入之前必须校验否则数据库里会混进一堆空行、重复行、格式错误的行。我的校验分三层必填校验关键字段如姓名、工号为空的行直接跳过记录到失败列表。格式校验手机号必须是11位数字邮箱必须含日期必须能解析。重复校验用业务主键如工号去数据库查是否已存在存在则更新或跳过。去重这块有两种策略看业务需求跳过重复已存在的直接忽略适合“只增不改”的场景。覆盖更新已存在的执行UPDATE适合“以Excel为准”的场景。我一般用INSERT ... ON DUPLICATE KEY UPDATEMySQL或者先查后判前者一条SQL搞定后者逻辑更清晰但多一次查询。数据量不大时用后者几万行以上用前者。3.4 事务控制导入失败必须能回滚导入最怕的就是“导了一半失败了数据库里一半新数据一半旧数据乱成一锅粥”。所以整个导入过程必须包在一个事务里要么全成功要么全回滚。Connection conn null; try { conn dataSource.getConnection(); conn.setAutoCommit(false); // 关闭自动提交开启事务 // ... 批量插入 ... conn.commit(); // 全部成功才提交 } catch (Exception e) { if (conn ! null) { conn.rollback(); // 任何异常都回滚 } throw e; } finally { if (conn ! null) conn.close(); }提示如果业务允许“部分成功”那就不要用大事务改成每批独立提交并记录失败行。但大多数导入场景用户期望的是“要么全进要么全不进”所以大事务更符合直觉。4. 完整实操流程与关键代码实现4.1 第一步JSP上传页面怎么写才干净页面部分我只保留最核心的东西一个表单、一个文件输入框、一个提交按钮外加一个结果展示区。form action${pageContext.request.contextPath}/importExcel methodpost enctypemultipart/form-data input typefile nameexcelFile accept.xls,.xlsx required button typesubmit导入/button /form几个细节enctypemultipart/form-data是必须的漏了的话后台拿不到文件只会拿到文件名。accept.xls,.xlsx只是给浏览器一个提示不是强制后台仍要校验扩展名。required属性做前端必填校验减少无效请求。结果展示我用JSP的EL表达式渲染Servlet传回的属性c:if test${not empty result} p成功${result.successCount} 条/p p失败${result.failCount} 条/p ul c:forEach items${result.errors} varerr li${err}/li /c:forEach /ul /c:if4.2 第二步Servlet接收文件并解析Servlet的doPost方法是核心入口。流程是拿到Part、校验文件类型、用POI打开工作簿、遍历行、组装数据、批量入库。protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Part filePart request.getPart(excelFile); String fileName filePart.getSubmittedFileName(); // 校验扩展名 if (!fileName.toLowerCase().endsWith(.xls) !fileName.toLowerCase().endsWith(.xlsx)) { request.setAttribute(result, ImportResult.error(只支持xls和xlsx格式)); request.getRequestDispatcher(/upload.jsp).forward(request, response); return; } ImportResult result new ImportResult(); try (InputStream is filePart.getInputStream(); Workbook workbook WorkbookFactory.create(is)) { Sheet sheet workbook.getSheetAt(0); // ... 解析和入库逻辑 ... } catch (Exception e) { result ImportResult.error(解析失败 e.getMessage()); } request.setAttribute(result, result); request.getRequestDispatcher(/upload.jsp).forward(request, response); }WorkbookFactory.create(is)会自动根据文件头判断是HSSF还是XSSF不用你手动判断扩展名很省心。4.3 第三步遍历行并组装批量参数解析部分我习惯从第1行开始第0行是表头逐行读取组装成对象列表再统一入库。ListUser userList new ArrayList(); int lastRow sheet.getLastRowNum(); for (int i 1; i lastRow; i) { Row row sheet.getRow(i); if (row null) continue; // 空行跳过 String name getCellValue(row.getCell(headerMap.get(姓名))); String phone getCellValue(row.getCell(headerMap.get(手机号))); // 必填校验 if (name.isEmpty()) { result.addError(第 (i 1) 行姓名为空已跳过); continue; } User user new User(); user.setName(name); user.setPhone(phone); userList.add(user); }这里i 1是因为Excel行号从1开始而代码索引从0开始报错时给用户看的行号要加1否则用户按提示去找会找错行体验很差。4.4 第四步批量插入与事务提交组装完列表后就是批量入库。核心是addBatch()攒够一批就executeBatch()。String sql INSERT INTO user (name, phone) VALUES (?, ?); try (Connection conn dataSource.getConnection(); PreparedStatement ps conn.prepareStatement(sql)) { conn.setAutoCommit(false); int batchSize 500; int count 0; for (User user : userList) { ps.setString(1, user.getName()); ps.setString(2, user.getPhone()); ps.addBatch(); if (count % batchSize 0) { ps.executeBatch(); ps.clearBatch(); } } // 处理最后不足一批的 if (count % batchSize ! 0) { ps.executeBatch(); } conn.commit(); result.setSuccessCount(userList.size()); } catch (SQLException e) { // 回滚逻辑 result ImportResult.error(入库失败 e.getMessage()); }batchSize设500是我反复测试后的经验值。你可以根据自己数据库的max_allowed_packet参数调整但一般500到1000都很稳。4.5 第五步内存优化——大文件怎么办如果用户传的是10万行的xlsxXSSFWorkbook会把整个文件加载进内存很容易OOM。这时候有两个选择用SXSSFWorkbook这是POI提供的流式写入版本但它是写Excel用的读的话不适用。用事件模型XSSFReader基于SAX的流式读取内存占用极低但代码复杂需要自己处理各种事件。我的建议是如果文件不超过5万行直接用XSSFWorkbook简单可靠超过5万行考虑用XSSFReader事件模型或者干脆限制上传文件大小让用户分批导。实际业务中超过5万行的Excel导入需求并不多限制大小是最省事的方案。5. 常见问题与排查技巧实录5.1 上传后Servlet里getPart返回null这是新手最常遇到的问题。原因几乎都是表单漏了enctypemultipart/form-data或者Servlet漏了MultipartConfig注解。前者导致请求不是multipart格式后者导致容器不知道怎么解析。两个都检查一遍基本能解决。还有一种情况是name属性对不上。表单里是nameexcelFileServlet里就必须getPart(excelFile)大小写敏感一个字母都不能差。5.2 数字变成科学计数法前面提过用BigDecimal.valueOf(d).stripTrailingZeros().toPlainString()解决。但还有一种情况如果单元格本身是文本格式但内容是数字POI会按STRING类型返回这时候直接取字符串就行不会有科学计数法问题。所以关键是先判断类型再决定怎么取。5.3 日期读出来是数字Excel里的日期本质是一个数字从1900年1月1日算起的天数POI默认按NUMERIC返回。必须用DateUtil.isCellDateFormatted(cell)判断是日期才用getDateCellValue()否则会得到45000这种鬼东西。5.4 批量插入报“Packet for query is too large”这是MySQL的max_allowed_packet限制。解决办法有两个一是调大数据库参数二是减小batchSize。我一般选后者把500降到200问题就没了。改数据库参数需要重启影响面大不如改代码。5.5 导入后中文乱码乱码通常出在两个地方一是JSP页面没设pageEncodingUTF-8二是数据库连接URL没加characterEncodingutf8。两个都检查。另外Excel文件本身的编码一般没问题POI读取时是按Unicode处理的所以乱码基本是页面或数据库连接的问题。5.6 常见问题速查表现象最可能原因解决方向getPart返回null缺enctype或缺MultipartConfig补注解和表单属性数字变科学计数法直接getStringCellValue按类型取值BigDecimal日期变数字未判断日期格式DateUtil.isCellDateFormatted批量插入报错batch太大减小batchSize中文乱码编码未统一页面和连接都设UTF-8导入慢逐条插入改批量addBatch内存溢出文件太大限制大小或流式读取5.7 几个我踩过的坑第一个坑表头有空单元格。用户可能在表头行中间留了空列导致headerRow.getCell(i)返回nullgetStringCellValue()直接NPE。所以取表头时一定要判空。第二个坑合并单元格。如果Excel里有合并单元格只有左上角那个格子有值其他格子是null。POI不会自动帮你填充需要自己处理sheet.getMergedRegions()。这个需求不常见但遇到了很头疼我的做法是提示用户“请勿使用合并单元格”。第三个坑公式单元格。如果单元格是公式getCellType()返回FORMULA直接取字符串会拿到公式本身而不是计算结果。需要用FormulaEvaluator求值FormulaEvaluator evaluator workbook.getCreationHelper().createFormulaEvaluator(); CellValue cellValue evaluator.evaluate(cell);不过实际导入场景用户很少用公式遇到了提示一下即可。6. 性能调优与扩展思路6.1 从1万行到10万行的优化路径如果你的导入量级上去了光靠批量插入还不够可以叠加这几个优化关闭自动提交这个前面说了必须做。用rewriteBatchedStatementstrueMySQL连接URL加这个参数能把批量插入重写成一条大SQL性能再提升一截。异步导入文件上传后立即返回“正在导入”后台开线程处理用户刷新页面看进度。适合超大文件。分片读取用XSSFReader事件模型边读边入库内存占用恒定。6.2 导入进度反馈怎么做同步导入时用户点完按钮只能干等体验不好。我的做法是用session存一个进度对象Servlet每处理一批就更新进度前端用AJAX轮询查询进度接口。这样用户能看到“已处理3000/10000条”心里有底。6.3 模板下载功能顺手加上导入功能最好配一个“下载模板”按钮让用户按标准格式填。模板就是一个只有表头的空Excel用POI生成即可。这个小功能能大幅降低用户填错格式的概率非常值得做。Workbook wb new XSSFWorkbook(); Sheet sheet wb.createSheet(模板); Row header sheet.createRow(0); header.createCell(0).setCellValue(姓名); header.createCell(1).setCellValue(手机号); // 输出到response的OutputStream6.4 导入日志留痕生产环境里导入操作一定要留日志谁导的、什么时候、导了多少条、失败多少条。出了问题能追溯。我一般单独建一张import_log表记录这些信息比翻服务器日志方便得多。7. 一些个人体会和后续可扩展的方向这套方案我在好几个内部系统里用过从几千行到几万行都跑得挺稳。核心就三句话上传用Part API解析用POI按类型取值入库用批量加事务。把这三块吃透剩下的都是细节。如果后续要扩展我建议往这几个方向走一是把解析逻辑抽成独立的ServiceServlet只做参数接收和结果返回方便单元测试二是支持多Sheet导入一个文件里多个工作表分别对应不同的表三是加上字段映射配置让管理员在页面上配置“Excel第几列对应数据库哪个字段”这样连代码都不用改就能适配新模板。最后分享一个小技巧导入前先做一次“预检”。用户选完文件后先解析前10行展示给用户看让用户确认“表头对不对、数据格式对不对”确认无误再正式导入。这一步能挡掉80%的格式错误比导完再报错体验好太多。我自从加了这个预检步骤用户反馈的“导入失败”问题少了一大半。

相关新闻

FPGA课设豆浆机面板:Verilog状态机与消抖实战解析

FPGA课设豆浆机面板:Verilog状态机与消抖实战解析

简介:一份FPGA课程设计用的豆浆机面板工程包,面向电子类本科生和HDL初学者,帮助解决豆浆机控制逻辑的建模与实现问题。整个设计使用Verilog硬件描述语言完成,系统包含模式选择、启动停止、加热和电机控制等功能,可切换…

2026/10/15 18:50:07 阅读更多 →
Vercel 一边开源 Skills 想统一 AI 工具层,一边造 Zero 新语言:野心会不会太大

Vercel 一边开源 Skills 想统一 AI 工具层,一边造 Zero 新语言:野心会不会太大

Vercel 一边开源 Skills 想统一 AI 工具层,一边造 Zero 新语言:野心会不会太大 【免费下载链接】skills The open agent skills tool - npx skills 项目地址: https://gitcode.com/GitHub_Trending/ad/skills 2026 年,Vercel 同时在两…

2026/10/15 18:50:07 阅读更多 →
WebSocket语音收发实战:Python实时通话服务器与客户端

WebSocket语音收发实战:Python实时通话服务器与客户端

简介:基于WebSocket协议实现语音实时收发的Python服务器与客户端代码,适合有Python基础、希望快速搭建双向语音通信原型的开发者。资源包含服务器端与客户端两个主要脚本,采用Flask-SocketIO处理服务端连接与消息事件,客户端通过w…

2026/10/15 18:50:07 阅读更多 →

最新新闻

PyTorch深度学习实战:从环境搭建到模型训练与调试的完整指南

PyTorch深度学习实战:从环境搭建到模型训练与调试的完整指南

1. 从零上手PyTorch:为什么它成了深度学习项目的默认起点如果你最近打算认真做点深度学习相关的项目,不管是图像分类、文本生成还是推荐系统,大概率绕不开PyTorch这个名字。我身边不少做算法的朋友,从早期用别的框架折腾静态图&am…

2026/10/15 23:43:59 阅读更多 →
自用Agent全面功能测试:从工具调用到可靠性边界的实战梳理

自用Agent全面功能测试:从工具调用到可靠性边界的实战梳理

1. 为什么自用Agent必须做一次完整的“摸底测试”自用Agent这两年几乎是个人开发者、重度效率工具党的标配。我自己也是从最开始玩票性质地搭一个“能聊天的壳子”,到后来慢慢把日常的文本处理、信息汇总、定时任务都塞进去,它已经变成一个真正在干活的东…

2026/10/15 23:43:59 阅读更多 →
TensorFlow 2.x 实战入门:从环境搭建到模型部署的完整指南

TensorFlow 2.x 实战入门:从环境搭建到模型部署的完整指南

1. 从零上手 TensorFlow:先搞清楚它到底在解决什么问题很多人第一次接触 TensorFlow,是被“深度学习”“神经网络”这些词吓住的,觉得门槛高得离谱。但我带过不少刚入行的同学,真正卡住他们的往往不是数学,而是没弄明白…

2026/10/15 23:43:59 阅读更多 →
COMSOL模拟速凝浆液动水扩散规律与工程应用

COMSOL模拟速凝浆液动水扩散规律与工程应用

1. 项目背景与核心问题裂隙岩体注浆是地下工程防渗加固的关键技术,而速凝浆液在动水条件下的扩散行为直接决定了工程效果。传统经验公式法难以准确反映浆液与动水的相互作用机制,这促使我们采用COMSOL Multiphysics这一多物理场仿真利器,对两…

2026/10/15 23:43:59 阅读更多 →
390.安卓底层分区与启动链,EDL/BROM 救砖,自动化批量烧录完整源码

390.安卓底层分区与启动链,EDL/BROM 救砖,自动化批量烧录完整源码

摘要 本文面向具备一定计算机基础的开发者与维修人员,系统性地讲解安卓手机刷机与维修的底层逻辑。文章从安卓分区表与引导链原理出发,结合高通与联发科两大平台的硬件差异,提供一套完整的从解锁引导程序到线刷救砖的实操流程。同时,本文附带一个基于 Python 的自动化刷机脚…

2026/10/15 23:43:59 阅读更多 →
MXSPyCOM实战:Python COM封装驱动3ds Max的打包与调用全解析

MXSPyCOM实战:Python COM封装驱动3ds Max的打包与调用全解析

简介:MXSPyCOM源代码包专为3ds Max开发者、技术美术与流程工具使用者设计,通过将MaxScript和Python脚本统一交由外部编辑器编写、调试与执行,有效弥补内置编辑器功能单一的不足,适用于影视、游戏及可视化项目中需要批量处理、自定…

2026/10/15 23:42:58 阅读更多 →

日新闻

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/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

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

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

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

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

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

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 9:49:14 阅读更多 →