使用Ruby转换波浪线分隔文件为xlsx时遇版本冲突错误
解决axlsx与rubyzip版本冲突问题
问题原因
axlsx 2.0.1对rubyzip的版本依赖是~> 1.0.0,但你的环境中安装了更高版本的rubyzip 2.3.2,两者版本不兼容导致激活失败,单纯卸载重装不会自动处理版本依赖匹配问题。
解决方案
方案1:锁定rubyzip到1.x兼容版本
如果需要保留axlsx 2.0.1,手动指定兼容的rubyzip版本:
若使用Bundler,在Gemfile中添加:
gem 'rubyzip', '~> 1.3.0' gem 'axlsx', '2.0.1'执行
bundle install完成依赖安装。若不使用Bundler,直接通过gem命令安装指定版本:
gem uninstall rubyzip -v 2.3.2 gem install rubyzip -v 1.3.0 gem install axlsx -v 2.0.1
方案2:升级axlsx到支持rubyzip 2.x的版本
axlsx从3.0.0版本开始兼容rubyzip 2.x系列,直接升级axlsx即可解决冲突:
gem uninstall axlsx -v 2.0.1 gem install axlsx # 安装最新稳定版,或指定3.x版本如3.1.0
代码优化提示
你提供的代码中,嵌套的each_with_index会把每个单元格单独作为一行插入Excel,不符合预期。可以简化为直接传入整行数据:
# Load the tilde-delimited file csv = Roo::Spreadsheet.open(fid, extension: :csv, col_sep: '~') # Create a new Excel workbook Axlsx::Package.new do |p| p.workbook.add_worksheet(name: 'Sheet1') do |sheet| csv.each do |row| sheet.add_row(row) end end p.serialize(fidx) end
内容的提问来源于stack exchange,提问作者Jeff Seeman
相关产品推荐
相关产品推荐

