You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby使用collect读取Excel行遇空单元格报错的解决方法

Ruby读取Excel空单元格报错修复方案

报错根因:索引12的位置为空单元格时,num[12]返回nil,直接对nil调用.value方法会触发NoMethodError。以下两种方案直接替换原有代码即可落地:

方案1:空单元格读取为空字符串(保留原表行对应关系)

适合需要保持返回列表长度和原表行数一致、不打乱行位置的场景。

  • Ruby 2.3及以上版本(绝大多数现有环境)直接用安全导航符+类型转换,代码最简洁:
@list = $workbook.worksheets[0].collect { |row| row[12]&.value.to_s }

逻辑说明:&.是Ruby内置安全导航操作符,当前面的row[12]为空(nil)时会直接返回nil,不会继续调用.value触发报错;末尾的.to_s会自动把nil转换为空字符串"",非空单元格的原有值也会正常保留。

  • 低版本Ruby兼容写法:
@list = $workbook.worksheets[0].collect do |row|
  cell = row[12]
  cell.nil? ? "" : cell.value
end

方案2:直接跳过空单元格(仅保留非空值)

适合不需要对齐原表行位置、只需要收集该列所有有效内容的场景。

  • Ruby 2.7及以上版本用filter_map一步完成收集+过滤空值:
@list = $workbook.worksheets[0].filter_map { |row| row[12]&.value }
  • 低版本Ruby兼容写法:先收集所有值,再剔除nil项
@list = $workbook.worksheets[0].collect { |row| row[12]&.value }.compact

小提示:原代码块参数里写的|num,|末尾多余逗号属于Ruby参数解构的特殊写法,遍历工作表行时不需要加,直接写单参数接收行对象即可,避免不必要的语法歧义。

内容的提问来源于stack exchange,提问作者J.Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 15:21:25