2013-01-04 76 views
0

在下面的代碼,happy_path作品,但不是sad_path替代add_row爲axlsx

require "axlsx" 

def happy_path 
    package = Axlsx::Package.new 
    workbook = package.workbook 
    worksheet = workbook.add_worksheet 
    worksheet.add_row(["Hot", "Summer", "Night"]) 
    cell = worksheet.name_to_cell("A1") 
    cell.value = "Cold" 
    package.serialize("Happy_path_20130104.xlsx") 
end 

def sad_path 
    package = Axlsx::Package.new 
    workbook = package.workbook 
    worksheet = workbook.add_worksheet 
    worksheet.add_row(["Hot", "Summer", "Night"]) 
    cell = worksheet.name_to_cell("E1") 
    begin 
    cell.value = "Meatloaf" 
    rescue NoMethodError 
    STDERR.puts $! 
    end 
    package.serialize("Sad_path_20130104.xlsx") 
end 

happy_path 
sad_path 

sad_path給出了錯誤

undefined method `value=' for nil:NilClass 

因爲cell爲零。文檔的

http://rubydoc.info/github/randym/axlsx/Axlsx/Cell等部位警告:

注:生成細胞推薦的方法是通過表#add_row

的問題是,我希望能夠添加數據到A1,B1和C1,然後在E1,F1和G1上添加數據。

有沒有辦法做到這一點?還是應該存儲A1,B1,C1和E1,F1和G1的數據,並將其一次性添加到工作表中?

+1

只需爲最大列添加空白值,你會得到什麼? 'add_row([「Hot」,「Summer」,「Night」,「」,「」,「」,「」])'。 – oldergod

回答

1

我希望看到更多的討論,然後向庫中添加這樣的方法。 Axlsx故意稀疏以最小化序列化時間。如果你可以在github上提交pull請求,那真的會對每個人都有幫助。同時,如果您發送零值,將根據您的要求創建單元格。

例如:

add_row ["foo", nil, nil] 

將創建A1 ... C1細胞,就可以直接訪問這些細胞的方法。

+1

我最終修改了我的代碼,一次將所有內容序列化。作爲未來讀者的注意事項,'nil'會隱藏一個列(除非該列中有非''nil'值的其他單元格),而''「'會使列可見。 –