我在读取通过 RubyXL 使用 Axlsx 模块创建的 excel 文件时遇到了一些问题。具体代码是这样的
require 'axlsx'
require 'RubyXL'
#Create the Excel doc with Axlsx with two sheets named My Sheet1 and My Sheet 2
Axlsx::Package.new do |p|
p.workbook.add_worksheet(:name => "My Sheet1") do |sheet|
sheet.add_row ["Simple Pie Chart"]
%w(first second third).each { |label| sheet.add_row [label, rand(24)+1] }
end
p.workbook.add_worksheet(:name => "My Sheet 2") do |sheet|
sheet.add_row ["Simple Pie Chart"]
%w(first second third).each { |label| sheet.add_row [label, rand(24)+1] }
end
p.serialize('simple.xlsx')
end
#Parse the above created Excel via RubyXL and print the names of the two sheets. This comes up blank
workbook = RubyXL::Parser.parse("simple.xlsx")
workbook.worksheets.each do |worksheet|
puts "Worksheet is #{worksheet.sheet_name}"
end
问题是工作表名称出现空白。如果我在使用 axlsx 创建后使用 MS Excel 打开创建的 Excel 并保存它,那么 RubyXL 解析器就能够正确读取工作表名称。似乎 MS Excel 正在以某种方式修复文档。
通过 Axlsx 创建 Excel 时我是否遗漏了什么?
我正在使用 axlsx 版本 1.3.6 和 rubyXL 1.2.10。
我还尝试在使用 axlsx 序列化之前添加 p.use_shared_strings = true。
因此,而不是在 rubyXL 的 parser.rb 中。
#sheet_names, dimensions
def Parser.create_matrix(wb,i, files)
sheet_names = files['app'].css('TitlesOfParts vt|vector vt|lpstr').children
sheet = Worksheet.new(wb,sheet_names[i].to_s,[])
我把它换成了
#sheet_names, dimensions
def Parser.create_matrix(wb,i, files)
sheet_names = []
files['workbook'].css('sheet').each do |sheet|
sheet_names.push sheet.attribute('name').to_s
end
sheet = Worksheet.new(wb,sheet_names[i].to_s,[])
这是正确的解决方法吗?