Ruby读取Excel中Gameicons数据及Squib图标调用问题求助
一、排查Power列写"capitol"时图标功能失效的问题
先从几个常见的点入手排查,一步步缩小范围:
检查Excel单元格的实际内容:有时候单元格里会藏着空格、换行或者大小写问题(比如不小心写成了"Capitol"首字母大写)。你可以在读取Excel数据后,打印出Power列的实际值来验证,比如在代码里加一行:
puts "Power column value: '#{data['Power'][0]}'" # 替换0为出现问题的行索引如果输出里有多余空格,记得用
strip处理:power_value = data['Power'][i].strip核对图标slug的正确性:Gameicons的图标是通过唯一的slug来调用的,确认"capitol"是不是对应图标的正确slug(比如有没有拼写错误,或者图标实际slug是"capitol-building"这类)。你可以单独在代码里测试
gameicons key: 'capitol',看能不能正常显示图标。检查Squib调用的异常情况:拉取图标时可能因为网络问题、slug不存在返回错误,但默认可能没抛出异常。可以加个异常捕获块看看具体错误:
begin gameicons key: power_value, x: 50, y: 50 # 替换成你的坐标参数 rescue => e puts "Error loading icon for '#{power_value}': #{e.message}" end这样能直接看到是404(slug不存在)还是网络连接问题。
确认Excel表头的匹配度:如果你用
data['Power']读取列,要确保Excel里的表头是完全一致的(包括大小写,比如不能Excel里是"power"小写,代码里用"Power"大写)。
二、用Ruby直接从Excel拉取Gameicons相关数据
Squib常用roo库处理Excel文件,结合Gameicons的图标URL规则,你可以这样实现:
步骤1:安装依赖库
先确保安装了roo(用于读取Excel),open-uri是Ruby自带的网络资源拉取库,无需额外安装:
gem install roo
步骤2:编写读取与拉取代码
假设你的Excel里Power列存的是Gameicons的图标slug,代码示例:
require 'roo' require 'open-uri' require 'fileutils' # 读取Excel文件 xlsx = Roo::Excelx.new('your_card_data.xlsx') # 跳过表头,遍历每一行数据 xlsx.each_row_streaming(offset: 1) do |row| # 假设Power列是第3列(索引从0开始,所以是2),根据你的实际表结构调整 power_slug = row[2].value&.strip next if power_slug.nil? || power_slug.empty? # 构造Gameicons图标URL(这里用128x128尺寸,可换成4x4或其他规格) icon_url = "https://game-icons.net/1x1/#{power_slug}.png" begin # 拉取图标二进制数据 icon_content = URI.open(icon_url).read # 可选:将图标保存到本地文件夹(先确保icons目录存在) FileUtils.mkdir_p('icons') unless Dir.exist?('icons') File.write("icons/#{power_slug}.png", icon_content) # 也可以直接在Squib中使用这个二进制数据 # png data: icon_content, x: 100, y: 100 rescue OpenURI::HTTPError => e puts "Failed to fetch icon '#{power_slug}': #{e.message}" rescue => e puts "Unexpected error for '#{power_slug}': #{e.message}" end end
注意事项
- 如果Excel里存的是图标名称而非slug,Gameicons没有公开的搜索API,不建议用网页抓取(可能违反网站规则),最好统一换成slug来存储。
- 记得处理空值和异常,避免个别错误导致整个脚本中断。
内容的提问来源于stack exchange,提问作者Filip Kramarić

