1

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

我在这里搜索了该站点,看到一些人使用了允许“book.add_worksheet”的不同 gem(电子表格 gem 应该支持其他 gem,就像它应该像 1 中的 3 个 gem 一样......)和这几乎可以正常工作,但是undefined method 'workbook=' for "new_sheet":String (NoMethodError)在执行该行时出现错误sheet = book.add_worksheet("new_sheet")

我尝试过的另一件事是sheet = Spreadsheet::Worksheet.new,我在电子表格 ruby​​forge 页面上看到有公共类方法new(opts={}),如果您单击查看代码,该方法包括@name = opts[:name] || Worksheet让我相信我应该能够使用它来创建和命名的行新的工作表,但我无法弄清楚正确的语法。

我正在尝试的可能吗?看起来我已经接近了,但我并没有完全击中它。

4

2 回答 2

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'

以上,从文档中逐字逐句地提取出来,这是一种享受。

于 2010-09-19T14:21:23.283 回答
0

我发现您可以使用相同的变量创建许多工作表,您只需更改您输入的名称。例如:

文章.每个都做|艺术| sheet1 = book.create_worksheet :name => art.code end

于 2016-01-05T18:50:50.877 回答