1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
## Description
This is a complex example with a worksheet full of data.
## Code
```ruby
require 'axlsx'
p = Axlsx::Package.new
wb = p.workbook
s = wb.styles
header = s.add_style bg_color: 'DD', sz: 16, b: true, alignment: { horizontal: :center }
tbl_header = s.add_style b: true, alignment: { horizontal: :center }
ind_header = s.add_style bg_color: 'FFDFDEDF', b: true, alignment: { indent: 1 }
col_header = s.add_style bg_color: 'FFDFDEDF', b: true, alignment: { horizontal: :center }
label = s.add_style alignment: { indent: 1 }
money = s.add_style num_fmt: 5
t_label = s.add_style b: true, bg_color: 'FFDFDEDF'
t_money = s.add_style b: true, num_fmt: 5, bg_color: 'FFDFDEDF'
wb.add_worksheet do |sheet|
sheet.add_row
sheet.add_row ['College Budget'], style: header, offset: 1
sheet.add_row
sheet.add_row ["What's coming in this month.", nil, nil, 'How am I doing'], style: tbl_header, offset: 1
sheet.add_row ['Item', 'Amount', nil, 'Item', 'Amount'], style: [ind_header, col_header, nil, ind_header, col_header], offset: 1
sheet.add_row ['Estimated monthly net income', 500, nil, 'Monthly income', '=C9'], style: [label, money, nil, label, money], offset: 1
sheet.add_row ['Financial aid', 100, nil, 'Monthly expenses', '=C27'], style: [label, money, nil, label, money], offset: 1
sheet.add_row ['Allowance from mom & dad', 20000, nil, 'Semester expenses', '=F19'], style: [label, money, nil, label, money], offset: 1
sheet.add_row ['Total', '=SUM(C6:C8)', nil, 'Difference', '=F6 - SUM(F7:F8)'], style: [t_label, t_money, nil, t_label, t_money], offset: 1
sheet.add_row
sheet.add_row ["What's going out this month.", nil, nil, 'Semester Costs'], style: tbl_header, offset: 1
sheet.add_row ['Item', 'Amount', nil, 'Item', 'Amount'], style: [ind_header, col_header, nil, ind_header, col_header], offset: 1
sheet.add_row ['Rent', 650, nil, 'Tuition', 200], style: [label, money, nil, label, money], offset: 1
sheet.add_row ['Utilities', 120, nil, 'Lab fees', 50], style: [label, money, nil, label, money], offset: 1
sheet.add_row ['Cell phone', 100, nil, 'Other fees', 10], style: [label, money, nil, label, money], offset: 1
sheet.add_row ['Groceries', 75, nil, 'Books', 150], style: [label, money, nil, label, money], offset: 1
sheet.add_row ['Auto expenses', 0, nil, 'Deposits', 0], style: [label, money, nil, label, money], offset: 1
sheet.add_row ['Student loans', 0, nil, 'Transportation', 30], style: [label, money, nil, label, money], offset: 1
sheet.add_row ['Other loans', 350, nil, 'Total', '=SUM(F13:F18)'], style: [label, money, nil, t_label, t_money], offset: 1
sheet.add_row ['Credit cards', 450], style: [label, money], offset: 1
sheet.add_row ['Insurance', 0], style: [label, money], offset: 1
sheet.add_row ['Laundry', 10], style: [label, money], offset: 1
sheet.add_row ['Haircuts', 0], style: [label, money], offset: 1
sheet.add_row ['Medical expenses', 0], style: [label, money], offset: 1
sheet.add_row ['Entertainment', 500], style: [label, money], offset: 1
sheet.add_row ['Miscellaneous', 0], style: [label, money], offset: 1
sheet.add_row ['Total', '=SUM(C13:C26)'], style: [t_label, t_money], offset: 1
sheet.add_chart(Axlsx::Pie3DChart) do |chart|
chart.title = sheet['B11']
chart.add_series data: sheet['C13:C26'], labels: sheet['B13:B26']
chart.start_at 7, 2
chart.end_at 12, 15
end
sheet.add_chart(Axlsx::Bar3DChart, barDir: :col) do |chart|
chart.title = sheet['E11']
chart.add_series labels: sheet['E13:E18'], data: sheet['F13:F18']
chart.start_at 7, 16
chart.end_at 12, 31
end
[
'B4:C4',
'E4:F4',
'B11:C11',
'E11:F11',
'B2:F2'
].each { |range| sheet.merge_cells(range) }
sheet.column_widths 2, nil, nil, 2, nil, nil, 2
end
p.serialize 'complex_example.xlsx'
```
## Output

|