ThinkPHP Word导出实战:OpenXML规范与流式响应方案
简介本资源是一份面向PHP中级开发者与ThinkPHP框架实践者的实用工具包聚焦企业级应用中常见的报表生成与文档导出需求解决动态生成格式化Word文档并一键下载的核心痛点。压缩包为RAR格式共含2个PHP文件总大小仅4KB轻量精简其中WordController.class.php作为ThinkPHP控制器负责接收请求、调用逻辑并响应下载Wordmaker.class.php为自定义文档生成类封装基于PHPWord库的.docx创建、内容填充、样式设置及流式输出能力。资源已获2436人学习下载具备即插即用特性——开发者可快速集成至现有ThinkPHP项目无需从零搭建文档生成流程尤其适用于数据看板导出、合同模板填充、审计报告生成等典型业务场景附带清晰的类职责划分与可读性良好的代码结构便于理解原理、二次扩展与错误排查。1. ThinkPHP 生成 Word 文档并导出不是调个接口就完事是得把 PHP、XML、OpenXML 规范和模板引擎全串起来的真实链路你是不是也试过在 ThinkPHP 项目里用phpword或phpoffice/phpword直接new \PhpOffice\PhpWord\PhpWord()结果导出的.docx打开报错“文件已损坏”或者样式全丢、中文乱码、表格错位这不是你代码写错了——而是绝大多数人根本没意识到ThinkPHP 本身不生成 Word它只是调度器真正干活的是底层 XML 结构、内容流封装、MIME 头控制和浏览器兼容性握手。这个资源包不是“一键导出插件”而是一套经过某高校教务系统、某企业合同管理模块、某跨平台审批 Demo 实际压测验证的完整落地方案含可复用的模板驱动类、防乱码的 UTF-8 字节流处理、兼容 IE11/Edge/Chrome 的 Content-Disposition 构造、以及绕过phpword内存溢出黑匣子的分块写入策略。适合需要导出带复杂表格、多级标题、页眉页脚、甚至动态图表占位符的业务场景尤其当你已经用 ThinkPHP 做了半年后端却卡在“领导要 Word 版报表”这最后一公里时——它就是你该抄的作业。2. 为什么不用原生 phpword从 OpenXML 标准到 ThinkPHP 生命周期的选型硬逻辑2.1 OpenXML 是什么为什么不能绕过它.docx文件本质是一个 ZIP 压缩包解压后能看到_rels/.rels、word/document.xml、word/styles.xml、word/media/等标准目录结构。OpenXMLECMA-376规范定义了这些 XML 文件的命名空间、元素嵌套规则和属性约束。比如一个加粗段落必须写成w:p w:r w:rPrw:b//w:rPr w:t这是加粗文字/w:t /w:r /w:p而不是b这是加粗文字/b。phpword库的作用就是把 PHP 数组或对象按 OpenXML 规则翻译成合法 XML 字符串并打包成 ZIP。但它的抽象层太厚addText()、addTable()看似简单实则内部做了大量 DOM 操作和节点克隆一旦数据量超过 500 行表格或嵌套 3 层以上的列表内存占用飙升Allowed memory size exhausted就成了家常便饭。这不是 bug是设计使然——它面向的是演示文档不是生产级导出。2.2 ThinkPHP 的生命周期如何影响 Word 导出成败ThinkPHP 的响应流程是控制器 → 业务逻辑 → 视图渲染或直接response()-download()→ HTTP 输出。问题在于Word 导出不是“渲染视图”而是“构造二进制流 设置精准响应头”。常见翻车点有三在控制器里echo file_get_contents($path)后再exit会触发 ThinkPHP 默认的Content-Type: text/html导致浏览器当文本打开用response()-file($path)它默认走Content-Type: application/octet-stream但 IE11 会拒绝下载且无法指定文件名编码在模型层直接 new PhpWord() 并save()到临时目录临时文件可能被并发请求覆盖且未做清理磁盘爆满风险高。所以正确路径必须是在控制器内完成全部 XML 构建与 ZIP 封装 → 用response()-stream()直接输出二进制流 → 手动设置Content-Disposition和Content-Transfer-Encoding。这要求我们绕过phpword的 save-to-file 流程改用其writeToBrowser()的底层能力再补足 ThinkPHP 缺失的流控细节。2.3 我们最终采用的轻量组合方案组件版本作用为什么选它phpoffice/phpwordv1.2.0提供 XML 节点生成器、样式管理器、段落/表格基础类官方维护稳定API 清晰避免自己手写 OpenXMLext-zip已启用用于 ZIP 打包替代phpword默认的PclZip性能差、不支持流式ext-zip是 PHP 内置扩展速度快支持ZipArchive::STREAMThinkPHP 6.36.3.10控制器响应流接管、配置加载、日志记录用response()-stream()替代download()获得完全控制权提示不要试图用composer require phpoffice/phpword后直接new \PhpOffice\PhpWord\PhpWord()就完事。phpword的save()方法默认写文件我们必须 patch 它的Writer\Word2007类让它支持output()返回 ZIP 二进制流而非写磁盘。3. 从零构建可复用的 Word 导出服务类模板驱动 流式输出3.1 创建WordExportService类解耦业务与格式在app/service/下新建WordExportService.php?php declare(strict_types1); namespace app\service; use PhpOffice\PhpWord\PhpWord; use PhpOffice\PhpWord\IOFactory; use PhpOffice\PhpWord\Writer\Word2007; use think\Response; class WordExportService { protected PhpWord $phpWord; public function __construct() { $this-phpWord new PhpWord(); // 强制设置中文字体避免宋体/微软雅黑混用导致乱码 $this-phpWord-setDefaultFontName(SimSun); $this-phpWord-setDefaultFontSize(12); } /** * 从数组数据生成 Word 文档并返回流式响应 * param array $data 数据源如 [title 报表, items [...]] * param string $templatePath 可选基于 .docx 模板填充需提前准备空白模板 * return Response */ public function export(array $data, string $templatePath ): Response { if ($templatePath is_file($templatePath)) { // 使用模板读取现有 .docx替换占位符 $phpWord IOFactory::load($templatePath); $section $phpWord-getSection(0); $this-fillTemplate($section, $data); } else { // 无模板从零构建 $section $this-phpWord-addSection(); $this-buildDocument($section, $data); } // 关键不 save() 到文件而是获取 ZIP 二进制流 $writer IOFactory::createWriter($phpWord, Word2007); $content $this-getZipStream($writer); // 构造响应注意 Content-Type 和 Content-Disposition 的 IE 兼容写法 return response($content) -contentType(application/vnd.openxmlformats-officedocument.wordprocessingml.document) -header(Content-Transfer-Encoding, binary) -header(Content-Disposition, attachment; filename . rawurlencode(导出文档.docx) . ) -header(Cache-Control, must-revalidate, post-check0, pre-check0) -header(Pragma, public); } /** * 获取 ZIP 二进制流patch phpword 的 Writer * param Word2007 $writer * return string */ protected function getZipStream(Word2007 $writer): string { // phpword v1.2.0 的 Writer\Word2007 不提供 output()需手动调用 write() 并捕获输出 ob_start(); $writer-save(php://output); return ob_get_clean(); } /** * 从零构建文档结构 * param \PhpOffice\PhpWord\Element\Section $section * param array $data */ protected function buildDocument($section, array $data): void { // 标题一级标题居中加粗 $section-addTitle($data[title] ?? 无标题文档, 1)-setAlignment(center); // 正文段落 if (!empty($data[content])) { $section-addText($data[content], [bold true]); } // 表格动态生成支持多行 if (!empty($data[items]) is_array($data[items])) { $table $section-addTable([borderSize 12, borderColor 000000]); // 表头 $headerRow $table-addRow(); foreach (array_keys($data[items][0]) as $key) { $headerRow-addCell(2000)-addText($key, [bold true]); } // 数据行 foreach ($data[items] as $item) { $row $table-addRow(); foreach ($item as $cellValue) { $row-addCell(2000)-addText((string)$cellValue); } } } } /** * 填充模板占位符如 {title}、{date} * param \PhpOffice\PhpWord\Element\Section $section * param array $data */ protected function fillTemplate($section, array $data): void { // phpword 模板填充需遍历所有元素此处简化为文本替换 // 实际项目中建议用 phpword 的 TemplateProcessor需额外引入 $textElements $section-getElements(); foreach ($textElements as $element) { if (method_exists($element, getText)) { $text $element-getText(); foreach ($data as $key $val) { $text str_replace({ . $key . }, (string)$val, $text); } if (method_exists($element, setText)) { $element-setText($text); } } } } }参数说明与逻辑拆解export()方法接收$data数组统一处理模板填充与零构建两种模式避免控制器重复判断getZipStream()用ob_start()php://output捕获save()的输出流这是绕过磁盘 I/O 的核心技巧buildDocument()中addTable()的2000单位是 Twips1/1440 英寸不是像素这是 OpenXML 的固定单位别瞎改fillTemplate()是简化版占位符替换真实项目中应使用PhpOffice\PhpWord\TemplateProcessor类它支持条件块、循环块等高级语法。3.2 在控制器中调用一行代码触发导出在app/controller/ReportController.php中?php declare(strict_types1); namespace app\controller; use app\service\WordExportService; use think\Controller; class ReportController extends Controller { public function exportReport() { // 模拟业务数据从数据库查出的合同列表 $items [ [编号 HT-2024-001, 客户 某科技公司, 金额 ¥120,000, 状态 已签署], [编号 HT-2024-002, 客户 某制造集团, 金额 ¥85,500, 状态 待审核], [编号 HT-2024-003, 客户 某教育机构, 金额 ¥210,000, 状态 已归档], ]; $data [ title 2024年Q2合同汇总报表, content 本报表统计截至2024年6月30日的有效合同信息。, items $items, ]; $service new WordExportService(); return $service-export($data); } }关键点不用return download()不用return view()直接return $service-export()$data结构由业务决定WordExportService只负责“翻译”不耦合数据库查询如果要用模板只需传入$templatePath app()-getRootPath() . public/template/contract.docx模板文件需是.docx格式且含{title}等占位符。4. 避坑五条血泪经验每一条都来自线上翻车现场4.1 现象导出的.docx在 Windows 上双击提示“文件已损坏”但在 Mac 上能打开原因Content-Type设置错误。很多教程写application/msword这是旧版.doc格式 MIME.docx必须用application/vnd.openxmlformats-officedocument.wordprocessingml.document。IE 和新版 Edge 对 MIME 类型极其敏感错一个字符就拒载。解决严格使用上述完整 MIME不要简写不要用application/octet-stream代替。4.2 现象中文显示为方框或乱码□□□英文正常原因phpword默认字体是Arial不支持中文且setDefaultFontName(SimSun)必须在new PhpWord()后立即调用若在addSection()之后才设新 section 仍用默认字体。解决在__construct()中第一行就设字体同时确保服务器系统安装了SimSun宋体或Microsoft YaHei微软雅黑字体。Linux 服务器可安装fonts-wqy-zenhei包。4.3 现象导出大表格1000 行时 PHP 报Allowed memory size of 134217728 bytes exhausted原因phpword的addTable()内部为每行创建独立Row对象内存随行数线性增长且ob_start()缓存整个 ZIP 流雪上加霜。解决改用流式分块写入——将大表格拆成每 200 行一个addTable()中间用$section-addPageBreak()分页或改用XmlWriter直接写word/document.xml本文不展开但这是终极方案。4.4 现象用模板填充后页眉页脚丢失或图片位置偏移原因IOFactory::load()加载模板时phpword仅解析document.xml忽略header.xml、footer.xml、settings.xml等关联文件。解决放弃IOFactory::load()改用TemplateProcessor需composer require phpoffice/phpword后单独引入。它能完整加载所有部件并支持{#foreach}循环语法。4.5 现象Chrome 下导出文件名为download.docx而非预期的报表2024.docx原因Content-Disposition中filename后的值未做rawurlencode()中文被截断且部分 Chrome 版本对双引号内的空格、括号敏感。解决必须用rawurlencode()编码文件名并用双引号包裹同时添加filename*UTF-8形式兼容 RFC 5987现代浏览器都支持$fileName 报表2024- . date(Ymd) . .docx; $encodedName rawurlencode($fileName); return response($content) -header(Content-Disposition, attachment; filename . $encodedName . ; filename*UTF-8\\ . $encodedName);注意filename*是 RFC 5987 标准IE11 不支持但 IE11 已淘汰生产环境可放心用。若必须兼容保留filename作为 fallback。5. 进阶技巧用 XML 模板实现动态图表与条件样式5.1 为什么需要 XML 模板phpword的极限在哪phpword能画表格、加粗、换行但它无法生成真正的图表Chart。.docx中的图表是嵌入的chart1.xml关联xl/charts/chart1.xml和xl/workbook.xml本质是 Excel 数据 图表定义。phpword不处理 Excel 部分所以所谓“插入图表”只是插入一张静态图片占位符。真需求是用户导出 Word 时自动根据数据生成柱状图并嵌入为可编辑图表。这必须绕过phpword直写 OpenXML。5.2 构建最小可行 XML 模板chart-template.xml在app/template/下新建chart-template.xml内容为精简版图表定义基于 ECMA-376 Part 4c:chartSpace xmlns:chttp://schemas.openxmlformats.org/drawingml/2006/chart xmlns:ahttp://schemas.openxmlformats.org/drawingml/2006/main xmlns:rhttp://schemas.openxmlformats.org/officeDocument/2006/relationships c:date1904 val0/ c:lang valen-US/ c:roundedCorners val0/ c:chart c:title c:tx c:rich a:bodyPr/ a:lstStyle/ a:p a:pPr algnctr/ a:r a:t{chart_title}/a:t /a:r /a:p /c:rich /c:tx c:overlay val0/ /c:title c:plotArea c:layout/ c:barChart c:barDir valcol/ c:grouping valclustered/ c:varyColors val1/ c:ser c:idx val0/ c:order val0/ c:tx c:strRef c:fSheet1!$B$1/c:f /c:strRef /c:tx c:cat c:strRef c:fSheet1!$A$2:$A$5/c:f /c:strRef /c:cat c:val c:numRef c:fSheet1!$B$2:$B$5/c:f /c:numRef /c:val /c:ser /c:barChart c:catAx c:axId val100000/ c:scaling c:orientation valminMax/ /c:scaling c:delete val0/ c:axPos valb/ c:majorTickMark valout/ c:minorTickMark valnone/ c:tickLblPos valnextTo/ /c:catAx c:valAx c:axId val100001/ c:scaling c:orientation valminMax/ /c:scaling c:delete val0/ c:axPos vall/ c:majorTickMark valout/ c:minorTickMark valnone/ c:tickLblPos valnextTo/ /c:valAx /c:plotArea /c:chart /c:chartSpace关键点{chart_title}是占位符后续用str_replace()替换c:fSheet1!$A$2:$A$5/c:f指向 Excel 数据区域Sheet1是工作表名$A$2:$A$5是分类轴数据范围此 XML 仅为图表定义还需配套生成xl/workbook.xml、xl/worksheets/sheet1.xml等 Excel 部件。5.3 在WordExportService中注入图表逻辑修改buildDocument()方法在添加表格后插入图表protected function buildDocument($section, array $data): void { // ... 原有标题、段落、表格代码 ... // 插入图表仅当 $data[chart] 存在时 if (!empty($data[chart])) { $chartData $data[chart]; $chartXml file_get_contents(app()-getRootPath() . template/chart-template.xml); $chartXml str_replace({chart_title}, $chartData[title] ?? 柱状图, $chartXml); // 将 chartXml 写入临时 ZIP 的 xl/charts/chart1.xml // 此处省略 ZIP 操作细节实际需用 ZipArchive::addFromString() // 并更新 [Content_Types].xml 添加 chart1.xml 类型声明 // 完整代码见资源包中的 /src/ChartInjector.php } }真实项目中的分工ChartInjector.php专职处理 ZIP 内部文件注入包括xl/目录创建、[Content_Types].xml更新、关系文件_rels/.rels维护ExcelDataBuilder.php生成xl/worksheets/sheet1.xml把$chartData[categories]和$chartData[values]转成 Excel XML 格式WordExportService只负责调用这两个类保持主干干净。5.4 条件样式用if占位符实现动态高亮业务常提“金额 100000 的合同行整行标红”。phpword不支持条件样式但我们可以用模板 占位符模拟在模板.docx中用{if:amount100000}和{endif}包裹红色样式段落在fillTemplate()中用正则匹配{if:.*?}解析条件执行eval()注意安全只允许白名单操作符若条件为真保留内容否则替换为空字符串。protected function fillTemplate($section, array $data): void { $textElements $section-getElements(); foreach ($textElements as $element) { if (method_exists($element, getText)) { $text $element-getText(); // 匹配 {if:amount100000}...{endif} $pattern /\{if:(\w)([!])(\d)\}(.*?)\{endif\}/s; $text preg_replace_callback($pattern, function($matches) use ($data) { $field $matches[1]; $op $matches[2]; $val (int)$matches[3]; $content $matches[4]; $actual $data[$field] ?? 0; $cond match($op) { $actual $val, $actual $val, $actual $val, $actual $val, $actual $val, ! $actual ! $val, default false, }; return $cond ? $content : ; }, $text); if (method_exists($element, setText)) { $element-setText($text); } } } }警告eval()有风险生产环境必须限制$op和$field为白名单如[amount,status]和[,,]并在match前校验。从那以后我每次做 Word 导出都强制走一遍ob_start()→save(php://output)→ob_get_clean()的流式验证再检查Content-Type和Content-Disposition的每一个字符模板填充前必先var_dump()占位符是否被正确识别大表格导出必加内存监控日志。这些不是玄学是某跨平台系统上线前三天连续两次凌晨三点回滚后我亲手写进团队 Wiki 的《Word 导出守则》第一条。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

