2013-05-26 120 views
1

我正嘗試在Ruby中創建一些帶有axlsx gem的多行單元格。我發現this問題,建議使用to_xml_string修復 - 但無論我嘗試什麼,我都無法獲得這些多行單元格!用axlsx將多行文本插入到電子表格中[Ruby]

這裏是我當前的代碼:

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

如果任何人有這個問題,我是用在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 
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

+0

感謝您的答覆randym。說實話,我從來沒有想過要分開處理,但它確實有道理! – facetoe

相關問題