Delphi StringGrid剪贴板复制粘贴方案与封装实践
做Delphi开发的朋友应该都遇到过这种需求用户说“我把表格里选中的那几行复制一下贴到表格软件里”或者反过来“我从表格软件里复制一块数据填到StringGrid里”。StringGrid这个控件本身不带复制粘贴能力默认连快捷键都没注册所以很多项目里这块一直是空白——不是不想做而是真做起来有几个地方容易翻车选区的边界判断、列分隔符的处理、还有中文和换行的兼容。这篇文章就把我用Clipboard给StringGrid做复制粘贴的完整方案、踩过的坑以及一个可以直接抄走的封装函数写出来。1. 先把StringGrid选中区域和Clipboard的关系理清楚1.1 ClipboardDelphi里最省事的剪贴板入口聊到剪贴板Delphi里对应的就是Vcl.Clipbrd单元中的TClipboard类。很多老项目里习惯直接调Windows API来处理剪贴板比如OpenClipboard、GetClipboardData、SetClipboardData这一套不是说不能用但你要自己处理内存分配、Unicode转换、还要记得CloseClipboard。一般在业务代码里用Clipboard.AsText读写文本就够了。在Delphi 2009之后String默认是UnicodeStringClipboard.AsText读写的就是Unicode文本。这意味着你用Clipboard.AsText : 中文内容;写入剪贴板粘贴到表格软件时不会出现乱码。底层TClipboard其实会同时维护CF_TEXT和CF_UNICODETEXT两种格式外部程序取走哪一种都能得到正确内容。旧版Delphi比如Delphi 7用Clipbrd单元而且那时String是AnsiString处理中文和外部程序交互时会有编码问题。如果你还在维护老项目建议把剪贴板相关代码单独抽出来方便以后升级。这一节先记住结论剪贴板操作优先用Clipboard.AsText不要自己折腾WinAPI。1.2 Selection才是获取选中区域的关键别总盯着Row/ColStringGrid里用户鼠标拖选多行多列时控件会用Selection属性记录一个TGridRect里面有Left、Top、Right、Bottom四个字段。很多人刚写复制功能时习惯用AGrid.Row和AGrid.Col这俩属性只在某个单元格有焦点时有效。用户拖了五行Row/Col只反映当前光标所在的格子直接复制的话永远只能复制到一个单元格。正确做法是读取AGrid.Selection拿到的是用户真正选中区域的边界。比如用户从第2行第1列拖到第5行第3列Selection.Left就是1Selection.Top是2Selection.Right是3Selection.Bottom是5。需要留意的点StringGrid的Options里必须有goRangeSelect否则鼠标拖不出多格选区Selection可能只有一个格子的范围。FixedRows和FixedCols一般是固定的表头区正常拖动数据区时不会进入Selection所以复制数据时不用担心表头混进来。如果编程上要用代码选中一整块区域可以给Selection赋值一个TGridRect但赋值前最好先调用SetFocus不然界面状态有时候不会立刻刷新。我在实际项目里碰到过一个很隐蔽的情况用户在StringGrid里按下Ctrl键再点选单元格这时候Selection可能表现异常。原因是Options里如果加了goMultiSelect行为会变得和普通拖选不一样。所以如果你的复制逻辑依赖Selection建议在控件初始化时只保留goRangeSelect不要额外开goMultiSelect。2. 复制到剪贴板基于选中区域生成TSV文本2.1 为什么列分隔符一定用Tab从StringGrid复制数据到外部程序目标通常是把数据贴到表格软件里或者贴到文本编辑器里。要让表格软件正确识别“这是一列”最稳的列分隔符就是制表符Tab也就是#9。表格软件粘贴剪贴板里的纯文本时默认把Tab当列分隔换行符当行分隔这种格式就是TSVTab-Separated Values。如果你用逗号做分隔表格软件能不能分列完全看区域语言设置而且单元格内容本身可能包含逗号一拆就乱套。用Tab也符合大多数用户的习惯——在表格软件里复制一块区域再粘贴剪贴板里就是TSV文本。所以从StringGrid复制出去我们也生成TSV这样和表格软件、文本编辑器都能无缝衔接。还有一个细节行分隔符统一用回车换行#13#10。使用TStringList时它内部会统一用CRLF作为行尾所以拿着TStringList.Text赋给剪贴板就行。如果你是手动拼字符串记得行尾用#13#10而不是单独的#10否则在一些老版本的表格软件里粘贴时会识别失败。2.2 遍历选区的双循环怎么写才能不漏行复制逻辑的核心就是双层循环外层按行从Selection.Top到Selection.Bottom内层按列从Selection.Left到Selection.Right。每个单元格用AGrid.Cells[Col, Row]取内容然后把同一行的内容用Tab拼起来再追加到TStringList里作为一行。这个过程中最容易犯的低级错误是行列坐标写反。Cells的第一个参数是列号第二个参数是行号写成Cells[Row, Col]轻则取错数据重则索引越界。StringGrid的Cells越界时会触发异常直接弹出来很影响体验。另一个要注意的是空选区。如果Selection.Left或者Selection.Top是-1说明用户根本没选中有效区域这时要直接退出不能继续遍历。否则循环范围可能是-1到-1也会引发异常。我最早写复制功能时没加这个判断用户没选内容就按CtrlC结果把剪贴板里的旧内容覆盖成了空行这个教训后来写在代码注释里了。如果单元格内容里面本身带有Tab或换行复制出去时会导致粘贴到表格软件后列错位。常规做法是把单元格里的Tab替换成空格把换行替换成空格或者去掉。大部分业务场景下StringGrid单元格都是单行文本这个处理已经够用。2.3 复制函数的完整代码与快捷键注册下面这段代码可以直接复制到你的公共单元里。我用的是较新的VCL命名空间老版本把Vcl.Grids改成Grids、Vcl.Clipbrd改成Clipbrd就能用。unit GridClipboardHelper; interface uses System.SysUtils, System.Classes, Vcl.Grids, Vcl.Clipbrd; procedure CopyGridSelection(AGrid: TStringGrid); procedure CopyGridAll(AGrid: TStringGrid); implementation procedure CopyGridSelection(AGrid: TStringGrid); var LSel: TGridRect; LData: TStringList; LLine: TStringBuilder; LRow, LCol: Integer; begin if not Assigned(AGrid) then Exit; LSel : AGrid.Selection; if (LSel.Left 0) or (LSel.Top 0) then Exit; LData : TStringList.Create; try for LRow : LSel.Top to LSel.Bottom do begin LLine : TStringBuilder.Create; try for LCol : LSel.Left to LSel.Right do begin if LCol LSel.Left then LLine.Append(#9); LLine.Append(AGrid.Cells[LCol, LRow]); end; LData.Add(LLine.ToString); finally LLine.Free; end; end; Clipboard.AsText : LData.Text; finally LData.Free; end; end; procedure CopyGridAll(AGrid: TStringGrid); var LData: TStringList; LLine: TStringBuilder; LRow, LCol: Integer; begin if not Assigned(AGrid) then Exit; LData : TStringList.Create; try for LRow : 0 to AGrid.RowCount - 1 do begin LLine : TStringBuilder.Create; try for LCol : 0 to AGrid.ColCount - 1 do begin if LCol 0 then LLine.Append(#9); LLine.Append(AGrid.Cells[LCol, LRow]); end; LData.Add(LLine.ToString); finally LLine.Free; end; end; Clipboard.AsText : LData.Text; finally LData.Free; end; end; end.调用方式很简单在Form里给StringGrid的OnKeyDown事件写快捷键procedure TForm1.GridKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if (ssCtrl in Shift) and (Key Ord(C)) then begin CopyGridSelection(StringGrid1); Key : 0; end; end;这里有个小技巧处理完快捷键后把Key置0可以防止CtrlC被StringGrid默认的编辑操作吞掉避免复制出奇怪的空白。3. 从剪贴板粘贴数据文本解析与回填表格3.1 解析文本前要处理的三个小坑粘贴是复制的逆过程但坑比复制多。第一步是把Clipboard.AsText取出来放进TStringList用它的Text属性按换行分好行。这一步有三个坑值得提前注意。第一个坑是TStringList会自动把每一行末尾多余的空白去掉吗不会但复制时如果数据本身带了结尾Tab就会产生一个空列。表格软件复制出来的TSV文本行尾通常会有一个Tab粘贴回来后如果不做处理会多出一列空列。我一般在按Tab解析列之前先TrimRight掉行尾的Tab。第二个坑是TStringList的尾部经常有一个空串。原因是Clipboard.AsText的文本末尾自带换行TStringList.Text解析后会多出一个空行。解析时把最后的空行删掉否则粘贴会在StringGrid末尾多插入一行空数据。第三个坑最关键用TStringList.DelimitedText按Tab分列时必须把QuoteChar设为#0把StrictDelimiter设为True。不然TStringList默认把双引号当引用符单元格内容里一旦出现引号解析结果会完全错乱。这个坑我排查了很久建议直接写死在粘贴解析代码里。3.2 覆盖式粘贴与插入式粘贴怎么选粘贴到StringGrid时有两种策略覆盖式粘贴和插入式粘贴。覆盖式粘贴就是从当前选中的格子开始按行列把剪贴板里的数据写进去不增加新行写不下的部分直接丢弃。这种适合“表格已经有固定行列、我填几个格子”的场景比如排班表、配置表。插入式粘贴是当前剪贴板有N行就从当前位置向下扩展N行如果原表格不够就自动加RowCount。这种适合“我从表格软件里复制了一堆数据要整体追加到表格尾部”的场景。业务系统里这种情况更常见所以我把插入式做成默认。两个策略的取舍点在于用户体验。覆盖式粘贴操作快、不容易把表格搞乱插入式粘贴更符合表格软件的使用习惯但可能会让RowCount快速增长如果你的StringGrid下面还关联着其他数据结构扩展RowCount时要小心其他地方同步维护。我在自己项目里做成了两个函数一个默认插入另一个带参数选择是否覆盖。实际用下来用户基本只用插入式覆盖式只在“重新填入固定配置”的窗口里用。3.3 粘贴函数的完整代码procedure PasteGridData(AGrid: TStringGrid; AInsertRows: Boolean True); var LData, LColumns: TStringList; LRow, LCol: Integer; LTargetRow: Integer; LNeedRows: Integer; begin if not Assigned(AGrid) then Exit; if not (Clipboard.HasFormat(CF_TEXT) or Clipboard.HasFormat(CF_UNICODETEXT)) then Exit; LData : TStringList.Create; try LData.Text : Clipboard.AsText; // 去掉末尾空行 while (LData.Count 0) and (LData[LData.Count - 1] ) do LData.Delete(LData.Count - 1); if LData.Count 0 then Exit; LColumns : TStringList.Create; try // 关键关闭引号转义严格执行Tab分隔 LColumns.QuoteChar : #0; LColumns.StrictDelimiter : True; LColumns.Delimiter : #9; for LRow : 0 to LData.Count - 1 do begin LTargetRow : AGrid.Row LRow; // 防止覆盖固定表头 if LTargetRow AGrid.FixedRows then LTargetRow : AGrid.FixedRows; if AInsertRows then begin LNeedRows : LTargetRow LData.Count; if AGrid.RowCount LNeedRows then AGrid.RowCount : LNeedRows; end else begin if LTargetRow AGrid.RowCount then Break; end; // 行尾Tab会解析出一个空列先把行尾Tab去掉 LColumns.DelimitedText : TrimRight(LData[LRow]); for LCol : 0 to LColumns.Count - 1 do begin if AGrid.Col LCol AGrid.ColCount then AGrid.Cells[AGrid.Col LCol, LTargetRow] : LColumns[LCol]; end; end; finally LColumns.Free; end; finally LData.Free; end; end;这里解释几个关键点粘贴起点用的是AGrid.Row和AGrid.Col也就是用户当前选中的那个单元格。因为从表格软件复制数据过来用户通常会先点一下要粘贴的目标位置。如果用户点击的位置在FixedRows里也就是表头区域我会强制把起点移到FixedRows之后的第一行避免把表头冲掉。这是我从一次误操作里学到的经验。插入模式一次性算好需要的总行数直接设置RowCount而不是每粘一行加一行RowCount : RowCount 1。因为后者会触发多次重绘数据量大时界面会闪得厉害。4. StringGrid与表格软件互通的实战经验4.1 表格软件复制出来的文本为什么能直接读表格软件Excel、WPS及其他类似工具复制一块区域后剪贴板里通常会包含多种格式其中纯文本部分就是TSV。比如它复制3行2列文本差不多是“A1\tB1\r\nA2\tB2\r\nA3\tB3\r\n”。所以Delphi里直接Clipboard.AsText拿出来用TStringList按行再按Tab分列就能还原成行列数据结构。这种方案不依赖任何OLE、COM调用所以速度快、代码简单兼容性也最好。多语言版本的表格软件、不同区域设置用Tab分隔基本都不会出问题。你要是用Excel OLE来读剪贴板数据效率要差不少还容易触发安全提示。4.2 从StringGrid复制到表格软件也要注意文本格式从StringGrid复制到表格软件时大部分情况直接按TSV复制就能用。但有一个很实际的场景物料编码、订单号、电话号码这类数据单元格内容可能是“0012385”这种带前导零的字符串。StringGrid里显示没问题但复制到表格软件后它可能会自动把“0012385”的文本转成数字“12385”前导零就没了。如果你需要在复制时保留前导零可以在复制时给单元格内容前面加一个单引号比如把“0012385”拼成“0012385”。表格软件粘贴时看到单引号会把它当作“以文本形式存储数字”的标记界面显示时不会显示单引号但能完整保留前导零。这个技巧在导出编码类数据时很好用。不过注意这个处理只面向表格软件这类识别单引号文本标记的工具。如果用户把数据粘贴到记事本单引号会原样显示所以要不要做这个处理得看业务侧重点。4.3 带表头与固定列的场景处理很多系统的StringGrid是带表头的比如“姓名、工号、部门”三列FixedRows1。用户习惯只选中数据区复制所以CopyGridSelection默认不含表头。但有些时候用户希望把表头一起复制出去方便在表格软件里查看。这时候可以直接用CopyGridAll从第0行开始复制。往回粘贴时如果剪贴板数据本身带表头用户粘贴时通常会先点击数据区的第一个格子我们的粘贴函数会从固定行之后开始正好把剪贴板里的表头行也当成普通数据粘到第一行数据区。这种情况处理起来需要业务判断剪贴板里的第一行到底是不是表头。我一般不在公共函数里自动判断而是让调用方在粘贴前把第一行当作表头跳过或者让用户自己决定是否包含表头。从实际体验看这个功能做成“复制整表”比“复制选中区”更受用户欢迎尤其在月末对账、数据盘点类的表单里。5. 常见问题排查与性能优化笔记5.1 中文乱码与空行最容易忽略的两个问题用新版Delphi做Unicode程序Clipboard.AsText读写中文基本不会乱码。但如果你维护的是Delphi 7时代的代码或者代码里用了UTF-8的AnsiString中文复制到表格软件就可能变成乱码。排查顺序一般是先确认项目是不是Unicode版本再检查是不是结构化赋值时把字符串转成了UTF-8字节流最后还可以看系统区域设置是否影响。粘贴时空行的问题也很典型。从表格软件复制一块区域尾部通常有一个空行我们的代码里已经删掉了末尾空行。还有一种情况是表格软件复制时会把空白单元格也复制成空字符串中间夹着空行也是很正常的解析出来不丢弃就好。5.2 粘贴时覆盖表头固定行保护StringGrid的FixedRows是表头区默认情况下鼠标也选不中它但代码里直接设置AGrid.Row和AGrid.Col可能把当前格定位在表头。尤其是用户在某单元格上点了右键把粘贴菜单弹出来当前格往往就在那里。如果不做保护粘贴会直接覆盖表头文字。解决方案就是粘贴代码里那句if LTargetRow AGrid.FixedRows then LTargetRow : AGrid.FixedRows;同理如果表格有FixedCols而且你不希望粘贴时从固定列开始覆盖也可以加上列方向的保护。很多业务表格第一列是序号如果粘贴时把序号列给覆盖了数据就乱了这种保护建议做成可配置参数。5.3 大表格卡顿怎么办复制和粘贴几千行、几十列的数据时逐格访问Cells本身不慢但反复触发重绘就会卡。复制方向最常见的问题是把所有数据拼成一个大字符串时如果用S : S Cells[...]这种字符串累加方式O(n^2)的字符串分配会把性能拖垮。我建议用TStringBuilder来拼行它内部维护了一个缓冲区大量拼接时不会频繁分配内存。上面的复制代码就是这样写的。对于更大规模的数据甚至可以先把所有内容写进一个TStringList再一次性赋给剪贴板。粘贴方向的卡顿主要来自RowCount频繁变化。一次设置好目标行数再用Perform(WM_SETREDRAW, 0, 0)临时关闭重绘、粘贴完成后恢复实测下来顺畅很多。如果你用的是TStringGrid的虚拟模式OnGetCellText画数据粘贴时根本不改Cells而是改底层数据结构那又是另一套思路了。5.4 扩展可以走的方向HTML、拖拽与多格式到这里基础的复制粘贴已经能解决日常需求了。但如果你的用户经常把StringGrid内容贴到邮件正文或者网页编辑器纯文本TSV会让样式丢失。可以考虑在复制时同时生成一份简单的HTML表格用TClipboard.SetComponent或者直接往剪贴板里写CF_HTML格式。不过HTML格式要写完整的Fragment头比纯文本复杂不少没必要一上来就做。另一个扩展方向是拖拽。既然已经能从剪贴板粘贴再做OnDragOver和OnDragDrop让用户从表格软件拖一块数据到StringGrid里代码结构人完全是复用粘贴的解析逻辑只是把数据源换成拖拽对象里的文本。这个功能做出来非常讨喜演示Demo时效果也明显。最后再分享一点个人操作体会把复制粘贴函数封装成一个GridClipboardHelper单元之后我在好几个项目里直接引用确实省了不少事。最开始我只做了复制没做粘贴结果用户复制出去之后发现贴不回来马上来提需求。所以建议一次把复制、粘贴、整表复制这三个函数一起加到公共单元里。在实际操作中我发现用户对“把StringGrid里的数据贴到表格软件里”这个动作的期待值很高但他们对“从表格软件里贴回来”反而更加宽容。因为复制出去是导出用户会严格检查格式粘贴进来是导入用户更关心有没有丢数据、有没有错位。所以粘贴代码里多做几次边界判断哪怕牺牲一点点效率也要保证不会有脏数据写进表格。还有一个建议如果StringGrid下面关联着业务数据模型比如某个对象数组粘贴之后别忘了同步更新业务数据。Cells只是显示层底层数据没刷新等到保存时才发现数据不一致那就得加班排查了。把粘贴逻辑和业务数据的修改绑定在一起比统一在保存时全量同步要可靠得多。