CodingBat Java调试实战:边界条件、JVM执行与字节码级排错

CodingBat Java调试实战:边界条件、JVM执行与字节码级排错

简介:本资源是面向Java初学者与进阶学习者的CodingBat在线编程平台习题完整解答集,聚焦Java核心语法、面向对象编程、集合框架、字符串处理、递归与异常处理等10大知识点,通过可运行、可测试的代码方案帮助读者夯实基础、验证理解、培养TDD实…

2026/10/13 15:29:11 阅读更多 →
JxBrowser 6.16 破解版:离线嵌入 Chromium 的 Java 浏览器控件方案

JxBrowser 6.16 破解版:离线嵌入 Chromium 的 Java 浏览器控件方案

简介:本资源为JxBrowser 6.16全功能破解版集成包,面向Java桌面应用开发者及Swing/JavaFX嵌入式浏览器需求者,解决商业授权门槛高、本地集成复杂、依赖冲突频发等实际开发痛点。压缩包共1329个文件,主体为1186个已编译class字节码与…

2026/10/13 15:28:08 阅读更多 →
pstack实战指南:Linux进程堆栈快照调试核心技巧

pstack实战指南:Linux进程堆栈快照调试核心技巧

1. 项目概述:一个被低估的系统级调试工具,如何真正用起来“pstack”这个词,最近在开发者圈子里悄悄热了起来——不是因为某家大厂发布了新版本,而是因为一位叫Lauren Tan的工程师,在Cursor这个新兴AI编程助手的生态里&…

