使用Ruby的Roo库检查Excel首表首行遇整数转换错误求助
问题描述
- 使用Roo gem读取xlsx文件第一个工作表首行时,抛出错误:
invalid value for Integer(): "" - 修改工作表名称后错误消失,但升级Roo至2.7.1版本后问题仍存在
- Ruby版本:2.7.2
- 涉事代码:
def read_excel spread_sheet = Roo::Spreadsheet.open(file_path).sheet(0) if spread_sheet.first_row.blank? # 抛出错误:invalid value for Integer(): "" fail Errors::ExcelImport::EmptyFile end spread_sheet end
可行解决方案
- 改用工作表名称获取实例:避免通过索引
sheet(0)选择工作表,直接用名称定位,绕开索引解析时的格式兼容问题
def read_excel workbook = Roo::Spreadsheet.open(file_path) spread_sheet = workbook.sheet(workbook.sheet_names.first) if spread_sheet.first_row.blank? fail Errors::ExcelImport::EmptyFile end spread_sheet end
- 捕获转换异常并兜底:针对
Integer()转换错误做异常捕获,将此类情况视为空文件处理
def read_excel spread_sheet = Roo::Spreadsheet.open(file_path).sheet(0) begin first_row = spread_sheet.first_row fail Errors::ExcelImport::EmptyFile if first_row.blank? || first_row.zero? rescue ArgumentError => e fail Errors::ExcelImport::EmptyFile if e.message.include?('invalid value for Integer(): ""') raise e # 其他异常正常抛出 end spread_sheet end
检查并修复工作表名称:打开目标xlsx文件,确认第一个工作表名称是否包含特殊字符、不可见字符,重新命名为纯文本格式后保存再测试
升级至Roo 2.8.0+版本:部分用户反馈该版本修复了工作表名称解析导致的类型转换问题,可尝试升级测试
内容的提问来源于stack exchange,提问作者codescaptain
相关产品推荐
相关产品推荐

