randym / activeadmin-axlsx

ActiveAdmin plugin using Axlsx for adding Excel (xlsx) download links for your resources
MIT License
82 stars 134 forks source link

get data for pivot table from another sheet in after_filter hook #21

Open okliv opened 11 years ago

okliv commented 11 years ago

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?

knut2 commented 8 years ago

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')