简介:XLSReadWriteII 6.00.16 for Tokyo 10.2 是一套面向 Delphi 开发者的 Excel 读写组件,支持 xls 与 xlsx 格式,可在未安装 Office 的环境下完成数据读取、写入、样式设置、图表创建及公式处理,适用于报表生成、批量数据导入导出、桌面系统与 Excel 交互等场景。该版本针对 Tokyo 10.2 编译器优化,调用接口清晰,直接操作文件格式,处理大批量数据时速度更快、资源占用更低;同时支持 Unicode 编码,便于国际化数据应用。压缩包共 816 个文件,大小约 13.47 MB,主要包含 hpp 头文件、pas 源码、dcu 与 obj 编译单元、dfm 窗体、dpr/dproj 工程文件及 html 帮助文档,既有可链接的编译产物,也有完整源码,便于集成、学习或二次修改。包内示例工程覆盖自动筛选、创建图表、数据透视表、网格显示、文件监视等典型功能,并附带配置文件与可执行演示,能直观展示各组件的调用方式与常用写法;无论是将数据导出为 Excel 报表,还是从既有工作簿中提取数据,均可参考示例快速落地。目前已有 312 人学习下载,适合需要在 Delphi 环境中高效处理 Excel 文件、快速交付报表功能的初中级开发者。
1. XLSReadWriteII 6.00.16 安装:Delphi 10.2 Tokyo 上最容易翻车的三个环节
在 Delphi 10.2 Tokyo 上装 XLSReadWriteII 6.00.16,是我碰过最像黑匣子的一次组件部署:压缩包解开后一堆目录,分不清哪套包对应 10.2;随便挑一个编译,十有八九报 File not found 或 BPL 版本不匹配。更难受的是项目里读写 .xls/.xlsx 的代码全依赖它,卡在这一步,整条编译链都走不动。这篇我按自己实际踩过的流程,把解压位置、库路径、编译安装、验证排错一次讲全,给同样在折腾 XLSReadWrite 安装的开发者一条能照抄的路。
2. 装前准备:解压目录、包内结构与 Library Path 分平台配置
2.1 解压位置先立规矩:路径里不要出现中文和空格
这一条看着像洁癖,实际是血泪换来的。Delphi 的 DCU 搜索路径、BPL 注册表记录,以及老工程里混用的 ANSI 字符串,对带中文的路径处理得很不稳定。库路径里出现中文,IDE 偶尔会显示成乱码,编译时明明看到路径存在,却依然报 Unit not found;带空格的路径则容易在传递参数时被截断。所以第一件事就是把压缩包解到一个纯 ASCII 路径下,我一般统一放 D:\DelphiLib\,目录名用组件名加版本号。
New-Item -ItemType Directory -Path "D:\DelphiLib" -Force Expand-Archive -Path "D:\downloads\XLSReadWriteII_6.00.16_Tokyo.zip" -DestinationPath "D:\DelphiLib\XLSReadWriteII"Expand-Archive 是 Win10 自带的,Win7 上如果没有这个命令,直接右键压缩包选“全部解压缩”效果一样。解压之后先看一眼目标目录,确认第一层就是 Source、Packages 这些子文件夹,而不是又多套了一层同名目录——套了两层的话后边所有路径都要跟着改,纯属给自己添麻烦。
2.2 看懂包内目录:Source、Packages、DCU、Demos
XLSReadWriteII 6.00.16 的压缩包结构,跟我装过的多数 Delphi 组件库差不多,重点是别把所有目录都当成一回事。这里有一个很容易误会的点:6.00.16 版本的主单元名仍然叫 XLSReadWriteII5,这是历史命名,不是装错了版本,后边写代码时按包内实际单元名来就对了。
| 目录 | 里面是什么 | 安装时要不要动 |
|---|---|---|
| Source | XLSReadWriteII5.pas 等全部单元源码 | 要,Library Path 加这一层 |
| Packages | 各版本 .dpk/.dproj,含对应 10.2 Tokyo 的包 | 要,编译入口在这里 |
| DCU | 预编译好的 .dcu,按 Win32/Win64 分子目录 | 可选,版本匹配时直接用 |
| Demos | 示例工程,自带读写例程 | 验证阶段用,先别删 |
有些发行包还会带 Bin 或 Lib 目录,那种情况 Library Path 要加的是这一层而不是 Source,具体看包内 README 怎么写。我个人的习惯是只把 Source 加进库路径,让 IDE 按当前编译器现场编译 .pas 生成 DCU。这样最稳,也方便调试时跟进源码单步。
2.3 Library Path 分平台配置:Win32 和 Win64 各加一次
这一步是新手翻车重灾区。Delphi 10.2 的 Library 设置里,Platform 下拉框决定你配的是哪个目标平台,很多人只配了默认的 32 位,等工程切到 64 位编译时突然报一串 File not found,就是这个原因。
打开 Delphi 10.2,进入 Tools > Options > Environment Options > Delphi Options > Library,左上角 Platform 先切到 32-bit Windows,在 Library path 里追加 Source 目录;再把 Platform 切到 64-bit Windows,同样追加一次。
| 平台 | Library Path 追加项 | 说明 |
|---|---|---|
| 32-bit Windows | D:\DelphiLib\XLSReadWriteII\Source | 默认编译目标,绝大多数工程用这一条 |
| 64-bit Windows | D:\DelphiLib\XLSReadWriteII\Source | 不配的话切 64 位必然报错 |
追加时建议直接用右侧的浏览按钮选目录,省得手打路径时多敲一个空格。配完点 OK 后可以新建一个空工程,在 uses 里写 XLSReadWriteII5 试试能否识别,识别不了就先重启一次 IDE 再看。
2.4 版本匹配:为什么要选 6.00.16 对应的 Tokyo 包
版本号里的 for Tokyo 10.2 不是随便标注的,它代表这套包是拿 RAD Studio 10.2 的编译器版本对齐编译的。你把 10.1 Berlin 的 dpk 硬拖进 10.2 里打开,IDE 常常直接拒绝加载,或者编译时报 package 需要更新版本之类的话。更隐蔽的情况是编译过了但安装后组件面板空白,这种多半就是包版本和 IDE 版本错位。
10.2 的小版本之间(10.2.1、10.2.2、10.2.3)一般互相兼容,6.00.16 的包在这几个小版本上都能用。但如果你手里的 IDE 是 11 或更高版本,就别指望用这套 6.00.16 硬装,那需要的是对应新版本的构建包,硬装只会浪费时间。
3. 编译安装组件包:从 .dpk 到组件面板的全流程
3.1 找到正确入口:运行时包与设计期包的分工
Delphi 组件安装分两层,理解了这一层,后边操作就不会乱。运行时包提供实现代码,编译产物是 DCU 加 BPL,工程引用它就够了;设计期包通常带 dcl 前缀,负责把组件注册进 IDE 的组件面板,运行时用不到它。XLSReadWriteII 6.00.16 的 Packages 目录下,常见的入口是这种结构:一个不带 dcl 的运行时包,一个带 dcl 的设计期包,具体文件名以你手里压缩包为准。
操作原则只有一条:先编译运行时包,再安装设计期包。顺序反了,IDE 在 Install 设计期包时会发现它依赖的运行时 BPL 不存在,然后抛出一堆看不懂的模块加载错误。所以打开文件之前,先按文件名把运行时和设计期分清楚,不要看到一个 dpk 就双击。
3.2 Build 与 Install 的操作顺序
确认好入口后,按下面顺序走,每一步都别跳。IDE 里的操作路径是固定的,跟着做即可。
- File > Open,打开 Packages 目录下对应 Tokyo 的运行时包,默认编译目标保持 Win32 即可。
- 在 Project Manager 里右键包节点,选 Build,等左下角消息窗出现编译成功提示。
- 如果存在 dclXLW 开头的设计期包,打开它,右键选 Install;如果没有独立设计期包,直接对运行时包右键 Install。
- 弹出 Package dclXLW.bpl installed 或在消息窗显示 installed 字样,说明安装完成。
这里要说明一下 Build 和 Compile 的区别:Compile 是增量编译,只处理有变动的部分;Build 是全量重编,能把历史遗留的过期 DCU、BPL 版本错乱问题一次清干净。我装组件一律用 Build,省得编译过后半路蹦出版本不匹配的玄学错误。
注意:Install 按钮是灰色点不动时,先回头检查当前打开的包是不是设计期包,以及运行时包有没有执行过 Build。这两个条件缺一个,Install 都不可用。
3.3 安装结果核对:面板、已装包、库路径三项
安装提示成功后别急着写代码,先花一分钟把下面四项核对完,能省掉后边一整轮的排查。组件面板没出现组件但安装提示成功的情况我都遇到过,多数是安装到了另一个平台,或者 IDE 缓存没刷新。
| 检查项 | 位置 | 通过标准 |
|---|---|---|
| 组件面板 | 主界面组件面板 | 出现 XLSReadWriteII 或 Samples 页,里面有 TXLSReadWriteII5 |
| 已安装包 | Component > Install Packages | dclXLW 相关包在列表里且处于勾选状态 |
| 库路径 | Tools > Options > Library | Win32 和 Win64 都包含 Source 目录 |
| 编译目录 | Project > Options > Runtime Packages | 运行时 BPL 能被工程识别到 |
组件面板没看到组件时,先重启 IDE 一次再找,这招解决过绝大多数面板不刷新问题。重启后还没有,才需要回头查安装包列表和平台配置。
4. 避坑排查:路径、BPL、64 位这三个坑
4.1 单元找不到:报错 Unit XLSReadWriteII5 not found
现象:新建工程,在 uses 里写了 XLSReadWriteII5,一编译 IDE 直接提示 Unit XLSReadWriteII5 not found,或者报 F1027 File not found。
原因:九成是 Library Path 里没加 Source 目录,或者只配了 32 位没配 64 位。另一种常见情况是从 10.1 迁移过来的工程,32 位编译一切正常,切到 64 位立刻翻车,查下来就是 64 位平台的库路径是空的。
解决:回 Library 设置里把 Source 目录同时加到 32 位和 64 位两个平台;路径如果已经加了,检查有没有多余空格、中文或尾随的反斜杠。另外留意一下 Path 里 DCU 目录是否排在了 Source 前面,DCU 排前面会让 IDE 优先使用旧编译产物,源码改了也不生效。
4.2 安装时 BPL 缺失:Can't load package 找不到模块
现象:对设计期包点 Install,弹出 Can't load package 加一串路径,提示找不到指定的模块,或者提示版本不匹配。
原因:设计期包依赖的运行时包没有先编译,BPL 文件根本没生成到 IDE 的公共输出目录;还有一种情况是上次编译留了旧 BPL,新装的包版本对不上。
解决:回到运行时包,右键执行 Build,确认消息窗里没有报错,再去 IDE 默认的 Bpl 输出目录看一眼 .bpl 文件是否生成。确认 BPL 在,再回头 Install 设计期包就顺了。如果反复折腾还是不行,把 Packages 目录下的 .bpl 和 .dcu 全部删掉,重新 Build 一次,比在 IDE 里做各种清理操作都快。
4.3 切 64 位就报 F1027:预编译 DCU 是 32 位的
现象:工程目标切到 64-bit Windows,编译报 F1027 Unit not found,切回 32 位又一切正常。
原因:包里自带的 DCU 只有 Win32 版本,64 位目标的库路径里根本没有对应 DCU;或者运行时包从没在 64 位目标下编译过。
解决:在项目管理器里把运行时包的编译目标切到 64-bit Windows,Build 一次生成 64 位 DCU 和 BPL;库路径的 Platform 下拉框切到 64-bit,确认 Source 目录已加。如果用的是包自带 DCU,检查 DCU 目录下有没有 Win64 子目录,没有就直接删掉 DCU 路径,只保留 Source 让 IDE 现编译。
4.4 运行期 Access Violation:文件名编码和未初始化的坑
现象:编译全部通过,运行时执行 WriteToFile 或 ReadFromFile 报 Access Violation,或者生成的 xls 文件里中文乱码。
原因:组件内部对文件路径编码比较敏感,路径带中文时传参出错;更多时候是代码里没用 Create 初始化组件就直接访问 Sheets,或者没设置 SheetCount 就操作第一个工作表。
解决:验证阶段一律用 ASCII 路径,比如 C:\Temp\verify.xls;代码里保证先 Create 再访问属性,用完 finally Free;写入之前把 SheetCount 设为 1。这一套规范下来,Access Violation 基本不会再出现。
5. 装完验证:最小 Demo 读写 xls 并回读
安装完成后的验证,我习惯写一个最小空工程来跑,不直接拖进业务代码里试。这样出了问题能确定是组件安装问题还是业务代码问题。下面是完整的控制台工程代码,复制到 Delphi 10.2 里直接编译运行即可。
program XLSRWVerify; {$APPTYPE CONSOLE} uses SysUtils, XLSReadWriteII5; var XL: TXLSReadWriteII5; begin XL := TXLSReadWriteII5.Create(nil); try XL.SheetCount := 1; XL.Sheets[0].AsString[1, 1] := 'Hello'; XL.Sheets[0].AsString[1, 2] := 'XLSReadWrite'; XL.WriteToFile('C:\Temp\verify.xls'); XL.ReadFromFile('C:\Temp\verify.xls'); Writeln('read back: ' + XL.Sheets[0].AsString[1, 2]); finally XL.Free; end; Readln; end.这段代码做了三件事:写入两个单元格、把文件读回来、把读到的内容打印到控制台。运行前先确认 C:\Temp 目录存在,不存在会报目录错误;可以用 C:\Temp 之外的其他 ASCII 路径,但别用中文路径。注意 AsString 的索引顺序是 [列, 行],跟 Excel 里常说的“第几行第几列”正好相反,这是最容易被坑的地方。
跑通后打开 C:\Temp\verify.xls,用能看表格的软件或纯文本方式打开,能看到 Hello 和 XLSReadWrite 两行内容;控制台输出 read back: XLSReadWrite,说明写和读两条链路都是通的。这个验证过了,组件才算真正装好,可以放心引到项目里。从那以后我每次装完 XLSReadWrite 组件,都强制自己跑一遍这个最小验证流程才肯合入工程,省下的排查时间比写这段代码多得多。希望帮到你。
本文还有配套的精品资源,点击获取