activeadmin-axlsx icon indicating copy to clipboard operation
activeadmin-axlsx copied to clipboard

get data for pivot table from another sheet in after_filter hook

Open okliv opened this issue 11 years ago • 1 comments

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?

okliv avatar Nov 29 '13 03:11 okliv

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

knut2 avatar Oct 26 '16 10:10 knut2