如何使用Spreadsheet gem在Ruby中创建新的电子表格工作表?

时间:2010-09-18 12:18:44

标签: ruby excel spreadsheet worksheet

具体来说,我要做的是添加新的工作表和已经存在的工作表。我尝试使用book.create_worksheet :name => 'new_sheet',但它会覆盖以前的工作表。

我搜索了这里的网站,看到一些人使用了不同的宝石,允许“book.add_worksheet”(电子表格宝石应该支持其他宝石,就像它应该像1个宝石中的3个宝石一样...... 。)这几乎同样有效但我在执行undefined method 'workbook=' for "new_sheet":String (NoMethodError)行时收到错误sheet = book.add_worksheet("new_sheet")

我尝试的另一件事是sheet = Spreadsheet::Worksheet.new,我在the Spreadsheet rubyforge page上看到有公共类方法new(opts={}),如果您点击查看代码,则包含行{{1}这让我相信我应该能够使用它来创建和命名一个新的工作表,但我无法弄清楚正确的语法。

我尝试的是什么?看起来我已经接近了,但我还没打到它。

2 个答案:

答案 0 :(得分:1)

book.create_worksheet(:name => 'unique_name')适合我!

book = Spreadsheet::Workbook.new
sheet1 = book.create_worksheet(:name => 'AAA')
sheet2 = book.create_worksheet(:name => 'BBB')


sheet1.row(0).concat %w{Name Country Acknowlegement}
sheet1[1,0] = 'Japan'
row = sheet1.row(1)
row.push 'Creator of Ruby'
row.unshift 'Yukihiro Matsumoto'
sheet1.row(2).replace [ 'Daniel J. Berger', 'U.S.A.',
                  'Author of original code for Spreadsheet::Excel' ]
sheet1.row(3).push 'Charles Lowe', 'Author of the ruby-ole Library'
sheet1.row(3).insert 1, 'Unknown'
sheet1.update_row 4, 'Hannes Wyss', 'Switzerland', 'Author'

sheet2.row(0).concat %w{NAME COUNYRY ACK}
sheet2[1,0] = 'JAPAN'
row = sheet2.row(1)
row.push 'CREATOR OF RUBY'
row.unshift 'YUKIHIRO MATSUMOTO'
sheet2.row(2).replace [ 'DANIEL J. BERGER', 'U.S.A.',
                  'AUTHOR OF ORIGINAL CODE FOR  Spreadsheet::Excel' ]
sheet2.row(3).push 'CHARLES LOWE', 'AUTHOR OF THE RUBY-OLE LIBRARY'
sheet2.row(3).insert 1, 'UNKNOWN'
sheet2.update_row 4, 'HANNES WYSS', 'SWITZERLAND', 'AUTHOR'

book.write '/Users/stephen/tmp/test2.xls'

上面的内容,几乎逐字逐句地从文档中解脱出来。

答案 1 :(得分:0)

我发现您可以使用相同的变量创建多张工作表,只需更改您放在其上的名称即可。例如:

articles.each do | art |   sheet1 = book.create_worksheet:name => art.code 端