如何用Ruby提取XLSX文件中Table_Names列并转为字符串数组?
嘿,我来帮你搞定这个提取指定列的问题!你现在的代码是遍历所有行输出内容,要提取Table_Names整列到字符串数组,关键是先找到这个列在表头里的索引,再针对性地提取每一行的对应单元格值。
具体解决方案
这里是修改后的代码,我会一步步给你解释:
require 'spreadsheet' # 初始化用来存表名的数组 table_names = [] Spreadsheet.open('MyTestSheet.xls') do |book| sheet = book.worksheet('Sheet1') # 第一步:找到Table_Names列的索引(假设表头在第一行,索引为0) header = sheet.row(0) target_col_idx = header.index('Table_Names') # 先检查是否真的找到这个列,避免后续报错 if target_col_idx.nil? puts "哎呀,没找到名为Table_Names的列哦!" next end # 第二步:遍历每一行,提取目标列的值 sheet.each_with_index do |row, idx| # 跳过表头行,别把列名也放进数组里 next if idx == 0 # 如果你遇到空值就想停止遍历,保留这个判断;如果想继续就删掉 break if row[target_col_idx].nil? # 把单元格值转成字符串,存入数组 table_names << row[target_col_idx].to_s end end # 看看提取结果 puts "提取到的表名数组:" p table_names
几个关键细节说明
- 表头位置调整:如果你的表头不在第一行,就把
sheet.row(0)里的0改成对应行的索引(比如第二行就是1) - 空值处理:代码里的
break if row[target_col_idx].nil?是遇到空值就停止,如果你想忽略空值继续提取后面的内容,可以改成next if row[target_col_idx].nil? - 字符串转换:用
to_s是确保存入数组的都是字符串类型,避免单元格是数字或其他类型带来的问题
另外要注意:Spreadsheet gem只支持旧版的.xls格式,如果你的文件是.xlsx,可能需要换成roo这类支持新版格式的gem哦!
内容的提问来源于stack exchange,提问作者Fatna
相关产品推荐
相关产品推荐

