Perl--Excle error: can‘t call method “value“ on undefined value at file.pl

本文介绍使用Perl脚本从Excel文件中读取数据时遇到的问题及解决方案,特别是针对空单元格引发错误的情况。

使用perl脚本读取excel文件:

获取excel中value的时候: 使用$Ws->get_cell(2,$col)->value() =~ /$NAME/这一行出现标题的error

分析:

首先$Ws要获取正确,表示get到的excel页面

然后获取第2行,$col列的值与/$NAME/进行匹配,

最后发现是当get到的值是空的时候,就会报错,也就是我excel中第2行第一列是空的,get 不到data

 

C:\Users\admin\PyCharmMiscProject\.venv\Scripts\python.exe F:\excle_to_clm\rate_set\rate_sync.py 2025-10-24 17:23:44,678 [INFO] root: 资源路径: F:\excle_to_clm 2025-10-24 17:23:44,679 [INFO] root: 资源路径: F:\excle_to_clm 2025-10-24 17:23:44,679 [INFO] __main__.RateSetSynchronizer: 开始同步 RATE_SET 数据... 2025-10-24 17:23:44,684 [INFO] __main__.RateSetSynchronizer: 正在处理 C 文件: wlc_clm_data_6726b0.c 2025-10-24 17:23:44,684 [INFO] __main__.RateSetSynchronizer: 查找锚点: START: // === START RATE_SET DATA END: // === END RATE_SET DATA 2025-10-24 17:23:44,684 [INFO] __main__.RateSetSynchronizer: 开始解析现有代码块内容... 2025-10-24 17:23:44,684 [INFO] __main__.RateSetSynchronizer: 解析出 15 个已有枚举项 2025-10-24 17:23:44,685 [INFO] __main__.RateSetSynchronizer: 解析出 data 数组共 2294 个元素 2025-10-24 17:23:44,687 [INFO] __main__.RateSetSynchronizer: 解析出 index 数组共 47 个索引 2025-10-24 17:23:44,687 [INFO] __main__.RateSetSynchronizer: 开始扫描 6 个 .c 源文件以提取新 rate set... 2025-10-24 17:23:44,687 [INFO] __main__.RateSetSynchronizer: → 处理子文件: 2G_20M_EXT4_rate_set.c 2025-10-24 17:23:44,687 [INFO] __main__.RateSetSynchronizer: 从文件中匹配到 3 个 rate set 定义块 2025-10-24 17:23:44,687 [INFO] __main__.RateSetSynchronizer: 共成功提取 3 个有效子集 2025-10-24 17:23:44,687 [INFO] __main__.RateSetSynchronizer: 开始构建注入内容,当前最大枚举值 = 34 2025-10-24 17:23:44,687 [INFO] __main__.RateSetSynchronizer: 构建完成:新增 151 个数据项,3 个索引,3 个枚举 2025-10-24 17:23:44,687 [INFO] __main__.RateSetSynchronizer: └─ 提取 3 个新子集,准备注入 2025-10-24 17:23:44,687 [INFO] __main__.RateSetSynchronizer: → 处理子文件: 2G_20M_EXT_rate_set.c 2025-10-24 17:23:44,687 [INFO] __main__.RateSetSynchronizer: 从文件中匹配到 3 个 rate set 定义块 2025-10-24 17:23:44,687 [INFO] __main__.RateSetSynchronizer: 共成功提取 3 个有效子集 2025-10-24 17:23:44,687 [INFO] __main__.RateSetSynchronizer: 开始构建注入内容,当前最大枚举值 = 34 2025-10-24 17:23:44,687 [INFO] __main__.RateSetSynchronizer: 构建完成:新增 115 个数据项,3 个索引,3 个枚举 2025-10-24 17:23:44,687 [INFO] __main__.RateSetSynchronizer: └─ 提取 3 个新子集,准备注入 2025-10-24 17:23:44,688 [INFO] __main__.RateSetSynchronizer: → 处理子文件: 2G_20M_rate_set.c 2025-10-24 17:23:44,688 [INFO] __main__.RateSetSynchronizer: 从文件中匹配到 2 个 rate set 定义块 2025-10-24 17:23:44,688 [INFO] __main__.RateSetSynchronizer: 共成功提取 2 个有效子集 2025-10-24 17:23:44,688 [INFO] __main__.RateSetSynchronizer: 开始构建注入内容,当前最大枚举值 = 34 2025-10-24 17:23:44,688 [INFO] __main__.RateSetSynchronizer: 构建完成:新增 82 个数据项,2 个索引,2 个枚举 2025-10-24 17:23:44,688 [INFO] __main__.RateSetSynchronizer: └─ 提取 2 个新子集,准备注入 2025-10-24 17:23:44,688 [INFO] __main__.RateSetSynchronizer: → 处理子文件: 2G_40M_EXT4_rate_set.c 2025-10-24 17:23:44,688 [INFO] __main__.RateSetSynchronizer: 从文件中匹配到 3 个 rate set 定义块 2025-10-24 17:23:44,688 [INFO] __main__.RateSetSynchronizer: 共成功提取 3 个有效子集 2025-10-24 17:23:44,688 [INFO] __main__.RateSetSynchronizer: 开始构建注入内容,当前最大枚举值 = 34 2025-10-24 17:23:44,688 [INFO] __main__.RateSetSynchronizer: 构建完成:新增 151 个数据项,3 个索引,3 个枚举 2025-10-24 17:23:44,688 [INFO] __main__.RateSetSynchronizer: └─ 提取 3 个新子集,准备注入 2025-10-24 17:23:44,688 [INFO] __main__.RateSetSynchronizer: → 处理子文件: 2G_40M_EXT_rate_set.c 2025-10-24 17:23:44,688 [INFO] __main__.RateSetSynchronizer: 从文件中匹配到 3 个 rate set 定义块 2025-10-24 17:23:44,688 [INFO] __main__.RateSetSynchronizer: 共成功提取 3 个有效子集 2025-10-24 17:23:44,688 [INFO] __main__.RateSetSynchronizer: 开始构建注入内容,当前最大枚举值 = 34 2025-10-24 17:23:44,688 [INFO] __main__.RateSetSynchronizer: 构建完成:新增 115 个数据项,3 个索引,3 个枚举 2025-10-24 17:23:44,688 [INFO] __main__.RateSetSynchronizer: └─ 提取 3 个新子集,准备注入 2025-10-24 17:23:44,688 [INFO] __main__.RateSetSynchronizer: → 处理子文件: 2G_40M_rate_set.c 2025-10-24 17:23:44,688 [INFO] __main__.RateSetSynchronizer: 从文件中匹配到 1 个 rate set 定义块 2025-10-24 17:23:44,688 [INFO] __main__.RateSetSynchronizer: 共成功提取 1 个有效子集 2025-10-24 17:23:44,689 [INFO] __main__.RateSetSynchronizer: 开始构建注入内容,当前最大枚举值 = 34 2025-10-24 17:23:44,689 [INFO] __main__.RateSetSynchronizer: 构建完成:新增 17 个数据项,1 个索引,1 个枚举 2025-10-24 17:23:44,689 [INFO] __main__.RateSetSynchronizer: └─ 提取 1 个新子集,准备注入 2025-10-24 17:23:44,689 [INFO] __main__.RateSetSynchronizer: 正在生成新的代码块... 2025-10-24 17:23:44,689 [ERROR] __main__.RateSetSynchronizer: 同步失败: name 'all_enums' is not defined Traceback (most recent call last): File "F:\excle_to_clm\rate_set\rate_sync.py", line 402, in run changed = self.inject_new_data() File "F:\excle_to_clm\rate_set\rate_sync.py", line 386, in inject_new_data new_block = self.generate_new_block(parsed, all_new_data, all_new_indices, all_enums) ^^^^^^^^^ NameError: name 'all_enums' is not defined. Did you mean: 'new_enums'? 2025-10-24 17:23:44,692 [ERROR] root: 程序异常退出: name 'all_enums' is not defined Traceback (most recent call last): File "F:\excle_to_clm\rate_set\rate_sync.py", line 427, in main sync.run() ~~~~~~~~^^ File "F:\excle_to_clm\rate_set\rate_sync.py", line 402, in run changed = self.inject_new_data() File "F:\excle_to_clm\rate_set\rate_sync.py", line 386, in inject_new_data new_block = self.generate_new_block(parsed, all_new_data, all_new_indices, all_enums) ^^^^^^^^^ NameError: name 'all_enums' is not defined. Did you mean: 'new_enums'? ❌ 同步失败,详见日志。 进程已结束,退出代码为 1
10-25
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值