write_xlsx 0.99.0 → 1.07.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +0 -1
- data/Changes +70 -0
- data/README.md +1 -1
- data/examples/a_simple.rb +1 -1
- data/examples/add_vba_project.rb +1 -1
- data/examples/array_formula.rb +1 -1
- data/examples/chart_area.rb +5 -2
- data/examples/chart_bar.rb +5 -2
- data/examples/chart_clustered.rb +1 -1
- data/examples/chart_column.rb +5 -2
- data/examples/chart_combined.rb +1 -1
- data/examples/chart_data_labels.rb +320 -0
- data/examples/chart_data_table.rb +9 -3
- data/examples/chart_data_tools.rb +25 -7
- data/examples/chart_doughnut.rb +17 -5
- data/examples/chart_gauge.rb +73 -0
- data/examples/chart_line.rb +90 -12
- data/examples/chart_pareto.rb +1 -1
- data/examples/chart_pie.rb +9 -3
- data/examples/chart_radar.rb +13 -4
- data/examples/chart_scatter.rb +5 -2
- data/examples/chart_secondary_axis.rb +5 -2
- data/examples/chart_stock.rb +1 -1
- data/examples/chart_styles.rb +1 -1
- data/examples/colors.rb +1 -1
- data/examples/data_validate.rb +1 -1
- data/examples/date_time.rb +1 -1
- data/examples/demo.rb +4 -1
- data/examples/formats.rb +1 -1
- data/examples/headers.rb +1 -1
- data/examples/hide_row_col.rb +1 -1
- data/examples/hide_sheet.rb +1 -1
- data/examples/hyperlink1.rb +1 -1
- data/examples/indent.rb +1 -1
- data/examples/macros.rb +1 -1
- data/examples/merge1.rb +1 -1
- data/examples/merge2.rb +1 -1
- data/examples/merge3.rb +1 -1
- data/examples/merge4.rb +1 -1
- data/examples/merge5.rb +1 -1
- data/examples/merge6.rb +1 -1
- data/examples/outline.rb +1 -1
- data/examples/outline_collapsed.rb +1 -1
- data/examples/panes.rb +1 -1
- data/examples/properties.rb +1 -1
- data/examples/regions.rb +1 -1
- data/examples/rich_strings.rb +1 -1
- data/examples/right_to_left.rb +1 -1
- data/examples/shape1.rb +1 -1
- data/examples/shape2.rb +1 -1
- data/examples/shape3.rb +1 -1
- data/examples/shape4.rb +1 -1
- data/examples/shape5.rb +1 -1
- data/examples/shape6.rb +1 -1
- data/examples/shape7.rb +1 -1
- data/examples/shape8.rb +1 -1
- data/examples/shape_all.rb +1 -1
- data/examples/sparklines1.rb +1 -1
- data/examples/sparklines2.rb +1 -1
- data/examples/stats.rb +1 -1
- data/examples/stats_ext.rb +1 -1
- data/examples/stocks.rb +1 -1
- data/examples/tab_colors.rb +1 -1
- data/examples/tables.rb +78 -43
- data/lib/write_xlsx/chart.rb +163 -34
- data/lib/write_xlsx/chart/area.rb +1 -1
- data/lib/write_xlsx/chart/bar.rb +1 -1
- data/lib/write_xlsx/chart/column.rb +1 -1
- data/lib/write_xlsx/chart/doughnut.rb +1 -1
- data/lib/write_xlsx/chart/line.rb +16 -2
- data/lib/write_xlsx/chart/pie.rb +21 -8
- data/lib/write_xlsx/chart/radar.rb +1 -1
- data/lib/write_xlsx/chart/scatter.rb +1 -1
- data/lib/write_xlsx/chart/series.rb +100 -0
- data/lib/write_xlsx/chart/stock.rb +1 -1
- data/lib/write_xlsx/chartsheet.rb +5 -5
- data/lib/write_xlsx/drawing.rb +86 -30
- data/lib/write_xlsx/format.rb +5 -5
- data/lib/write_xlsx/package/comments.rb +11 -11
- data/lib/write_xlsx/package/relationships.rb +4 -4
- data/lib/write_xlsx/package/styles.rb +26 -8
- data/lib/write_xlsx/package/table.rb +8 -7
- data/lib/write_xlsx/package/vml.rb +20 -19
- data/lib/write_xlsx/shape.rb +4 -3
- data/lib/write_xlsx/sheets.rb +18 -16
- data/lib/write_xlsx/sparkline.rb +1 -1
- data/lib/write_xlsx/utility.rb +40 -7
- data/lib/write_xlsx/version.rb +1 -1
- data/lib/write_xlsx/workbook.rb +69 -44
- data/lib/write_xlsx/worksheet.rb +206 -138
- data/lib/write_xlsx/worksheet/hyperlink.rb +16 -37
- data/test/drawing/test_drawing_chart_01.rb +6 -2
- data/test/drawing/test_drawing_image_01.rb +12 -3
- data/test/drawing/test_drawing_shape_01.rb +8 -5
- data/test/drawing/test_drawing_shape_02.rb +12 -5
- data/test/drawing/test_drawing_shape_03.rb +8 -5
- data/test/drawing/test_drawing_shape_04.rb +8 -24
- data/test/drawing/test_drawing_shape_05.rb +8 -5
- data/test/drawing/test_drawing_shape_06.rb +11 -6
- data/test/drawing/test_drawing_shape_07.rb +11 -6
- data/test/drawing/test_write_a_graphic_frame_locks.rb +1 -1
- data/test/drawing/test_write_c_chart.rb +1 -1
- data/test/drawing/test_write_c_nv_graphic_frame_pr.rb +1 -1
- data/test/drawing/test_write_c_nv_pr.rb +1 -1
- data/test/drawing/test_write_col.rb +1 -1
- data/test/drawing/test_write_col_off.rb +1 -1
- data/test/drawing/test_write_ext.rb +1 -1
- data/test/drawing/test_write_pos.rb +1 -1
- data/test/drawing/test_write_row.rb +1 -1
- data/test/drawing/test_write_row_off.rb +1 -1
- data/test/drawing/test_write_xfrm_extension.rb +1 -1
- data/test/drawing/test_write_xfrm_offset.rb +1 -1
- data/test/perl_output/chart_data_labels.xlsx +0 -0
- data/test/perl_output/chart_gauge.xlsx +0 -0
- data/test/perl_output/chart_line.xlsx +0 -0
- data/test/perl_output/comments2.xlsx +0 -0
- data/test/perl_output/tables.xlsx +0 -0
- data/test/regression/images/red2.png +0 -0
- data/test/regression/test_array_formula04.rb +31 -0
- data/test/regression/test_chart_axis26.rb +10 -8
- data/test/regression/test_chart_axis27.rb +1 -1
- data/test/regression/test_chart_axis28.rb +1 -1
- data/test/regression/test_chart_axis29.rb +1 -1
- data/test/regression/test_chart_axis33.rb +1 -1
- data/test/regression/test_chart_axis44.rb +54 -0
- data/test/regression/test_chart_axis45.rb +54 -0
- data/test/regression/test_chart_axis46.rb +54 -0
- data/test/regression/test_chart_combined10.rb +43 -0
- data/test/regression/test_chart_combined11.rb +63 -0
- data/test/regression/test_chart_data_labels25.rb +1 -1
- data/test/regression/test_chart_data_labels26.rb +44 -0
- data/test/regression/test_chart_data_labels27.rb +44 -0
- data/test/regression/test_chart_data_labels28.rb +52 -0
- data/test/regression/test_chart_data_labels29.rb +43 -0
- data/test/regression/test_chart_data_labels30.rb +46 -0
- data/test/regression/test_chart_data_labels31.rb +49 -0
- data/test/regression/test_chart_data_labels32.rb +54 -0
- data/test/regression/test_chart_data_labels33.rb +52 -0
- data/test/regression/test_chart_data_labels34.rb +54 -0
- data/test/regression/test_chart_data_labels35.rb +46 -0
- data/test/regression/test_chart_data_labels36.rb +54 -0
- data/test/regression/test_chart_data_labels37.rb +51 -0
- data/test/regression/test_chart_data_labels38.rb +54 -0
- data/test/regression/test_chart_data_labels39.rb +53 -0
- data/test/regression/test_chart_data_labels40.rb +53 -0
- data/test/regression/test_chart_data_labels41.rb +54 -0
- data/test/regression/test_chart_data_labels42.rb +58 -0
- data/test/regression/test_chart_data_labels43.rb +58 -0
- data/test/regression/test_chart_data_labels44.rb +56 -0
- data/test/regression/test_chart_data_labels45.rb +57 -0
- data/test/regression/test_chart_data_labels46.rb +61 -0
- data/test/regression/test_chart_data_labels47.rb +61 -0
- data/test/regression/test_chart_doughnut07.rb +37 -0
- data/test/regression/test_chart_font09.rb +1 -1
- data/test/regression/test_chart_line05.rb +43 -0
- data/test/regression/test_chart_line06.rb +43 -0
- data/test/regression/test_chart_size03.rb +4 -1
- data/test/regression/test_comment14.rb +29 -0
- data/test/regression/test_comment15.rb +28 -0
- data/test/regression/test_comment16.rb +34 -0
- data/test/regression/test_header_image15.rb +36 -0
- data/test/regression/test_header_image16.rb +42 -0
- data/test/regression/test_header_image17.rb +46 -0
- data/test/regression/test_header_image18.rb +48 -0
- data/test/regression/test_header_image19.rb +36 -0
- data/test/regression/test_hyperlink32.rb +27 -0
- data/test/regression/test_hyperlink33.rb +28 -0
- data/test/regression/test_hyperlink34.rb +33 -0
- data/test/regression/test_hyperlink35.rb +39 -0
- data/test/regression/test_hyperlink36.rb +34 -0
- data/test/regression/test_hyperlink37.rb +33 -0
- data/test/regression/test_hyperlink38.rb +27 -0
- data/test/regression/test_hyperlink39.rb +27 -0
- data/test/regression/test_hyperlink40.rb +27 -0
- data/test/regression/test_hyperlink41.rb +27 -0
- data/test/regression/test_hyperlink42.rb +27 -0
- data/test/regression/test_hyperlink43.rb +27 -0
- data/test/regression/test_hyperlink44.rb +27 -0
- data/test/regression/test_hyperlink45.rb +27 -0
- data/test/regression/test_hyperlink47.rb +27 -0
- data/test/regression/test_hyperlink48.rb +31 -0
- data/test/regression/test_hyperlink49.rb +29 -0
- data/test/regression/test_image06.rb +5 -5
- data/test/regression/test_image08.rb +5 -4
- data/test/regression/test_image15.rb +4 -2
- data/test/regression/test_image28.rb +1 -1
- data/test/regression/test_image44.rb +28 -0
- data/test/regression/test_image45.rb +29 -0
- data/test/regression/test_image46.rb +29 -0
- data/test/regression/test_image47.rb +28 -0
- data/test/regression/test_image48.rb +32 -0
- data/test/regression/test_image49.rb +38 -0
- data/test/regression/test_image50.rb +24 -0
- data/test/regression/test_image51.rb +30 -0
- data/test/regression/test_object_position01.rb +26 -0
- data/test/regression/test_object_position02.rb +26 -0
- data/test/regression/test_object_position03.rb +26 -0
- data/test/regression/test_object_position04.rb +44 -0
- data/test/regression/test_object_position06.rb +28 -0
- data/test/regression/test_object_position07.rb +28 -0
- data/test/regression/test_object_position08.rb +47 -0
- data/test/regression/test_object_position09.rb +50 -0
- data/test/regression/test_object_position10.rb +28 -0
- data/test/regression/test_object_position12.rb +25 -0
- data/test/regression/test_object_position13.rb +25 -0
- data/test/regression/test_object_position14.rb +25 -0
- data/test/regression/test_object_position15.rb +29 -0
- data/test/regression/test_object_position16.rb +29 -0
- data/test/regression/test_object_position17.rb +29 -0
- data/test/regression/test_object_position18.rb +29 -0
- data/test/regression/test_object_position19.rb +29 -0
- data/test/regression/test_object_position20.rb +29 -0
- data/test/regression/test_shape_connect01.rb +4 -2
- data/test/regression/test_table24.rb +27 -0
- data/test/regression/test_table25.rb +27 -0
- data/test/regression/xlsx_files/array_formula04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis26.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis27.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis28.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis29.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis33.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis44.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis45.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis46.xlsx +0 -0
- data/test/regression/xlsx_files/chart_combined10.xlsx +0 -0
- data/test/regression/xlsx_files/chart_combined11.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels25.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels26.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels27.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels28.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels29.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels30.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels31.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels32.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels33.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels34.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels35.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels36.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels37.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels38.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels39.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels40.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels41.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels42.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels43.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels44.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels45.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels46.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels47.xlsx +0 -0
- data/test/regression/xlsx_files/chart_doughnut07.xlsx +0 -0
- data/test/regression/xlsx_files/chart_font09.xlsx +0 -0
- data/test/regression/xlsx_files/chart_line05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_line06.xlsx +0 -0
- data/test/regression/xlsx_files/comment14.xlsx +0 -0
- data/test/regression/xlsx_files/comment15.xlsx +0 -0
- data/test/regression/xlsx_files/comment16.xlsx +0 -0
- data/test/regression/xlsx_files/header_image15.xlsx +0 -0
- data/test/regression/xlsx_files/header_image16.xlsx +0 -0
- data/test/regression/xlsx_files/header_image17.xlsx +0 -0
- data/test/regression/xlsx_files/header_image18.xlsx +0 -0
- data/test/regression/xlsx_files/header_image19.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink32.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink33.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink34.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink35.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink36.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink37.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink38.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink39.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink40.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink41.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink42.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink43.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink44.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink45.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink46.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink47.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink48.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink49.xlsx +0 -0
- data/test/regression/xlsx_files/image06.xlsx +0 -0
- data/test/regression/xlsx_files/image44.xlsx +0 -0
- data/test/regression/xlsx_files/image45.xlsx +0 -0
- data/test/regression/xlsx_files/image46.xlsx +0 -0
- data/test/regression/xlsx_files/image47.xlsx +0 -0
- data/test/regression/xlsx_files/image48.xlsx +0 -0
- data/test/regression/xlsx_files/image49.xlsx +0 -0
- data/test/regression/xlsx_files/image50.xlsx +0 -0
- data/test/regression/xlsx_files/image51.xlsx +0 -0
- data/test/regression/xlsx_files/object_position01.xlsx +0 -0
- data/test/regression/xlsx_files/object_position02.xlsx +0 -0
- data/test/regression/xlsx_files/object_position03.xlsx +0 -0
- data/test/regression/xlsx_files/object_position04.xlsx +0 -0
- data/test/regression/xlsx_files/object_position06.xlsx +0 -0
- data/test/regression/xlsx_files/object_position07.xlsx +0 -0
- data/test/regression/xlsx_files/object_position08.xlsx +0 -0
- data/test/regression/xlsx_files/object_position09.xlsx +0 -0
- data/test/regression/xlsx_files/object_position10.xlsx +0 -0
- data/test/regression/xlsx_files/object_position12.xlsx +0 -0
- data/test/regression/xlsx_files/object_position13.xlsx +0 -0
- data/test/regression/xlsx_files/object_position14.xlsx +0 -0
- data/test/regression/xlsx_files/object_position15.xlsx +0 -0
- data/test/regression/xlsx_files/object_position16.xlsx +0 -0
- data/test/regression/xlsx_files/object_position17.xlsx +0 -0
- data/test/regression/xlsx_files/object_position18.xlsx +0 -0
- data/test/regression/xlsx_files/object_position19.xlsx +0 -0
- data/test/regression/xlsx_files/object_position20.xlsx +0 -0
- data/test/regression/xlsx_files/table24.xlsx +0 -0
- data/test/regression/xlsx_files/table25.xlsx +0 -0
- data/test/test_example_match.rb +1268 -780
- data/test/workbook/test_check_sheetname.rb +51 -0
- data/write_xlsx.gemspec +1 -0
- metadata +367 -5
data/examples/tab_colors.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
# Example of how to set Excel worksheet tab colours.
|
6
6
|
#
|
7
7
|
# reverse(c), May 2006, John McNamara, jmcnamara@cpan.org
|
8
|
-
# convert to ruby by Hideo NAKAMURA,
|
8
|
+
# convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
|
9
9
|
#
|
10
10
|
|
11
11
|
require 'write_xlsx'
|
data/examples/tables.rb
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
# structure that can be references in a formula or formatted collectively.
|
10
10
|
#
|
11
11
|
# reverse(c), March 2001, John McNamara, jmcnamara@cpan.org
|
12
|
-
# convert to ruby by Hideo NAKAMURA,
|
12
|
+
# convert to ruby by Hideo NAKAMURA, nakamura.hideo@gmail.com
|
13
13
|
#
|
14
14
|
|
15
15
|
require 'write_xlsx'
|
@@ -28,6 +28,7 @@
|
|
28
28
|
worksheet10 = workbook.add_worksheet
|
29
29
|
worksheet11 = workbook.add_worksheet
|
30
30
|
worksheet12 = workbook.add_worksheet
|
31
|
+
worksheet13 = workbook.add_worksheet
|
31
32
|
|
32
33
|
currency_format = workbook.add_format(:num_format => '$#,##0')
|
33
34
|
|
@@ -60,7 +61,7 @@
|
|
60
61
|
#
|
61
62
|
# Example 2.
|
62
63
|
#
|
63
|
-
caption = 'Default table with data.'
|
64
|
+
caption = 'Default table with data.'
|
64
65
|
|
65
66
|
# Set the columns widths.
|
66
67
|
worksheet2.set_column('B:G', 12)
|
@@ -130,7 +131,7 @@
|
|
130
131
|
#
|
131
132
|
# Example 6.
|
132
133
|
#
|
133
|
-
caption = 'Table with banded columns but without default banded rows.'
|
134
|
+
caption = 'Table with banded columns but without default banded rows.'
|
134
135
|
|
135
136
|
# Set the columns widths.
|
136
137
|
worksheet6.set_column('B:G', 12)
|
@@ -149,7 +150,7 @@
|
|
149
150
|
#
|
150
151
|
# Example 7.
|
151
152
|
#
|
152
|
-
caption = 'Table with user defined column headers'
|
153
|
+
caption = 'Table with user defined column headers'
|
153
154
|
|
154
155
|
# Set the columns widths.
|
155
156
|
worksheet7.set_column('B:G', 12)
|
@@ -176,7 +177,7 @@
|
|
176
177
|
#
|
177
178
|
# Example 8.
|
178
179
|
#
|
179
|
-
caption = 'Table with user defined column headers'
|
180
|
+
caption = 'Table with user defined column headers'
|
180
181
|
|
181
182
|
# Set the columns widths.
|
182
183
|
worksheet8.set_column('B:G', 12)
|
@@ -208,7 +209,7 @@
|
|
208
209
|
#
|
209
210
|
# Example 9.
|
210
211
|
#
|
211
|
-
caption = 'Table with totals row (but no caption or totals).'
|
212
|
+
caption = 'Table with totals row (but no caption or totals).'
|
212
213
|
|
213
214
|
# Set the columns widths.
|
214
215
|
worksheet9.set_column('B:G', 12)
|
@@ -241,7 +242,7 @@
|
|
241
242
|
#
|
242
243
|
# Example 10.
|
243
244
|
#
|
244
|
-
caption = 'Table with totals row with user captions and functions.'
|
245
|
+
caption = 'Table with totals row with user captions and functions.'
|
245
246
|
|
246
247
|
# Set the columns widths.
|
247
248
|
worksheet10.set_column('B:G', 12)
|
@@ -275,7 +276,7 @@
|
|
275
276
|
#
|
276
277
|
# Example 11.
|
277
278
|
#
|
278
|
-
caption = 'Table with alternative Excel style.'
|
279
|
+
caption = 'Table with alternative Excel style.'
|
279
280
|
|
280
281
|
# Set the columns widths.
|
281
282
|
worksheet11.set_column('B:G', 12)
|
@@ -310,7 +311,7 @@
|
|
310
311
|
#
|
311
312
|
# Example 12.
|
312
313
|
#
|
313
|
-
caption = 'Table with
|
314
|
+
caption = 'Table with no Excel style.'
|
314
315
|
|
315
316
|
# Set the columns widths.
|
316
317
|
worksheet12.set_column('B:G', 12)
|
@@ -320,40 +321,74 @@
|
|
320
321
|
|
321
322
|
# Add a table to the worksheet.
|
322
323
|
worksheet12.add_table(
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
324
|
+
'B3:G8',
|
325
|
+
{
|
326
|
+
:data => data,
|
327
|
+
:style => 'None',
|
328
|
+
:total_row => 1,
|
329
|
+
:columns => [
|
330
|
+
{ :header => 'Product', :total_string => 'Totals' },
|
331
|
+
{ :header => 'Quarter 1', :total_function => 'sum' },
|
332
|
+
{ :header => 'Quarter 2', :total_function => 'sum' },
|
333
|
+
{ :header => 'Quarter 3', :total_function => 'sum' },
|
334
|
+
{ :header => 'Quarter 4', :total_function => 'sum' },
|
335
|
+
{
|
336
|
+
:header => 'Year',
|
337
|
+
:formula => '=SUM(Table12[@[Quarter 1]:[Quarter 4]])',
|
338
|
+
:total_function => 'sum'
|
339
|
+
}
|
340
|
+
]
|
341
|
+
}
|
342
|
+
)
|
343
|
+
|
344
|
+
###############################################################################
|
345
|
+
#
|
346
|
+
# Example 13.
|
347
|
+
#
|
348
|
+
caption = 'Table with column formats.'
|
349
|
+
|
350
|
+
# Set the columns widths.
|
351
|
+
worksheet13.set_column('B:G', 12)
|
352
|
+
|
353
|
+
# Write the caption.
|
354
|
+
worksheet13.write('B1', caption)
|
355
|
+
|
356
|
+
# Add a table to the worksheet.
|
357
|
+
worksheet13.add_table(
|
358
|
+
'B3:G8',
|
359
|
+
{
|
360
|
+
:data => data,
|
361
|
+
:total_row => 1,
|
362
|
+
:columns => [
|
363
|
+
{ :header => 'Product', :total_string => 'Totals' },
|
364
|
+
{
|
365
|
+
:header => 'Quarter 1',
|
366
|
+
:total_function => 'sum',
|
367
|
+
:format => currency_format,
|
368
|
+
},
|
369
|
+
{
|
370
|
+
:header => 'Quarter 2',
|
371
|
+
:total_function => 'sum',
|
372
|
+
:format => currency_format,
|
373
|
+
},
|
374
|
+
{
|
375
|
+
:header => 'Quarter 3',
|
376
|
+
:total_function => 'sum',
|
377
|
+
:format => currency_format,
|
378
|
+
},
|
379
|
+
{
|
380
|
+
:header => 'Quarter 4',
|
381
|
+
:total_function => 'sum',
|
382
|
+
:format => currency_format,
|
383
|
+
},
|
384
|
+
{
|
385
|
+
:header => 'Year',
|
386
|
+
:formula => '=SUM(Table8[@[Quarter 1]:[Quarter 4]])',
|
387
|
+
:total_function => 'sum',
|
388
|
+
:format => currency_format,
|
389
|
+
}
|
390
|
+
]
|
391
|
+
}
|
357
392
|
)
|
358
393
|
|
359
394
|
workbook.close
|
data/lib/write_xlsx/chart.rb
CHANGED
@@ -34,7 +34,7 @@ def write_d_table(writer)
|
|
34
34
|
@writer.empty_tag('c:showOutline', attributes) if ptrue?(outline)
|
35
35
|
@writer.empty_tag('c:showKeys', attributes) if ptrue?(show_keys)
|
36
36
|
# Write the table font.
|
37
|
-
write_tx_pr(
|
37
|
+
write_tx_pr(font) if ptrue?(font)
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
@@ -783,7 +783,7 @@ def write_chart # :nodoc:
|
|
783
783
|
elsif @title.formula
|
784
784
|
write_title_formula(@title, nil, nil, @title.layout, @title.overlay)
|
785
785
|
elsif @title.name
|
786
|
-
write_title_rich(@title, nil, @title.layout, @title.overlay)
|
786
|
+
write_title_rich(@title, nil, @title.name_font, @title.layout, @title.overlay)
|
787
787
|
end
|
788
788
|
|
789
789
|
# Write the c:plotArea element.
|
@@ -1178,8 +1178,8 @@ def write_cat_axis(params) # :nodoc:
|
|
1178
1178
|
return unless axis_ids
|
1179
1179
|
return if axis_ids.empty?
|
1180
1180
|
|
1181
|
-
position
|
1182
|
-
|
1181
|
+
position = @cat_axis_position
|
1182
|
+
is_y_axis = @horiz_cat_axis
|
1183
1183
|
|
1184
1184
|
# Overwrite the default axis position with a user supplied value.
|
1185
1185
|
position = x_axis.position || position
|
@@ -1202,9 +1202,9 @@ def write_cat_axis(params) # :nodoc:
|
|
1202
1202
|
|
1203
1203
|
# Write the axis title elements.
|
1204
1204
|
if x_axis.formula
|
1205
|
-
write_title_formula(x_axis,
|
1205
|
+
write_title_formula(x_axis, is_y_axis, @x_axis, x_axis.layout)
|
1206
1206
|
elsif x_axis.name
|
1207
|
-
write_title_rich(x_axis,
|
1207
|
+
write_title_rich(x_axis, is_y_axis, x_axis.name_font, x_axis.layout)
|
1208
1208
|
end
|
1209
1209
|
|
1210
1210
|
# Write the c:numFmt element.
|
@@ -1281,7 +1281,7 @@ def write_val_axis_base(x_axis, y_axis, axis_ids_0, axis_ids_1, position) # :no
|
|
1281
1281
|
if y_axis.formula
|
1282
1282
|
write_title_formula(y_axis, @horiz_val_axis, nil, y_axis.layout)
|
1283
1283
|
elsif y_axis.name
|
1284
|
-
write_title_rich(y_axis, @horiz_val_axis, y_axis.layout)
|
1284
|
+
write_title_rich(y_axis, @horiz_val_axis, y_axis.name_font, y_axis.layout)
|
1285
1285
|
end
|
1286
1286
|
|
1287
1287
|
# Write the c:numberFormat element.
|
@@ -1356,7 +1356,7 @@ def write_date_axis(params) # :nodoc:
|
|
1356
1356
|
if x_axis.formula
|
1357
1357
|
write_title_formula(x_axis, nil, nil, x_axis.layout)
|
1358
1358
|
elsif x_axis.name
|
1359
|
-
write_title_rich(x_axis, nil, x_axis.layout)
|
1359
|
+
write_title_rich(x_axis, nil, x_axis.name_font, x_axis.layout)
|
1360
1360
|
end
|
1361
1361
|
# Write the c:numFmt element.
|
1362
1362
|
write_number_format(x_axis)
|
@@ -1693,7 +1693,7 @@ def write_legend # :nodoc:
|
|
1693
1693
|
# Write the c:spPr element.
|
1694
1694
|
write_sp_pr(@legend)
|
1695
1695
|
# Write the c:txPr element.
|
1696
|
-
write_tx_pr(
|
1696
|
+
write_tx_pr(@legend.font) if ptrue?(@legend.font)
|
1697
1697
|
end
|
1698
1698
|
end
|
1699
1699
|
|
@@ -1808,10 +1808,10 @@ def write_auto_title_deleted
|
|
1808
1808
|
#
|
1809
1809
|
# Write the <c:title> element for a rich string.
|
1810
1810
|
#
|
1811
|
-
def write_title_rich(title,
|
1811
|
+
def write_title_rich(title, is_y_axis, font, layout, overlay = nil) # :nodoc:
|
1812
1812
|
@writer.tag_elements('c:title') do
|
1813
1813
|
# Write the c:tx element.
|
1814
|
-
write_tx_rich(title,
|
1814
|
+
write_tx_rich(title, is_y_axis, font)
|
1815
1815
|
# Write the c:layout element.
|
1816
1816
|
write_layout(layout, 'text')
|
1817
1817
|
# Write the c:overlay element.
|
@@ -1822,7 +1822,7 @@ def write_title_rich(title, horiz = nil, layout = nil, overlay = nil) # :nodoc:
|
|
1822
1822
|
#
|
1823
1823
|
# Write the <c:title> element for a rich string.
|
1824
1824
|
#
|
1825
|
-
def write_title_formula(title,
|
1825
|
+
def write_title_formula(title, is_y_axis = nil, axis = nil, layout = nil, overlay = nil) # :nodoc:
|
1826
1826
|
@writer.tag_elements('c:title') do
|
1827
1827
|
# Write the c:tx element.
|
1828
1828
|
write_tx_formula(title.formula, axis ? axis.data_id : title.data_id)
|
@@ -1831,15 +1831,17 @@ def write_title_formula(title, horiz = nil, axis = nil, layout = nil, overlay =
|
|
1831
1831
|
# Write the c:overlay element.
|
1832
1832
|
write_overlay if overlay
|
1833
1833
|
# Write the c:txPr element.
|
1834
|
-
write_tx_pr(
|
1834
|
+
write_tx_pr(axis ? axis.name_font : title.name_font, is_y_axis)
|
1835
1835
|
end
|
1836
1836
|
end
|
1837
1837
|
|
1838
1838
|
#
|
1839
1839
|
# Write the <c:tx> element.
|
1840
1840
|
#
|
1841
|
-
def write_tx_rich(title,
|
1842
|
-
@writer.tag_elements('c:tx')
|
1841
|
+
def write_tx_rich(title, is_y_axis, font) # :nodoc:
|
1842
|
+
@writer.tag_elements('c:tx') do
|
1843
|
+
write_rich(title, font, is_y_axis)
|
1844
|
+
end
|
1843
1845
|
end
|
1844
1846
|
|
1845
1847
|
#
|
@@ -1861,29 +1863,30 @@ def write_tx_formula(title, data_id) # :nodoc:
|
|
1861
1863
|
#
|
1862
1864
|
# Write the <c:rich> element.
|
1863
1865
|
#
|
1864
|
-
def write_rich(title,
|
1866
|
+
def write_rich(title, font, is_y_axis, ignore_rich_pr = false) # :nodoc:
|
1865
1867
|
rotation = nil
|
1866
|
-
|
1867
|
-
|
1868
|
+
|
1869
|
+
if font && font[:_rotation]
|
1870
|
+
rotation = font[:_rotation]
|
1868
1871
|
end
|
1869
1872
|
@writer.tag_elements('c:rich') do
|
1870
1873
|
# Write the a:bodyPr element.
|
1871
|
-
write_a_body_pr(rotation,
|
1874
|
+
write_a_body_pr(rotation, is_y_axis)
|
1872
1875
|
# Write the a:lstStyle element.
|
1873
1876
|
write_a_lst_style
|
1874
1877
|
# Write the a:p element.
|
1875
|
-
write_a_p_rich(title)
|
1878
|
+
write_a_p_rich(title, font, ignore_rich_pr)
|
1876
1879
|
end
|
1877
1880
|
end
|
1878
1881
|
#
|
1879
1882
|
# Write the <a:p> element for rich string titles.
|
1880
1883
|
#
|
1881
|
-
def write_a_p_rich(title) # :nodoc:
|
1884
|
+
def write_a_p_rich(title, font, ignore_rich_pr) # :nodoc:
|
1882
1885
|
@writer.tag_elements('a:p') do
|
1883
1886
|
# Write the a:pPr element.
|
1884
|
-
write_a_p_pr_rich(
|
1887
|
+
write_a_p_pr_rich(font) if !ignore_rich_pr
|
1885
1888
|
# Write the a:r element.
|
1886
|
-
write_a_r(title)
|
1889
|
+
write_a_r(title, font)
|
1887
1890
|
end
|
1888
1891
|
end
|
1889
1892
|
|
@@ -1897,12 +1900,12 @@ def write_a_p_pr_rich(font) # :nodoc:
|
|
1897
1900
|
#
|
1898
1901
|
# Write the <a:r> element.
|
1899
1902
|
#
|
1900
|
-
def write_a_r(title) # :nodoc:
|
1903
|
+
def write_a_r(title, font) # :nodoc:
|
1901
1904
|
@writer.tag_elements('a:r') do
|
1902
1905
|
# Write the a:rPr element.
|
1903
|
-
write_a_r_pr(
|
1906
|
+
write_a_r_pr(font)
|
1904
1907
|
# Write the a:t element.
|
1905
|
-
write_a_t(title.name)
|
1908
|
+
write_a_t(title.respond_to?(:name) ? title.name : title)
|
1906
1909
|
end
|
1907
1910
|
end
|
1908
1911
|
|
@@ -1967,17 +1970,27 @@ def write_symbol(val) # :nodoc:
|
|
1967
1970
|
@writer.empty_tag('c:symbol', [ ['val', val] ])
|
1968
1971
|
end
|
1969
1972
|
|
1973
|
+
def has_fill_formatting(element)
|
1974
|
+
line = series_property(element, :line)
|
1975
|
+
fill = series_property(element, :fill)
|
1976
|
+
pattern = series_property(element, :pattern)
|
1977
|
+
gradient = series_property(element, :gradient)
|
1978
|
+
|
1979
|
+
(line && ptrue?(line[:_defined])) ||
|
1980
|
+
(fill && ptrue?(fill[:_defined])) || pattern || gradient
|
1981
|
+
end
|
1982
|
+
|
1983
|
+
|
1970
1984
|
#
|
1971
1985
|
# Write the <c:spPr> element.
|
1972
1986
|
#
|
1973
1987
|
def write_sp_pr(series) # :nodoc:
|
1974
|
-
|
1975
|
-
fill = series.fill
|
1976
|
-
pattern = series.pattern if series.respond_to?(:pattern)
|
1977
|
-
gradient = series.gradient if series.respond_to?(:gradient)
|
1988
|
+
return if !has_fill_formatting(series)
|
1978
1989
|
|
1979
|
-
|
1980
|
-
|
1990
|
+
line = series_property(series, :line)
|
1991
|
+
fill = series_property(series, :fill)
|
1992
|
+
pattern = series_property(series, :pattern)
|
1993
|
+
gradient = series_property(series, :gradient)
|
1981
1994
|
|
1982
1995
|
@writer.tag_elements('c:spPr') do
|
1983
1996
|
# Write the fill elements for solid charts such as pie/doughnut and bar.
|
@@ -2002,6 +2015,14 @@ def write_sp_pr(series) # :nodoc:
|
|
2002
2015
|
end
|
2003
2016
|
end
|
2004
2017
|
|
2018
|
+
def series_property(object, property)
|
2019
|
+
if object.respond_to?(property)
|
2020
|
+
object.send(property)
|
2021
|
+
elsif object.respond_to?(:[])
|
2022
|
+
object[property]
|
2023
|
+
end
|
2024
|
+
end
|
2025
|
+
|
2005
2026
|
#
|
2006
2027
|
# Write the <a:ln> element.
|
2007
2028
|
#
|
@@ -2241,7 +2262,12 @@ def write_num_base(tag, data)
|
|
2241
2262
|
write_format_code('General')
|
2242
2263
|
|
2243
2264
|
# Write the c:ptCount element.
|
2244
|
-
|
2265
|
+
if data
|
2266
|
+
count = data.size
|
2267
|
+
else
|
2268
|
+
count = 0
|
2269
|
+
end
|
2270
|
+
write_pt_count(count)
|
2245
2271
|
|
2246
2272
|
data.each_with_index do |token, i|
|
2247
2273
|
# Write non-numeric data as 0.
|
@@ -2344,8 +2370,14 @@ def write_d_lbls(labels) # :nodoc:
|
|
2344
2370
|
return unless labels
|
2345
2371
|
|
2346
2372
|
@writer.tag_elements('c:dLbls') do
|
2373
|
+
# Write the custom c:dLbl elements.
|
2374
|
+
if labels[:custom]
|
2375
|
+
write_custom_labels(labels, labels[:custom])
|
2376
|
+
end
|
2347
2377
|
# Write the c:numFmt element.
|
2348
2378
|
write_data_label_number_format(labels[:num_format]) if labels[:num_format]
|
2379
|
+
# Write the c:spPr element.
|
2380
|
+
write_sp_pr(labels)
|
2349
2381
|
# Write the data label font elements.
|
2350
2382
|
write_axis_font(labels[:font]) if labels[:font]
|
2351
2383
|
# Write the c:dLblPos element.
|
@@ -2367,6 +2399,103 @@ def write_d_lbls(labels) # :nodoc:
|
|
2367
2399
|
end
|
2368
2400
|
end
|
2369
2401
|
|
2402
|
+
#
|
2403
|
+
# Write the <c:dLbl> element.
|
2404
|
+
#
|
2405
|
+
def write_custom_labels(parent, labels)
|
2406
|
+
index = 0
|
2407
|
+
|
2408
|
+
labels.each do |label|
|
2409
|
+
index += 1
|
2410
|
+
next if !ptrue?(label)
|
2411
|
+
|
2412
|
+
@writer.tag_elements('c:dLbl') do
|
2413
|
+
# Write the c:idx element.
|
2414
|
+
write_idx(index - 1)
|
2415
|
+
|
2416
|
+
if label[:delete] && label[:delete]
|
2417
|
+
write_delete(1)
|
2418
|
+
elsif label[:formula]
|
2419
|
+
write_custom_label_formula(label)
|
2420
|
+
|
2421
|
+
write_show_val if parent[:value]
|
2422
|
+
write_show_cat_name if parent[:category]
|
2423
|
+
write_show_ser_name if parent[:series_name]
|
2424
|
+
elsif label[:value]
|
2425
|
+
write_custom_label_str(label)
|
2426
|
+
|
2427
|
+
write_show_val if parent[:value]
|
2428
|
+
write_show_cat_name if parent[:category]
|
2429
|
+
write_show_ser_name if parent[:series_name]
|
2430
|
+
else
|
2431
|
+
write_custom_label_format_only(label)
|
2432
|
+
end
|
2433
|
+
end
|
2434
|
+
end
|
2435
|
+
end
|
2436
|
+
|
2437
|
+
#
|
2438
|
+
# Write parts of the <c:dLbl> element for strings.
|
2439
|
+
#
|
2440
|
+
def write_custom_label_str(label)
|
2441
|
+
value = label[:value]
|
2442
|
+
font = label[:font]
|
2443
|
+
is_y_axis = 0
|
2444
|
+
has_formatting = has_fill_formatting(label)
|
2445
|
+
|
2446
|
+
# Write the c:layout element.
|
2447
|
+
write_layout()
|
2448
|
+
|
2449
|
+
@writer.tag_elements('c:tx') do
|
2450
|
+
# Write the c:rich element.
|
2451
|
+
write_rich(value, font, is_y_axis, !has_formatting)
|
2452
|
+
end
|
2453
|
+
|
2454
|
+
# Write the c:cpPr element.
|
2455
|
+
write_sp_pr(label)
|
2456
|
+
end
|
2457
|
+
|
2458
|
+
#
|
2459
|
+
# Write parts of the <c:dLbl> element for formulas.
|
2460
|
+
#
|
2461
|
+
def write_custom_label_formula(label)
|
2462
|
+
formula = label[:formula]
|
2463
|
+
data_id = label[:data_id]
|
2464
|
+
|
2465
|
+
if data_id
|
2466
|
+
data = @formula_data[data_id]
|
2467
|
+
end
|
2468
|
+
|
2469
|
+
# Write the c:layout element.
|
2470
|
+
write_layout
|
2471
|
+
|
2472
|
+
@writer.tag_elements('c:tx') do
|
2473
|
+
# Write the c:strRef element.
|
2474
|
+
write_str_ref(formula, data, 'str')
|
2475
|
+
end
|
2476
|
+
|
2477
|
+
# Write the data label formatting, if any.
|
2478
|
+
write_custom_label_format_only(label)
|
2479
|
+
end
|
2480
|
+
|
2481
|
+
#
|
2482
|
+
# Write parts of the <c:dLbl> element for labels where only the formatting has
|
2483
|
+
# changed.
|
2484
|
+
#
|
2485
|
+
def write_custom_label_format_only(label)
|
2486
|
+
font = label[:font]
|
2487
|
+
has_formatting = has_fill_formatting(label)
|
2488
|
+
|
2489
|
+
if has_formatting
|
2490
|
+
# Write the c:spPr element.
|
2491
|
+
write_sp_pr(label)
|
2492
|
+
write_tx_pr(font)
|
2493
|
+
elsif font
|
2494
|
+
@writer.empty_tag('c:spPr')
|
2495
|
+
write_tx_pr(font)
|
2496
|
+
end
|
2497
|
+
end
|
2498
|
+
|
2370
2499
|
#
|
2371
2500
|
# Write the <c:showLegendKey> element.
|
2372
2501
|
#
|
@@ -2695,7 +2824,7 @@ def write_a_gs_lst(gradient)
|
|
2695
2824
|
|
2696
2825
|
# Write the a:srgbClr element.
|
2697
2826
|
# TODO: Wait for a feature request to support transparency.
|
2698
|
-
write_a_srgb_clr( color )
|
2827
|
+
write_a_srgb_clr( color )
|
2699
2828
|
end
|
2700
2829
|
end
|
2701
2830
|
end
|