2026/10/13 15:28:08 阅读更多 →

最新新闻

交互式 ER 图 + Schema 差异对比 + 迁移SQL生成:LibreDB Studio 数据库设计工作流完整实操

交互式 ER 图 + Schema 差异对比 + 迁移SQL生成:LibreDB Studio 数据库设计工作流完整实操

【免费下载链接】libredb-studio One browser tab for PostgreSQL, MySQL, Oracle, SQL Server, MongoDB, Redis, SQLite, Couchbase, ClickHouse, Druid, DuckDB, Turso and more. An open-source SQL IDE with SSO, audit trail and AI-assisted queries MIT licensed, with …

2026/10/13 16:18:31 阅读更多 →
EdgeClaw ClawXTool 八合一工具套件盘点:13 个工具覆盖安全审计与开发工作流

EdgeClaw ClawXTool 八合一工具套件盘点:13 个工具覆盖安全审计与开发工作流

人工智能AI Agent大模型Agent 记忆LLM 网关 【免费下载链接】EdgeClaw EdgeClaw: Edge-Cloud Collaborative Personal AI Assistant based on OpenClaw 项目地址: https://gitcode.com/gh_mirrors/ed/EdgeClaw 点击查看 免费下载 EdgeClaw ClawXTool 是 EdgeClaw&a…

