activeadmin-axlsx
activeadmin-axlsx copied to clipboard
get data for pivot table from another sheet in after_filter hook
my code:
after_filter { |sheet|
new_sheet = sheet.workbook.add_worksheet(:name => 'Pivot Table')
new_sheet.add_pivot_table "A1:B2", "'Sheet1'!A1:M15" do |pivot_table|
pivot_table.rows = ['Month', 'Year']
pivot_table.columns = ['Type']
pivot_table.data = ['Sales']
end
}
but i receive
undefined method `row' for nil:NilClass
do i miss something or is this a bug?
I think I get the same problem without after_filter just when I try to use data from another sheet.
My minimal working example:
require 'axlsx'
p = Axlsx::Package.new
wb = p.workbook
# Create some data in a sheet
def month
%w(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec).sample
end
def year
%w(2010 2011 2012).sample
end
def type
%w(Meat Dairy Beverages Produce).sample
end
def sales
rand(5000)
end
def cost
rand(1000)
end
#This works
wb.add_worksheet(:name => "Data Sheet") do |sheet|
sheet.add_row ['Month', 'Year', 'Type', 'Sales', 'Cost']
30.times { sheet.add_row [month, year, type, sales, cost] }
sheet.add_pivot_table 'G4:L17', "A1:E31" do |pivot_table|
pivot_table.rows = ['Month', 'Year']
pivot_table.columns = ['Type']
pivot_table.data = ['Sales', 'Cost']
end
end
#This works not
data = wb.add_worksheet(:name => "Data") do |sheet|
sheet.add_row ['Month', 'Year', 'Type', 'Sales', 'Cost']
30.times { sheet.add_row [month, year, type, sales, cost] }
end
wb.add_worksheet(:name => "Pivot Sheet") do |sheet|
sheet.add_pivot_table 'G4:L17', "'%s'!A1:E31" % data.name do |pivot_table|
pivot_table.rows = ['Month', 'Year']
pivot_table.columns = ['Type']
pivot_table.data = ['Sales', 'Cost']
end
end
p.serialize('test.xlsx')