Delphi 10.2使用Native Excel 3调用SaveAs出现无效指针及访问违规问题求助
Delphi 10.2 + Native Excel 3 SaveAs方法报错问题排查方案
- 依赖匹配问题
首先核对部署包完整性,确认你打包时将Native Excel 3对应的所有依赖DLL都放在程序运行目录,避免调用系统目录下版本不一致的库文件。同时确认编译的程序架构(32位/64位)和客户设备的系统架构兼容,若编译的是32位程序,需确认客户设备已安装32位VC++运行库。 - 路径权限问题
检查输出路径Outfile是否为系统受保护目录(如Program Files、C盘根目录等),普通用户权限对这类目录没有写入权限,部分版本的Native Excel在写入被拒绝时不会抛出正常的IO错误,反而会触发内存访问异常。可让客户将输出路径修改为桌面、我的文档等普通用户拥有完全权限的目录测试。 - 接口释放顺序问题
你使用的IXLSWorkbook、IXLSWorksheet均为COM接口,Native Excel部分版本和Delphi的自动接口引用计数逻辑存在兼容问题,可尝试在SaveAs执行后,手动释放接口引用,避免内存异常:intRow:=fWorkBook.SaveAs(Outfile); // 新增手动释放代码 fSheet1 := nil; fWorkbook := nil; - 临时目录异常问题
Native Excel执行保存操作时会先在系统临时目录生成缓存文件,若客户设备的临时目录存储空间已满,或当前用户对%TEMP%目录没有读写权限,也会触发无效指针或访问违规错误。可让客户清理系统临时目录后再测试。 - 库版本已知Bug
Native Excel 3的早期小版本存在仅含表头的工作表保存时的内存溢出Bug,你可以尝试在测试时给工作表加一行任意测试数据后再保存,若问题消失,升级Native Excel 3到最新稳定版即可解决。
内容的提问来源于stack exchange,提问作者Malcolm
相关产品推荐
相关产品推荐

