2010-09-18 82 views
1

特別是我想要做的是添加新的工作表旁邊已經有。我試過使用book.create_worksheet :name => 'new_sheet',但它覆蓋了以前的工作表。如何使用Spreadsheet gem在Ruby中創建新的電子表格工作表?

我在這裏搜索了網站,看到一些人使用了不同的gem,允許使用「book.add_worksheet」(電子表格寶石應該支持其他寶石,就像它應該像1寶石一樣。 ..),並且幾乎可以工作,但在執行sheet = book.add_worksheet("new_sheet")行時出現錯誤undefined method 'workbook=' for "new_sheet":String (NoMethodError)

我想另一件事是sheet = Spreadsheet::Worksheet.new和我the Spreadsheet rubyforge page看到有公共類方法new(opts={})如果你點擊查看該代碼,包括使我相信我應該能夠使用此行@name = opts[:name] || Worksheet創建並命名新的工作表,但我無法弄清楚正確的語法。

是我想嘗試的嗎?看起來好像我越來越近了,但我還沒有完全擊中它。

回答

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

事實上,這將適用於硬編碼表。我想我應該提到我正在使用我正在編寫的工具即時創建它們。該工具要求爲表格命名並創建它。我想出了我以前的錯誤(我不小心重寫了整個工作簿),現在我遇到了幾個不同的結果:如果我寫入相同的文件名,它會變壞,如果我寫入不同的文件名並嘗試重新命名它,我遇到訪問錯誤。我似乎無法找到一個「close」方法來匹配我希望擺脫訪問錯誤的「Spreadsheet.open」。思考? – antonymity 2010-09-21 10:01:07

0

我發現你可以用相同的變量創建很多工作表,你只需要改變放在它上面的名字。例如:

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

相關問題