[英]Using gem axlsx, how would I create multiple workbooks in one program?
使用基本的axlsx代碼,我需要創建一個工作簿,將其關閉並在同一程序中創建一個新的工作簿。 工作簿將具有生成的名稱,並將創建一個變量號。 此時,我可以創建所需的工作表,但是根據我的要求,我有重復的工作表名稱。 無論如何,我需要創建多個文件。
我正在從基本的github示例工作:
Axlsx::Package.new do |p|
p.workbook.add_worksheet(:name => "Pie Chart") do |sheet|
sheet.add_row ["Simple Pie Chart"]
%w(first second third).each { |label| sheet.add_row [label, rand(24)+1] }
sheet.add_chart(Axlsx::Pie3DChart, :start_at => [0,5], :end_at => [10, 20], :title => "example 3: Pie Chart") do |chart|
chart.add_series :data => sheet["B2:B4"], :labels => sheet["A2:A4"], :colors => ['FF0000', '00FF00', '0000FF']
end
end
p.serialize('simple.xlsx')
end
以簡化的運行代碼為例。 它使用to_stream方法,但關鍵似乎是每個工作簿使用不同的包。 將to_stream方法與塊配合使用可在文件完成后關閉文件。
class Unload < ApplicationController
require 'axlsx'
package = Axlsx::Package.new
workbook = package.workbook
puts "Companies"
workbook.add_worksheet(name: "Companies") do |sheet|
sheet.add_row ["Name", "Domain", "Prefix"]
Company.all.each do |a|
sheet.add_row [a.name, a.domain, a.prefix]
end
end
stream = package.to_stream()
File.open('db/unloaded/Joint.xlsx', 'wb') { |f| f.write(stream.read) }
workbook = nil
stream = nil
package = nil
Company.all.each do |c|
puts "Company is: " << c.name
ActsAsTenant.with_tenant(c) do
c.package = Axlsx::Package.new
c.workbook = c.package.workbook
company_name = c.blank? ? "Invalid Company" : c.name
puts "Associates for #{company_name}"
c.workbook.add_worksheet(name: "Associates") do |sheet|
sheet.add_row ["Logon", "Name", "Email", "Cell", "Company"]
Associate.all.each do |a|
sheet.add_row [a.logon, a.name, a.email, a.cell, company_name]
end
end
puts "Serializing for #{company_name}"
stream = c.package.to_stream()
File.open("db/unloaded/#{company_name}.xlsx", 'wb') { |f| f.write(stream.read) }
c.workbook = nil
stream = nil
c.package = nil
end
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.