相关新闻

基于MP2642GR-Z与PIC24F的两串电池被动均衡方案设计

基于MP2642GR-Z与PIC24F的两串电池被动均衡方案设计

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

2026/10/16 1:26:38 阅读更多 →
易语言进程管理:从进程ID到API句柄的封装实战

易语言进程管理:从进程ID到API句柄的封装实战

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

2026/10/17 11:03:05 阅读更多 →
2S磷酸铁锂被动均衡方案:基于MP2642GR-Z与STM32L053R8的设计实践

2S磷酸铁锂被动均衡方案:基于MP2642GR-Z与STM32L053R8的设计实践

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

2026/10/17 11:28:58 阅读更多 →

最新新闻

Argon架构解析:面向毫秒级SLA的AI服务三层解耦设计

Argon架构解析:面向毫秒级SLA的AI服务三层解耦设计

1. 项目概述:这不是一次简单的模型调用,而是一次系统级工程重构“Google 用 Gemini 4 Argon 构建案例”——这个标题乍看像一则新闻简报,但作为在AI基础设施一线摸爬滚打十多年的从业者,我第一反应是:这根本不是在讲“…

2026/10/17 11:32:28 阅读更多 →
n8n集成Gemini 4 Argon与MCP协议构建真Agent工作流

n8n集成Gemini 4 Argon与MCP协议构建真Agent工作流

