使用axlsx [Ruby]将多行文本插入电子表格

时间:2013-05-26 02:52:18

标签: ruby excel axlsx

我正在尝试使用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

如果有人可以帮助我,我会非常感激......

2 个答案:

答案 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