Class: RubyReport::Generator::Xlsx

Inherits:
Base
  • Object
show all
Defined in:
lib/ruby_report/generator/xlsx.rb

Defined Under Namespace

Classes: Worksheet

Constant Summary collapse

WORKSHEET_LETTERS_COUNT =
25
ESCAPE_REGEXP =
/["~#%&:;<>!=',@{|}\/?*()+\[\]$]/
XLSX_XSS_SYMBOLS =
%w[+ - = @ {=].freeze

Instance Method Summary collapse

Constructor Details

#initializeXlsx

Returns a new instance of Xlsx.



47
48
49
50
51
# File 'lib/ruby_report/generator/xlsx.rb', line 47

def initialize
  @package = ::Axlsx::Package.new.tap { |package| package.use_shared_strings = true }
  @workbook = package.workbook
  @reports = []
end

Instance Method Details

#add_report(report, worksheet_name:) ⇒ Object



53
54
55
56
57
58
# File 'lib/ruby_report/generator/xlsx.rb', line 53

def add_report(report, worksheet_name:)
  reports << {
    report: report,
    worksheet: Worksheet.new(workbook, sanitize_worksheet_name(worksheet_name)),
  }
end

#generateObject



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/ruby_report/generator/xlsx.rb', line 60

def generate
  reports.each do |report|
    worksheet = report[:worksheet]
    report = report[:report]

    worksheet.add_header(report.header)

    report.each_row do |row|
      next if row.empty?

      worksheet.add_row(sanitize_row(row))
    end
  end

  package.to_stream
end