1. 这不是“又一个AI工作流”,而是n8n生态里首次真正打通MCP协议的Gemini原生集成 我第一次在某跨平台自动化实验室看到这个标题时,下意识点开想确认是不是标题党——毕竟过去两年里,“用XX模型接入n8n”这类文章我至少扫过四十多篇&#xff…

2026/10/17 11:32:28 阅读更多 →
意图优先的版本控制系统:重构代码协作的认知范式

意图优先的版本控制系统:重构代码协作的认知范式

1. 项目概述:这不是又一个Git客户端,而是一次底层协作范式的重写“7个人、5个月,Anthropic造出了Git替代品”——这个标题在技术圈刷屏时,我正带着团队在做一个跨时区协同的嵌入式固件项目。每天早上打开终端,git pull…

2026/10/17 11:32:28 阅读更多 →
DVWA中CSP绕过原理与四类实战利用手法详解

DVWA中CSP绕过原理与四类实战利用手法详解

1. 项目概述:CSP不是铁壁,而是可被理解、可被分析、可被绕过的策略体系“CSP Bypass”这个词在渗透测试和Web安全研究圈里,几乎等同于一次对开发者安全意识的现场压力测试。它不制造漏洞,却能放大漏洞的价值;它不依赖服…

2026/10/17 11:32:28 阅读更多 →
Vue高德地图动态绘制路线与轨迹巡航实战:从坐标转换到动画性能优化

Vue高德地图动态绘制路线与轨迹巡航实战:从坐标转换到动画性能优化

做后台管理系统这么多年,我接到过最典型的“地图需求”就是标题里这个:高德地图动态绘制路线,轨迹巡航,还指定要用 Vue。第一次听可能觉得不就是画一条线加个小车跑吗,真做完才发现里面全是细节:坐标要转换…

2026/10/17 11:32:28 阅读更多 →
STM32F103移植W5500 ioLibrary:SPI驱动与socket通信实战

STM32F103移植W5500 ioLibrary:SPI驱动与socket通信实战

简介:面向基于STM32F103RCT6等MINISTM32平台的嵌入式开发者,这套W5500 ioLibrary移植工程包含完整的驱动适配代码,可直接参考使用。W5500是集成SPI接口的硬核以太网控制器,自带TCP/IP协议栈,配合STM32的SPI外设即可实现…

2026/10/17 11:31:27 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →