Как я могу создать новые электронные таблицы в Ruby, используя гем Spreadsheet? - PullRequest
1 голос
/ 18 сентября 2010

В частности, я пытаюсь добавить новые рабочие листы вместе с уже существующими.Я пытался использовать book.create_worksheet :name => 'new_sheet', но он перезаписывает предыдущий лист.

Я искал сайт здесь и увидел, что некоторые люди используют другой гем, который разрешил "book.add_worksheet" (гем Spreadsheet должен иметьподдержка других драгоценных камней, как будто это должно быть как 3 драгоценных камня в 1 или что-то ...), и это почти сработало, но я получаю ошибку undefined method 'workbook=' for "new_sheet":String (NoMethodError) при выполнении строки sheet = book.add_worksheet("new_sheet").

Другойя попробовал sheet = Spreadsheet::Worksheet.new, и на на странице рубиновой таблицы я вижу, что есть метод открытого класса new(opts={}), который, если вы нажмете, чтобы увидеть код, включает в себя строку @name = opts[:name] || Worksheet, которая ведет меняполагать, что я смогу использовать это для создания и присвоения имени новому рабочему листу, но я не могу понять правильный синтаксис.

Возможно ли то, что я пытаюсь сделать?Кажется, я уже близко, но не совсем бью.

Ответы [ 2 ]

1 голос
/ 19 сентября 2010

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'

Вышеприведенный, дословно взятый из документации, труд - удовольствие.

0 голосов
/ 05 января 2016

Я обнаружил, что вы можете создать множество листов с одной и той же переменной, вам просто нужно изменить имя, которое вы на него наделили. Например:

article.each do | art | sheet1 = book.create_worksheet: name => art.code конец

...