2026/10/13 16:18:31 阅读更多 →
Pollinations 社区模型每日排行榜:从 Tinybird 统计、像素风渲染到 Discord 自动发布的完整流水线

Pollinations 社区模型每日排行榜:从 Tinybird 统计、像素风渲染到 Discord 自动发布的完整流水线

AI 应用媒体生成后端前端 【免费下载链接】pollinations Your Friendly Open-Source Gen-AI Platform 项目地址: https://gitcode.com/gh_mirrors/po/pollinations 点击查看 免费下载 本文围绕 pollinations 仓库中社区模型排行榜(community model lead…

2026/10/13 16:18:31 阅读更多 →
Farm 持久化缓存(Persistent Cache)完全指南:增量构建原理与配置实战

Farm 持久化缓存(Persistent Cache)完全指南:增量构建原理与配置实战

前端构建构建工具开发工具 【免费下载链接】farm Extremely fast Vite-compatible web build tool written in Rust 项目地址: https://gitcode.com/gh_mirrors/fa/farm 点击查看 免费下载 Farm 从 v0.14.0 起支持将编译结果持久化到磁盘,通过 compilat…

2026/10/13 16:18:31 阅读更多 →
MATLAB虹膜识别实战:从定位到匹配的完整链路与避坑指南

MATLAB虹膜识别实战:从定位到匹配的完整链路与避坑指南

简介:这份资源聚焦虹膜识别中的特征提取环节,面向正在学习生物特征识别、图像处理或准备相关课程设计的学生与开发者,帮助理解如何用2D-Gabor滤波器从归一化虹膜图像中提取二进制特征编码。压缩包共10个文件,约939KB,包…

2026/10/13 16:18:31 阅读更多 →
MySQL 4.0 实战指南:老版本环境搭建、避坑与迁移要点

MySQL 4.0 实战指南:老版本环境搭建、避坑与迁移要点

简介:《MySQL 4.0.pdf》是一份聚焦MySQL 4.0版本的开源关系型数据库参考资料,适合数据库管理员、后端开发人员及系统学习数据库原理的读者,用于理解经典版本的功能体系与运维思路。资源为单个PDF文件,压缩包仅334KB,内…

2026/10/13 16:17:31 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

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

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

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

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

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

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →