我正在尝试使用Ruby中的axlsx gem创建一些多行单元格。我发现this问题建议使用to_xml_string
进行修复 - 但无论我尝试什么,我都无法获得这些多行单元格!
这是我目前的代码:
def saveAsXlsx
Axlsx::Package.new do |p|
p.workbook.add_worksheet(:name => "Basic Worksheet") do |sheet|
sheet.add_row @headers
@headers.each_with_index do |line, i|
@headerValues[i].unshift @noteValues[i]
sheet.add_row @headerValues[i]
sheet.to_xml_string
end
end
p.serialize('simple.xlsx')
end
end
如果有人可以帮助我,我会非常感激......
答案 0 :(得分:1)
Facetoe -
我有一种感觉,如果你把代码从包中拿出来,那么:xml_space的保留值在工作簿中正确初始化。
您已经在库中突出显示了一个隐藏的假设,假设您永远不会直接从生成的包中构建。
显然我会努力支持这个用例。
与此同时,您将通过执行以下操作为处理器节省大量工作:
p = Axlsx::package.new
p.workbook.add_worksheet do |sheet|
# - your code - styles is available via sheet
# !! you do _not_ need to call to_xml_string
end
p.serialize('foo')
说实话,我从没想过有人会用一种方法完成所有的报告处理,所以这是最有启发性的!
最好,
randym
答案 1 :(得分:0)
如果其他人遇到此问题,我在错误的地方使用to_xml_string
...
以下是更新后的代码:
#Save to excel spreadsheet found at file
def saveAsXlsx(file)
Axlsx::Package.new do |p|
p.workbook.styles do |s|
#Column header format
black_cell = s.add_style :bg_color => "00", :fg_color => "FF", :sz => 14, :alignment => { :horizontal=> :center }
headerFormat = []
@headers.size.times {headerFormat << black_cell}
p.workbook.add_worksheet(:name => "Basic Worksheet") do |sheet|
sheet.add_row @headers, :style => headerFormat
numEntries = @headerValues.size
#Add the values to the spreadsheet
0.upto(numEntries-1) do |i|
sheet.add_row @headerValues[i], :height => 60, :widths=>[50, :auto, :auto, :auto, :auto]
end
#This is necessary to preserve newlines
sheet.to_xml_string
end
p.serialize(file)
end
end
end