2013-01-04 36 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'值的其他单元格),而''“'会使列可见。 –