write_xlsx 0.99.0 → 1.07.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/test/test_example_match.rb
CHANGED
@@ -36,9 +36,9 @@ def test_a_simple
|
|
36
36
|
|
37
37
|
# Write a hyperlink
|
38
38
|
hyperlink_format = workbook.add_format(
|
39
|
-
|
40
|
-
|
41
|
-
|
39
|
+
:color => 'blue',
|
40
|
+
:underline => 1
|
41
|
+
)
|
42
42
|
|
43
43
|
worksheet.write(10, 0, 'http://www.ruby-lang.org/', hyperlink_format)
|
44
44
|
|
@@ -242,6 +242,381 @@ def test_autofilter
|
|
242
242
|
compare_xlsx(File.join(@perl_output, @xlsx), @tempfile.path)
|
243
243
|
end
|
244
244
|
|
245
|
+
def test_chart_data_labels
|
246
|
+
@xlsx = 'chart_data_labels.xlsx'
|
247
|
+
workbook = WriteXLSX.new(@io)
|
248
|
+
|
249
|
+
worksheet = workbook.add_worksheet
|
250
|
+
bold = workbook.add_format(:bold => 1)
|
251
|
+
|
252
|
+
# Add the worksheet data that the charts will refer to.
|
253
|
+
headings = ['Number', 'Data', 'Text']
|
254
|
+
data = [
|
255
|
+
[ 2, 3, 4, 5, 6, 7 ],
|
256
|
+
[20, 10, 20, 30, 40, 30 ],
|
257
|
+
['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
|
258
|
+
]
|
259
|
+
|
260
|
+
worksheet.write('A1', headings, bold)
|
261
|
+
worksheet.write('A2', data)
|
262
|
+
|
263
|
+
|
264
|
+
#######################################################################
|
265
|
+
#
|
266
|
+
# Example with standard data labels.
|
267
|
+
#
|
268
|
+
|
269
|
+
# Create a Column chart.
|
270
|
+
chart1 = workbook.add_chart(:type => 'column', :embedded => 1)
|
271
|
+
|
272
|
+
# Configure the data series and add the data labels.
|
273
|
+
chart1.add_series(
|
274
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
275
|
+
:values => '=Sheet1!$B$2:$B$7',
|
276
|
+
:data_labels => { :value => 1 }
|
277
|
+
)
|
278
|
+
|
279
|
+
# Add a chart title.
|
280
|
+
chart1.set_title(:name => 'Chart with standard data labels')
|
281
|
+
|
282
|
+
# Turn off the chart legend.
|
283
|
+
chart1.set_legend(:none => 1)
|
284
|
+
|
285
|
+
# Insert the chart into the worksheet (with an offset).
|
286
|
+
worksheet.insert_chart('D2', chart1, { :x_offset => 25, :y_offset => 10 })
|
287
|
+
|
288
|
+
|
289
|
+
#######################################################################
|
290
|
+
#
|
291
|
+
# Example with value and category data labels.
|
292
|
+
#
|
293
|
+
|
294
|
+
# Create a Column chart.
|
295
|
+
chart2 = workbook.add_chart(:type => 'column', :embedded => 1)
|
296
|
+
|
297
|
+
# Configure the data series and add the data labels.
|
298
|
+
chart2.add_series(
|
299
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
300
|
+
:values => '=Sheet1!$B$2:$B$7',
|
301
|
+
:data_labels => { :value => 1, :category => 1 }
|
302
|
+
)
|
303
|
+
|
304
|
+
# Add a chart title.
|
305
|
+
chart2.set_title(:name => 'Category and Value data labels')
|
306
|
+
|
307
|
+
# Turn off the chart legend.
|
308
|
+
chart2.set_legend(:none => 1)
|
309
|
+
|
310
|
+
# Insert the chart into the worksheet (with an offset).
|
311
|
+
worksheet.insert_chart('D18', chart2, { :x_offset => 25, :y_offset => 10 })
|
312
|
+
|
313
|
+
|
314
|
+
#######################################################################
|
315
|
+
#
|
316
|
+
# Example with standard data labels with different font.
|
317
|
+
#
|
318
|
+
|
319
|
+
# Create a Column chart.
|
320
|
+
chart3 = workbook.add_chart(:type => 'column', :embedded => 1)
|
321
|
+
|
322
|
+
# Configure the data series and add the data labels.
|
323
|
+
chart3.add_series(
|
324
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
325
|
+
:values => '=Sheet1!$B$2:$B$7',
|
326
|
+
:data_labels => { :value => 1,
|
327
|
+
:font => {:bold => 1,
|
328
|
+
:color => 'red',
|
329
|
+
:rotation => -30}
|
330
|
+
}
|
331
|
+
)
|
332
|
+
|
333
|
+
# Add a chart title.
|
334
|
+
chart3.set_title(:name => 'Data labels with user defined font')
|
335
|
+
|
336
|
+
# Turn off the chart legend.
|
337
|
+
chart3.set_legend(:none => 1)
|
338
|
+
|
339
|
+
# Insert the chart into the worksheet (with an offset).
|
340
|
+
worksheet.insert_chart('D34', chart3, { :x_offset => 25, :y_offset => 10 })
|
341
|
+
|
342
|
+
|
343
|
+
#######################################################################
|
344
|
+
#
|
345
|
+
# Example with custom string data labels.
|
346
|
+
#
|
347
|
+
|
348
|
+
# Create a Column chart.
|
349
|
+
chart4 = workbook.add_chart(:type => 'column', :embedded => 1)
|
350
|
+
|
351
|
+
# Configure the data series and add the data labels.
|
352
|
+
chart4.add_series(
|
353
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
354
|
+
:values => '=Sheet1!$B$2:$B$7',
|
355
|
+
:data_labels => {
|
356
|
+
:value => 1,
|
357
|
+
:border => {:color => 'red'},
|
358
|
+
:fill => {:color => 'yellow'}
|
359
|
+
}
|
360
|
+
)
|
361
|
+
|
362
|
+
# Add a chart title.
|
363
|
+
chart4.set_title(:name => 'Data labels with formatting')
|
364
|
+
|
365
|
+
# Turn off the chart legend.
|
366
|
+
chart4.set_legend(:none => 1)
|
367
|
+
|
368
|
+
# Insert the chart into the worksheet (with an offset).
|
369
|
+
worksheet.insert_chart('D50', chart4, { :x_offset => 25, :y_offset => 10 })
|
370
|
+
|
371
|
+
|
372
|
+
#######################################################################
|
373
|
+
#
|
374
|
+
# Example with custom string data labels.
|
375
|
+
#
|
376
|
+
|
377
|
+
# Create a Column chart.
|
378
|
+
chart5 = workbook.add_chart( :type => 'column', :embedded => 1 )
|
379
|
+
|
380
|
+
# Some custom labels.
|
381
|
+
custom_labels = [
|
382
|
+
{ :value => 'Amy' },
|
383
|
+
{ :value => 'Bea' },
|
384
|
+
{ :value => 'Eva' },
|
385
|
+
{ :value => 'Fay' },
|
386
|
+
{ :value => 'Liv' },
|
387
|
+
{ :value => 'Una' }
|
388
|
+
]
|
389
|
+
|
390
|
+
# Configure the data series and add the data labels.
|
391
|
+
chart5.add_series(
|
392
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
393
|
+
:values => '=Sheet1!$B$2:$B$7',
|
394
|
+
:data_labels => { :value => 1, :custom => custom_labels }
|
395
|
+
)
|
396
|
+
|
397
|
+
# Add a chart title.
|
398
|
+
chart5.set_title(:name => 'Chart with custom string data labels')
|
399
|
+
|
400
|
+
# Turn off the chart legend.
|
401
|
+
chart5.set_legend(:none => 1)
|
402
|
+
|
403
|
+
# Insert the chart into the worksheet (with an offset).
|
404
|
+
worksheet.insert_chart('D66', chart5, { :x_offset => 25, :y_offset => 10 })
|
405
|
+
|
406
|
+
|
407
|
+
#######################################################################
|
408
|
+
#
|
409
|
+
# Example with custom data labels from cells.
|
410
|
+
#
|
411
|
+
|
412
|
+
# Create a Column chart.
|
413
|
+
chart6 = workbook.add_chart(:type => 'column', :embedded => 1)
|
414
|
+
|
415
|
+
# Some custom labels.
|
416
|
+
custom_labels = [
|
417
|
+
{ :value => '=Sheet1!$C$2' },
|
418
|
+
{ :value => '=Sheet1!$C$3' },
|
419
|
+
{ :value => '=Sheet1!$C$4' },
|
420
|
+
{ :value => '=Sheet1!$C$5' },
|
421
|
+
{ :value => '=Sheet1!$C$6' },
|
422
|
+
{ :value => '=Sheet1!$C$7' }
|
423
|
+
]
|
424
|
+
|
425
|
+
|
426
|
+
# Configure the data series and add the data labels.
|
427
|
+
chart6.add_series(
|
428
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
429
|
+
:values => '=Sheet1!$B$2:$B$7',
|
430
|
+
:data_labels => { :value => 1, :custom => custom_labels }
|
431
|
+
)
|
432
|
+
|
433
|
+
# Add a chart title.
|
434
|
+
chart6.set_title(:name => 'Chart with custom data labels from cells')
|
435
|
+
|
436
|
+
# Turn off the chart legend.
|
437
|
+
chart6.set_legend(:none => 1)
|
438
|
+
|
439
|
+
# Insert the chart into the worksheet (with an offset).
|
440
|
+
worksheet.insert_chart('D82', chart6, { :x_offset => 25, :y_offset => 10 })
|
441
|
+
|
442
|
+
|
443
|
+
#######################################################################
|
444
|
+
#
|
445
|
+
# Example with custom and default data labels.
|
446
|
+
#
|
447
|
+
|
448
|
+
# Create a Column chart.
|
449
|
+
chart7 = workbook.add_chart(:type => 'column', :embedded => 1)
|
450
|
+
|
451
|
+
# Some custom labels. The nil items will get the default value.
|
452
|
+
# We also set a font for the custom items as an extra example.
|
453
|
+
custom_labels = [
|
454
|
+
{ :value => '=Sheet1!$C$2', :font => { :color => 'red' } },
|
455
|
+
nil,
|
456
|
+
{ :value => '=Sheet1!$C$4', :font => { :color => 'red' } },
|
457
|
+
{ :value => '=Sheet1!$C$5', :font => { :color => 'red' } }
|
458
|
+
]
|
459
|
+
|
460
|
+
|
461
|
+
# Configure the data series and add the data labels.
|
462
|
+
chart7.add_series(
|
463
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
464
|
+
:values => '=Sheet1!$B$2:$B$7',
|
465
|
+
:data_labels => { :value => 1, :custom => custom_labels }
|
466
|
+
)
|
467
|
+
|
468
|
+
# Add a chart title.
|
469
|
+
chart7.set_title(:name => 'Mixed custom and default data labels')
|
470
|
+
|
471
|
+
# Turn off the chart legend.
|
472
|
+
chart7.set_legend(:none => 1)
|
473
|
+
|
474
|
+
# Insert the chart into the worksheet (with an offset).
|
475
|
+
worksheet.insert_chart('D98', chart7, { :x_offset => 25, :y_offset => 10 })
|
476
|
+
|
477
|
+
|
478
|
+
#######################################################################
|
479
|
+
#
|
480
|
+
# Example with deleted custom data labels.
|
481
|
+
#
|
482
|
+
|
483
|
+
# Create a Column chart.
|
484
|
+
chart8 = workbook.add_chart(:type => 'column', :embedded => 1)
|
485
|
+
|
486
|
+
# Some deleted custom labels and defaults (nil). This allows us to
|
487
|
+
# highlight certain values such as the minimum and maximum.
|
488
|
+
custom_labels = [
|
489
|
+
{ :delete => 1 },
|
490
|
+
nil,
|
491
|
+
{ :delete => 1 },
|
492
|
+
{ :delete => 1 },
|
493
|
+
nil,
|
494
|
+
{ :delete => 1 }
|
495
|
+
]
|
496
|
+
|
497
|
+
# Configure the data series and add the data labels.
|
498
|
+
chart8.add_series(
|
499
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
500
|
+
:values => '=Sheet1!$B$2:$B$7',
|
501
|
+
:data_labels => { :value => 1, :custom => custom_labels }
|
502
|
+
)
|
503
|
+
|
504
|
+
# Add a chart title.
|
505
|
+
chart8.set_title(:name => 'Chart with deleted data labels')
|
506
|
+
|
507
|
+
# Turn off the chart legend.
|
508
|
+
chart8.set_legend(:none => 1)
|
509
|
+
|
510
|
+
# Insert the chart into the worksheet (with an offset).
|
511
|
+
worksheet.insert_chart('D114', chart8, { :x_offset => 25, :y_offset => 10 })
|
512
|
+
|
513
|
+
#######################################################################
|
514
|
+
#
|
515
|
+
# Example with custom string data labels and formatting.
|
516
|
+
#
|
517
|
+
|
518
|
+
# Create a Column chart.
|
519
|
+
chart9 = workbook.add_chart( :type => 'column', :embedded => 1 )
|
520
|
+
|
521
|
+
# Some custom labels.
|
522
|
+
custom_labels = [
|
523
|
+
{ :value => 'Amy', :border => {:color => 'blue'} },
|
524
|
+
{ :value => 'Bea' },
|
525
|
+
{ :value => 'Eva' },
|
526
|
+
{ :value => 'Fay' },
|
527
|
+
{ :value => 'Liv' },
|
528
|
+
{ :value => 'Una', :fill => {:color => 'green'} }
|
529
|
+
]
|
530
|
+
|
531
|
+
|
532
|
+
# Configure the data series and add the data labels.
|
533
|
+
chart9.add_series(
|
534
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
535
|
+
:values => '=Sheet1!$B$2:$B$7',
|
536
|
+
:data_labels => {
|
537
|
+
:value => 1,
|
538
|
+
:custom => custom_labels,
|
539
|
+
:border => {:color => 'red'},
|
540
|
+
:fill => {:color => 'yellow'}
|
541
|
+
}
|
542
|
+
)
|
543
|
+
|
544
|
+
# Add a chart title.
|
545
|
+
chart9.set_title( :name => 'Chart with custom labels and formatting' )
|
546
|
+
|
547
|
+
# Turn off the chart legend.
|
548
|
+
chart9.set_legend( :none => 1 )
|
549
|
+
|
550
|
+
# Insert the chart into the worksheet (with an offset).
|
551
|
+
worksheet.insert_chart( 'D130', chart9, { :x_offset => 25, :y_offset => 10 } )
|
552
|
+
|
553
|
+
workbook.close
|
554
|
+
store_to_tempfile
|
555
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @tempfile.path)
|
556
|
+
end
|
557
|
+
|
558
|
+
def test_chart_gauge
|
559
|
+
@xlsx = 'chart_gauge.xlsx'
|
560
|
+
workbook = WriteXLSX.new(@io)
|
561
|
+
worksheet = workbook.add_worksheet
|
562
|
+
|
563
|
+
chart_doughnut = workbook.add_chart(:type => 'doughnut', :embedded => 1)
|
564
|
+
chart_pie = workbook.add_chart(:type => 'pie', :embedded => 1)
|
565
|
+
|
566
|
+
# Add some data for the Doughnut and Pie charts. This is set up so the
|
567
|
+
# gauge goes from 0-100. It is initially set at 75%.
|
568
|
+
worksheet.write_col('H2', ['Donut', 25, 50, 25, 100])
|
569
|
+
worksheet.write_col('I2', ['Pie', 75, 1, '=200-I4-I3'])
|
570
|
+
|
571
|
+
# Configure the doughnut chart as the background for the gauge.
|
572
|
+
chart_doughnut.add_series(
|
573
|
+
:name => '=Sheet1!$H$2',
|
574
|
+
:values => '=Sheet1!$H$3:$H$6',
|
575
|
+
:points => [
|
576
|
+
{ :fill => { :color => 'green' } },
|
577
|
+
{ :fill => { :color => 'yellow' } },
|
578
|
+
{ :fill => { :color => 'red' } },
|
579
|
+
{ :fill => { :none => 1 } }
|
580
|
+
]
|
581
|
+
)
|
582
|
+
|
583
|
+
# Rotate chart so the gauge parts are above the horizontal.
|
584
|
+
chart_doughnut.set_rotation(270)
|
585
|
+
|
586
|
+
# Turn off the chart legend.
|
587
|
+
chart_doughnut.set_legend(:none => 1)
|
588
|
+
|
589
|
+
# Turn off the chart fill and border.
|
590
|
+
chart_doughnut.set_chartarea(
|
591
|
+
:border => { :none => 1 },
|
592
|
+
:fill => { :none => 1 }
|
593
|
+
)
|
594
|
+
|
595
|
+
# Configure the pie chart as the needle for the gauge.
|
596
|
+
chart_pie.add_series(
|
597
|
+
:name => '=Sheet1!$I$2',
|
598
|
+
:values => '=Sheet1!$I$3:$I$6',
|
599
|
+
:points => [
|
600
|
+
{ :fill => { :none => 1 } },
|
601
|
+
{ :fill => { :color => 'black' } },
|
602
|
+
{ :fill => { :none => 1 } }
|
603
|
+
]
|
604
|
+
)
|
605
|
+
|
606
|
+
# Rotate the pie chart/needle to align with the doughnut/gauge.
|
607
|
+
chart_pie.set_rotation(270)
|
608
|
+
|
609
|
+
# Combine the pie and doughnut charts.
|
610
|
+
chart_doughnut.combine(chart_pie)
|
611
|
+
|
612
|
+
# Insert the chart into the worksheet.
|
613
|
+
worksheet.insert_chart('A1', chart_doughnut)
|
614
|
+
|
615
|
+
workbook.close
|
616
|
+
store_to_tempfile
|
617
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @tempfile.path)
|
618
|
+
end
|
619
|
+
|
245
620
|
def test_chart_scatter06
|
246
621
|
@xlsx = 'chart_scatter06.xlsx'
|
247
622
|
workbook = WriteXLSX.new(@io)
|
@@ -252,23 +627,23 @@ def test_chart_scatter06
|
|
252
627
|
chart.instance_variable_set(:@axis_ids, [57708544, 44297600])
|
253
628
|
|
254
629
|
data = [
|
255
|
-
|
256
|
-
|
257
|
-
|
630
|
+
[ 1, 2, 3, 4, 5 ],
|
631
|
+
[ 2, 4, 6, 8, 10 ],
|
632
|
+
[ 3, 6, 9, 12, 15 ]
|
258
633
|
|
259
|
-
|
634
|
+
]
|
260
635
|
|
261
636
|
worksheet.write('A1', data)
|
262
637
|
|
263
638
|
chart.add_series(
|
264
|
-
|
265
|
-
|
266
|
-
|
639
|
+
:categories => '=Sheet1!$A$1:$A$5',
|
640
|
+
:values => '=Sheet1!$B$1:$B$5'
|
641
|
+
)
|
267
642
|
|
268
643
|
chart.add_series(
|
269
|
-
|
270
|
-
|
271
|
-
|
644
|
+
:categories => '=Sheet1!$A$1:$A$5',
|
645
|
+
:values => '=Sheet1!$C$1:$C$5'
|
646
|
+
)
|
272
647
|
|
273
648
|
chart.set_x_axis(:minor_unit => 1, :major_unit => 3)
|
274
649
|
chart.set_y_axis(:minor_unit => 2, :major_unit => 4)
|
@@ -281,7 +656,7 @@ def test_chart_scatter06
|
|
281
656
|
end
|
282
657
|
|
283
658
|
def autofilter_data
|
284
|
-
<<EOS
|
659
|
+
<<EOS
|
285
660
|
Region Item Volume Month
|
286
661
|
East Apple 9000 July
|
287
662
|
East Apple 5000 July
|
@@ -345,10 +720,10 @@ def test_chart_area
|
|
345
720
|
# Add the worksheet data that the charts will refer to.
|
346
721
|
headings = [ 'Number', 'Batch 1', 'Batch 2' ]
|
347
722
|
data = [
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
723
|
+
[ 2, 3, 4, 5, 6, 7 ],
|
724
|
+
[ 40, 40, 50, 30, 25, 50 ],
|
725
|
+
[ 30, 25, 30, 10, 5, 10 ]
|
726
|
+
]
|
352
727
|
|
353
728
|
worksheet.write('A1', headings, bold)
|
354
729
|
worksheet.write('A2', data)
|
@@ -358,18 +733,18 @@ def test_chart_area
|
|
358
733
|
|
359
734
|
# Configure the first series.
|
360
735
|
chart.add_series(
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
736
|
+
:name => '=Sheet1!$B$1',
|
737
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
738
|
+
:values => '=Sheet1!$B$2:$B$7'
|
739
|
+
)
|
365
740
|
|
366
741
|
# Configure second series. Note alternative use of array ref to define
|
367
742
|
# ranges: [ sheetname, row_start, row_end, col_start, col_end ].
|
368
743
|
chart.add_series(
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
744
|
+
:name => '=Sheet1!$C$1',
|
745
|
+
:categories => [ 'Sheet1', 1, 6, 0, 0 ],
|
746
|
+
:values => [ 'Sheet1', 1, 6, 2, 2 ]
|
747
|
+
)
|
373
748
|
|
374
749
|
# Add a chart title and some axis labels.
|
375
750
|
chart.set_title(:name => 'Results of sample analysis')
|
@@ -396,9 +771,9 @@ def test_chart_bar
|
|
396
771
|
# Add the worksheet data that the charts will refer to.
|
397
772
|
headings = [ 'Number', 'Batch 1', 'Batch 2' ]
|
398
773
|
data = [
|
399
|
-
|
400
|
-
|
401
|
-
|
774
|
+
[ 2, 3, 4, 5, 6, 7 ],
|
775
|
+
[ 10, 40, 50, 20, 10, 50 ],
|
776
|
+
[ 30, 60, 70, 50, 40, 30 ]
|
402
777
|
]
|
403
778
|
|
404
779
|
worksheet.write('A1', headings, bold)
|
@@ -409,17 +784,17 @@ def test_chart_bar
|
|
409
784
|
|
410
785
|
# Configure the first series.
|
411
786
|
chart.add_series(
|
412
|
-
|
413
|
-
|
414
|
-
|
787
|
+
:name => '=Sheet1!$B$1',
|
788
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
789
|
+
:values => '=Sheet1!$B$2:$B$7'
|
415
790
|
)
|
416
791
|
|
417
792
|
# Configure second series. Note alternative use of array ref to define
|
418
793
|
# ranges: [ sheetname, row_start, row_end, col_start, col_end ].
|
419
794
|
chart.add_series(
|
420
|
-
|
421
|
-
|
422
|
-
|
795
|
+
:name => '=Sheet1!$C$1',
|
796
|
+
:categories => [ 'Sheet1', 1, 6, 0, 0 ],
|
797
|
+
:values => [ 'Sheet1', 1, 6, 2, 2 ]
|
423
798
|
)
|
424
799
|
|
425
800
|
# Add a chart title and some axis labels.
|
@@ -447,9 +822,9 @@ def test_chart_column
|
|
447
822
|
# Add the worksheet data that the charts will refer to.
|
448
823
|
headings = [ 'Number', 'Batch 1', 'Batch 2' ]
|
449
824
|
data = [
|
450
|
-
|
451
|
-
|
452
|
-
|
825
|
+
[ 2, 3, 4, 5, 6, 7 ],
|
826
|
+
[ 10, 40, 50, 20, 10, 50 ],
|
827
|
+
[ 30, 60, 70, 50, 40, 30 ]
|
453
828
|
]
|
454
829
|
|
455
830
|
worksheet.write('A1', headings, bold)
|
@@ -460,17 +835,17 @@ def test_chart_column
|
|
460
835
|
|
461
836
|
# Configure the first series.
|
462
837
|
chart.add_series(
|
463
|
-
|
464
|
-
|
465
|
-
|
838
|
+
:name => '=Sheet1!$B$1',
|
839
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
840
|
+
:values => '=Sheet1!$B$2:$B$7'
|
466
841
|
)
|
467
842
|
|
468
843
|
# Configure second series. Note alternative use of array ref to define
|
469
844
|
# ranges: [ sheetname, row_start, row_end, col_start, col_end ].
|
470
845
|
chart.add_series(
|
471
|
-
|
472
|
-
|
473
|
-
|
846
|
+
:name => '=Sheet1!$C$1',
|
847
|
+
:categories => [ 'Sheet1', 1, 6, 0, 0 ],
|
848
|
+
:values => [ 'Sheet1', 1, 6, 2, 2 ]
|
474
849
|
)
|
475
850
|
|
476
851
|
# Add a chart title and some axis labels.
|
@@ -498,9 +873,9 @@ def test_chart_doughnut
|
|
498
873
|
# Add the worksheet data that the charts will refer to.
|
499
874
|
headings = [ 'Category', 'Values' ]
|
500
875
|
data = [
|
501
|
-
|
502
|
-
|
503
|
-
|
876
|
+
[ 'Glazed', 'Chocolate', 'Cream' ],
|
877
|
+
[ 50, 35, 15 ]
|
878
|
+
]
|
504
879
|
|
505
880
|
worksheet.write('A1', headings, bold)
|
506
881
|
worksheet.write('A2', data)
|
@@ -512,10 +887,10 @@ def test_chart_doughnut
|
|
512
887
|
# [ $sheetname, $row_start, $row_end, $col_start, $col_end ].
|
513
888
|
# See below for an alternative syntax.
|
514
889
|
chart1.add_series(
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
890
|
+
:name => 'Doughnut sales data',
|
891
|
+
:categories => [ 'Sheet1', 1, 3, 0, 0 ],
|
892
|
+
:values => [ 'Sheet1', 1, 3, 1, 1 ]
|
893
|
+
)
|
519
894
|
|
520
895
|
# Add a title.
|
521
896
|
chart1.set_title(:name => 'Popular Doughnut Types')
|
@@ -536,15 +911,15 @@ def test_chart_doughnut
|
|
536
911
|
|
537
912
|
# Configure the series and add user defined segment colours.
|
538
913
|
chart2.add_series(
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
914
|
+
:name => 'Doughnut sales data',
|
915
|
+
:categories => '=Sheet1!$A$2:$A$4',
|
916
|
+
:values => '=Sheet1!$B$2:$B$4',
|
917
|
+
:points => [
|
918
|
+
{ :fill => { :color => '#FA58D0' } },
|
919
|
+
{ :fill => { :color => '#61210B' } },
|
920
|
+
{ :fill => { :color => '#F5F6CE' } }
|
921
|
+
]
|
922
|
+
)
|
548
923
|
|
549
924
|
# Add a title.
|
550
925
|
chart2.set_title(:name => 'Doughnut Chart with user defined colors')
|
@@ -563,10 +938,10 @@ def test_chart_doughnut
|
|
563
938
|
|
564
939
|
# Configure the series.
|
565
940
|
chart3.add_series(
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
941
|
+
:name => 'Doughnut sales data',
|
942
|
+
:categories => '=Sheet1!$A$2:$A$4',
|
943
|
+
:values => '=Sheet1!$B$2:$B$4'
|
944
|
+
)
|
570
945
|
|
571
946
|
# Add a title.
|
572
947
|
chart3.set_title(:name => 'Doughnut Chart with segment rotation')
|
@@ -587,10 +962,10 @@ def test_chart_doughnut
|
|
587
962
|
|
588
963
|
# Configure the series.
|
589
964
|
chart4.add_series(
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
965
|
+
:name => 'Doughnut sales data',
|
966
|
+
:categories => '=Sheet1!$A$2:$A$4',
|
967
|
+
:values => '=Sheet1!$B$2:$B$4'
|
968
|
+
)
|
594
969
|
|
595
970
|
# Add a title.
|
596
971
|
chart4.set_title(:name => 'Doughnut Chart with user defined hole size')
|
@@ -615,9 +990,9 @@ def test_chart_line
|
|
615
990
|
# Add the worksheet data that the charts will refer to.
|
616
991
|
headings = [ 'Number', 'Batch 1', 'Batch 2' ]
|
617
992
|
data = [
|
618
|
-
|
619
|
-
|
620
|
-
|
993
|
+
[ 2, 3, 4, 5, 6, 7 ],
|
994
|
+
[ 10, 40, 50, 20, 10, 50 ],
|
995
|
+
[ 30, 60, 70, 50, 40, 30 ]
|
621
996
|
]
|
622
997
|
|
623
998
|
worksheet.write('A1', headings, bold)
|
@@ -628,17 +1003,17 @@ def test_chart_line
|
|
628
1003
|
|
629
1004
|
# Configure the first series.
|
630
1005
|
chart.add_series(
|
631
|
-
|
632
|
-
|
633
|
-
|
1006
|
+
:name => '=Sheet1!$B$1',
|
1007
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
1008
|
+
:values => '=Sheet1!$B$2:$B$7'
|
634
1009
|
)
|
635
1010
|
|
636
1011
|
# Configure second series. Note alternative use of array ref to define
|
637
1012
|
# ranges: [ sheetname, row_start, row_end, col_start, col_end ].
|
638
1013
|
chart.add_series(
|
639
|
-
|
640
|
-
|
641
|
-
|
1014
|
+
:name => '=Sheet1!$C$1',
|
1015
|
+
:categories => [ 'Sheet1', 1, 6, 0, 0 ],
|
1016
|
+
:values => [ 'Sheet1', 1, 6, 2, 2 ]
|
642
1017
|
)
|
643
1018
|
|
644
1019
|
# Add a chart title and some axis labels.
|
@@ -652,6 +1027,81 @@ def test_chart_line
|
|
652
1027
|
# Insert the chart into the worksheet (with an offset).
|
653
1028
|
worksheet.insert_chart('D2', chart, 25, 10)
|
654
1029
|
|
1030
|
+
#
|
1031
|
+
# Create a stacked chart sub-type
|
1032
|
+
#
|
1033
|
+
chart2 = workbook.add_chart(
|
1034
|
+
:type => 'line',
|
1035
|
+
:embedded => 1,
|
1036
|
+
:subtype => 'stacked'
|
1037
|
+
)
|
1038
|
+
|
1039
|
+
# Configure the first series.
|
1040
|
+
chart2.add_series(
|
1041
|
+
:name => '=Sheet1!$B$1',
|
1042
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
1043
|
+
:values => '=Sheet1!$B$2:$B$7'
|
1044
|
+
)
|
1045
|
+
|
1046
|
+
# Configure second series.
|
1047
|
+
chart2.add_series(
|
1048
|
+
:name => '=Sheet1!$C$1',
|
1049
|
+
:categories => [ 'Sheet1', 1, 6, 0, 0 ],
|
1050
|
+
:values => [ 'Sheet1', 1, 6, 2, 2 ]
|
1051
|
+
)
|
1052
|
+
|
1053
|
+
# Add a chart title and some axis labels.
|
1054
|
+
chart2.set_title( :name => 'Stacked Chart' )
|
1055
|
+
chart2.set_x_axis( :name => 'Test number' )
|
1056
|
+
chart2.set_y_axis( :name => 'Sample length (mm)' )
|
1057
|
+
|
1058
|
+
# Set an Excel chart style. Blue colors with white outline and shadow.
|
1059
|
+
chart2.set_style( 12 )
|
1060
|
+
|
1061
|
+
# Insert the chart into the worksheet (with an offset).
|
1062
|
+
worksheet.insert_chart(
|
1063
|
+
'D18', chart2,
|
1064
|
+
{ :x_offset => 25, :y_offset => 10 }
|
1065
|
+
)
|
1066
|
+
|
1067
|
+
|
1068
|
+
#
|
1069
|
+
# Create a percent stacked chart sub-type
|
1070
|
+
#
|
1071
|
+
chart3 = workbook.add_chart(
|
1072
|
+
:type => 'line',
|
1073
|
+
:embedded => 1,
|
1074
|
+
:subtype => 'percent_stacked'
|
1075
|
+
)
|
1076
|
+
|
1077
|
+
# Configure the first series.
|
1078
|
+
chart3.add_series(
|
1079
|
+
:name => '=Sheet1!$B$1',
|
1080
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
1081
|
+
:values => '=Sheet1!$B$2:$B$7'
|
1082
|
+
)
|
1083
|
+
|
1084
|
+
# Configure second series.
|
1085
|
+
chart3.add_series(
|
1086
|
+
:name => '=Sheet1!$C$1',
|
1087
|
+
:categories => [ 'Sheet1', 1, 6, 0, 0 ],
|
1088
|
+
:values => [ 'Sheet1', 1, 6, 2, 2 ]
|
1089
|
+
)
|
1090
|
+
|
1091
|
+
# Add a chart title and some axis labels.
|
1092
|
+
chart3.set_title( :name => 'Percent Stacked Chart' )
|
1093
|
+
chart3.set_x_axis( :name => 'Test number' )
|
1094
|
+
chart3.set_y_axis( :name => 'Sample length (mm)' )
|
1095
|
+
|
1096
|
+
# Set an Excel chart style. Blue colors with white outline and shadow.
|
1097
|
+
chart3.set_style( 13 )
|
1098
|
+
|
1099
|
+
# Insert the chart into the worksheet (with an offset).
|
1100
|
+
worksheet.insert_chart(
|
1101
|
+
'D34', chart3,
|
1102
|
+
{ :x_offset => 25, :y_offset => 10 }
|
1103
|
+
)
|
1104
|
+
|
655
1105
|
workbook.close
|
656
1106
|
store_to_tempfile
|
657
1107
|
compare_xlsx(File.join(@perl_output, @xlsx), @tempfile.path)
|
@@ -666,9 +1116,9 @@ def test_chart_pie
|
|
666
1116
|
# Add the worksheet data that the charts will refer to.
|
667
1117
|
headings = [ 'Category', 'Values' ]
|
668
1118
|
data = [
|
669
|
-
|
670
|
-
|
671
|
-
|
1119
|
+
[ 'Apple', 'Cherry', 'Pecan' ],
|
1120
|
+
[ 60, 30, 10 ]
|
1121
|
+
]
|
672
1122
|
|
673
1123
|
worksheet.write('A1', headings, bold)
|
674
1124
|
worksheet.write('A2', data)
|
@@ -680,10 +1130,10 @@ def test_chart_pie
|
|
680
1130
|
# [ $sheetname, $row_start, $row_end, $col_start, $col_end ].
|
681
1131
|
# See below for an alternative syntax.
|
682
1132
|
chart1.add_series(
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
1133
|
+
:name => 'Pie sales data',
|
1134
|
+
:categories => [ 'Sheet1', 1, 3, 0, 0 ],
|
1135
|
+
:values => [ 'Sheet1', 1, 3, 1, 1 ]
|
1136
|
+
)
|
687
1137
|
|
688
1138
|
# Add a title.
|
689
1139
|
chart1.set_title(:name => 'Popular Pie Types')
|
@@ -703,15 +1153,15 @@ def test_chart_pie
|
|
703
1153
|
|
704
1154
|
# Configure the series and add user defined segment colours.
|
705
1155
|
chart2.add_series(
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
1156
|
+
:name => 'Pie sales data',
|
1157
|
+
:categories => '=Sheet1!$A$2:$A$4',
|
1158
|
+
:values => '=Sheet1!$B$2:$B$4',
|
1159
|
+
:points => [
|
1160
|
+
{ :fill => { :color => '#5ABA10' } },
|
1161
|
+
{ :fill => { :color => '#FE110E' } },
|
1162
|
+
{ :fill => { :color => '#CA5C05' } }
|
1163
|
+
]
|
1164
|
+
)
|
715
1165
|
|
716
1166
|
# Add a title.
|
717
1167
|
chart2.set_title(:name => 'Pie Chart with user defined colors')
|
@@ -733,10 +1183,10 @@ def test_chart_radar
|
|
733
1183
|
# Add the worksheet data that the charts will refer to.
|
734
1184
|
headings = [ 'Number', 'Batch 1', 'Batch 2' ]
|
735
1185
|
data = [
|
736
|
-
|
737
|
-
|
738
|
-
|
739
|
-
|
1186
|
+
[ 2, 3, 4, 5, 6, 7 ],
|
1187
|
+
[ 30, 60, 70, 50, 40, 30 ],
|
1188
|
+
[ 25, 40, 50, 30, 50, 40 ]
|
1189
|
+
]
|
740
1190
|
|
741
1191
|
worksheet.write('A1', headings, bold)
|
742
1192
|
worksheet.write('A2', data)
|
@@ -746,18 +1196,18 @@ def test_chart_radar
|
|
746
1196
|
|
747
1197
|
# Configure the first series.
|
748
1198
|
chart1.add_series(
|
749
|
-
|
750
|
-
|
751
|
-
|
752
|
-
|
1199
|
+
:name => '=Sheet1!$B$1',
|
1200
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
1201
|
+
:values => '=Sheet1!$B$2:$B$7'
|
1202
|
+
)
|
753
1203
|
|
754
1204
|
# Configure second series. Note alternative use of array ref to define
|
755
1205
|
# ranges: [ sheetname, row_start, row_end, col_start, col_end ].
|
756
1206
|
chart1.add_series(
|
757
|
-
|
758
|
-
|
759
|
-
|
760
|
-
|
1207
|
+
:name => '=Sheet1!$C$1',
|
1208
|
+
:categories => [ 'Sheet1', 1, 6, 0, 0 ],
|
1209
|
+
:values => [ 'Sheet1', 1, 6, 2, 2 ]
|
1210
|
+
)
|
761
1211
|
|
762
1212
|
# Add a chart title and some axis labels.
|
763
1213
|
chart1.set_title(:name => 'Results of sample analysis')
|
@@ -774,24 +1224,24 @@ def test_chart_radar
|
|
774
1224
|
# Create a with_markers chart sub-type
|
775
1225
|
#
|
776
1226
|
chart2 = workbook.add_chart(
|
777
|
-
|
778
|
-
|
779
|
-
|
780
|
-
|
1227
|
+
:type => 'radar',
|
1228
|
+
:embedded => 1,
|
1229
|
+
:subtype => 'with_markers'
|
1230
|
+
)
|
781
1231
|
|
782
1232
|
# Configure the first series.
|
783
1233
|
chart2.add_series(
|
784
|
-
|
785
|
-
|
786
|
-
|
787
|
-
|
1234
|
+
:name => '=Sheet1!$B$1',
|
1235
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
1236
|
+
:values => '=Sheet1!$B$2:$B$7'
|
1237
|
+
)
|
788
1238
|
|
789
1239
|
# Configure second series.
|
790
1240
|
chart2.add_series(
|
791
|
-
|
792
|
-
|
793
|
-
|
794
|
-
|
1241
|
+
:name => '=Sheet1!$C$1',
|
1242
|
+
:categories => [ 'Sheet1', 1, 6, 0, 0 ],
|
1243
|
+
:values => [ 'Sheet1', 1, 6, 2, 2 ]
|
1244
|
+
)
|
795
1245
|
|
796
1246
|
# Add a chart title and some axis labels.
|
797
1247
|
chart2.set_title(:name => 'Stacked Chart')
|
@@ -808,24 +1258,24 @@ def test_chart_radar
|
|
808
1258
|
# Create a filled chart sub-type
|
809
1259
|
#
|
810
1260
|
chart3 = workbook.add_chart(
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
|
1261
|
+
:type => 'radar',
|
1262
|
+
:embedded => 1,
|
1263
|
+
:subtype => 'filled'
|
1264
|
+
)
|
815
1265
|
|
816
1266
|
# Configure the first series.
|
817
1267
|
chart3.add_series(
|
818
|
-
|
819
|
-
|
820
|
-
|
821
|
-
|
1268
|
+
:name => '=Sheet1!$B$1',
|
1269
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
1270
|
+
:values => '=Sheet1!$B$2:$B$7'
|
1271
|
+
)
|
822
1272
|
|
823
1273
|
# Configure second series.
|
824
1274
|
chart3.add_series(
|
825
|
-
|
826
|
-
|
827
|
-
|
828
|
-
|
1275
|
+
:name => '=Sheet1!$C$1',
|
1276
|
+
:categories => [ 'Sheet1', 1, 6, 0, 0 ],
|
1277
|
+
:values => [ 'Sheet1', 1, 6, 2, 2 ]
|
1278
|
+
)
|
829
1279
|
|
830
1280
|
# Add a chart title and some axis labels.
|
831
1281
|
chart3.set_title(:name => 'Percent Stacked Chart')
|
@@ -852,9 +1302,9 @@ def test_chart_scatter
|
|
852
1302
|
# Add the worksheet data that the charts will refer to.
|
853
1303
|
headings = [ 'Number', 'Batch 1', 'Batch 2' ]
|
854
1304
|
data = [
|
855
|
-
|
856
|
-
|
857
|
-
|
1305
|
+
[ 2, 3, 4, 5, 6, 7 ],
|
1306
|
+
[ 10, 40, 50, 20, 10, 50 ],
|
1307
|
+
[ 30, 60, 70, 50, 40, 30 ]
|
858
1308
|
]
|
859
1309
|
|
860
1310
|
worksheet.write('A1', headings, bold)
|
@@ -865,17 +1315,17 @@ def test_chart_scatter
|
|
865
1315
|
|
866
1316
|
# Configure the first series.
|
867
1317
|
chart.add_series(
|
868
|
-
|
869
|
-
|
870
|
-
|
1318
|
+
:name => '=Sheet1!$B$1',
|
1319
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
1320
|
+
:values => '=Sheet1!$B$2:$B$7'
|
871
1321
|
)
|
872
1322
|
|
873
1323
|
# Configure second series. Note alternative use of array ref to define
|
874
1324
|
# ranges: [ $sheetname, $row_start, $row_end, $col_start, $col_end ].$chart->add_series(
|
875
1325
|
chart.add_series(
|
876
|
-
|
877
|
-
|
878
|
-
|
1326
|
+
:name => '=Sheet1!$C$1',
|
1327
|
+
:categories => [ 'Sheet1', 1, 6, 0, 0 ],
|
1328
|
+
:values => [ 'Sheet1', 1, 6, 2, 2 ]
|
879
1329
|
)
|
880
1330
|
|
881
1331
|
# Add a chart title and some axis labels.
|
@@ -906,19 +1356,19 @@ def test_chart_stock
|
|
906
1356
|
# Add the worksheet data that the charts will refer to.
|
907
1357
|
headings = [ 'Date', 'High', 'Low', 'Close' ]
|
908
1358
|
data = [
|
909
|
-
|
910
|
-
|
911
|
-
|
912
|
-
|
1359
|
+
[ '2007-01-01T', '2007-01-02T', '2007-01-03T', '2007-01-04T', '2007-01-05T' ],
|
1360
|
+
[ 27.2, 25.03, 19.05, 20.34, 18.5 ],
|
1361
|
+
[ 23.49, 19.55, 15.12, 17.84, 16.34 ],
|
1362
|
+
[ 25.45, 23.05, 17.32, 20.45, 17.34 ]
|
913
1363
|
]
|
914
1364
|
|
915
1365
|
worksheet.write('A1', headings, bold)
|
916
1366
|
|
917
1367
|
(0 .. 4).each do |row|
|
918
|
-
|
919
|
-
|
920
|
-
|
921
|
-
|
1368
|
+
worksheet.write_date_time(row + 1, 0, data[0][row], date_format)
|
1369
|
+
worksheet.write(row + 1, 1, data[1][row])
|
1370
|
+
worksheet.write(row + 1, 2, data[2][row])
|
1371
|
+
worksheet.write(row + 1, 3, data[3][row])
|
922
1372
|
end
|
923
1373
|
|
924
1374
|
worksheet.set_column('A:D', 11)
|
@@ -960,9 +1410,9 @@ def test_chart_secondary_axis
|
|
960
1410
|
# Add the worksheet data that the charts will refer to.
|
961
1411
|
headings = [ 'Aliens', 'Humans']
|
962
1412
|
data = [
|
963
|
-
|
964
|
-
|
965
|
-
|
1413
|
+
[ 2, 3, 4, 5, 6, 7 ],
|
1414
|
+
[ 10, 40, 50, 20, 10, 50 ]
|
1415
|
+
]
|
966
1416
|
|
967
1417
|
worksheet.write('A1', headings, bold)
|
968
1418
|
worksheet.write('A2', data)
|
@@ -972,15 +1422,15 @@ def test_chart_secondary_axis
|
|
972
1422
|
|
973
1423
|
# Configure the first series.
|
974
1424
|
chart.add_series(
|
975
|
-
|
976
|
-
|
977
|
-
|
978
|
-
|
1425
|
+
:name => '=Sheet1!$A$1',
|
1426
|
+
:values => '=Sheet1!$A$2:$A$7',
|
1427
|
+
:y2_axis => 1
|
1428
|
+
)
|
979
1429
|
|
980
1430
|
chart.add_series(
|
981
|
-
|
982
|
-
|
983
|
-
|
1431
|
+
:name => '=Sheet1!$B$1',
|
1432
|
+
:values => '=Sheet1!$B$2:$B$7'
|
1433
|
+
)
|
984
1434
|
|
985
1435
|
chart.set_legend(:position => 'right')
|
986
1436
|
|
@@ -1258,7 +1708,7 @@ def test_comments2
|
|
1258
1708
|
comment = 'Hello.'
|
1259
1709
|
|
1260
1710
|
worksheet6.write( 'C9', cell_text, text_wrap )
|
1261
|
-
worksheet6.write_comment( 'C9', comment, :color =>
|
1711
|
+
worksheet6.write_comment( 'C9', comment, :color => '#FF6600' )
|
1262
1712
|
|
1263
1713
|
|
1264
1714
|
###############################################################################
|
@@ -1275,7 +1725,7 @@ def test_comments2
|
|
1275
1725
|
cell = 'C3'
|
1276
1726
|
|
1277
1727
|
cell_text = "Move the mouse over this cell and you will see 'Cell commented " +
|
1278
|
-
|
1728
|
+
"by #{author}' (blank) in the status bar at the bottom"
|
1279
1729
|
|
1280
1730
|
comment = 'Hello.'
|
1281
1731
|
|
@@ -1286,7 +1736,7 @@ def test_comments2
|
|
1286
1736
|
author = 'Ruby'
|
1287
1737
|
cell = 'C6'
|
1288
1738
|
cell_text = "Move the mouse over this cell and you will see 'Cell commented " +
|
1289
|
-
|
1739
|
+
"by #{author}' in the status bar at the bottom"
|
1290
1740
|
|
1291
1741
|
comment = 'Hello.'
|
1292
1742
|
|
@@ -1297,7 +1747,7 @@ def test_comments2
|
|
1297
1747
|
author = '€'
|
1298
1748
|
cell = 'C9'
|
1299
1749
|
cell_text = "Move the mouse over this cell and you will see 'Cell commented " +
|
1300
|
-
|
1750
|
+
"by #{author}' in the status bar at the bottom"
|
1301
1751
|
comment = 'Hello.'
|
1302
1752
|
|
1303
1753
|
worksheet7.write( cell, cell_text, text_wrap )
|
@@ -1361,36 +1811,36 @@ def test_conditional_format
|
|
1361
1811
|
|
1362
1812
|
# Light red fill with dark red text.
|
1363
1813
|
format1 = workbook.add_format(
|
1364
|
-
|
1365
|
-
|
1366
|
-
|
1814
|
+
:bg_color => '#FFC7CE',
|
1815
|
+
:color => '#9C0006'
|
1816
|
+
)
|
1367
1817
|
|
1368
1818
|
# Green fill with dark green text.
|
1369
1819
|
format2 = workbook.add_format(
|
1370
|
-
|
1371
|
-
|
1372
|
-
|
1820
|
+
:bg_color => '#C6EFCE',
|
1821
|
+
:color => '#006100'
|
1822
|
+
)
|
1373
1823
|
|
1374
1824
|
# Some sample data to run the conditional formatting against.
|
1375
1825
|
data = [
|
1376
|
-
|
1377
|
-
|
1378
|
-
|
1379
|
-
|
1380
|
-
|
1381
|
-
|
1382
|
-
|
1383
|
-
|
1384
|
-
|
1385
|
-
|
1386
|
-
|
1826
|
+
[ 34, 72, 38, 30, 75, 48, 75, 66, 84, 86 ],
|
1827
|
+
[ 6, 24, 1, 84, 54, 62, 60, 3, 26, 59 ],
|
1828
|
+
[ 28, 79, 97, 13, 85, 93, 93, 22, 5, 14 ],
|
1829
|
+
[ 27, 71, 40, 17, 18, 79, 90, 93, 29, 47 ],
|
1830
|
+
[ 88, 25, 33, 23, 67, 1, 59, 79, 47, 36 ],
|
1831
|
+
[ 24, 100, 20, 88, 29, 33, 38, 54, 54, 88 ],
|
1832
|
+
[ 6, 57, 88, 28, 10, 26, 37, 7, 41, 48 ],
|
1833
|
+
[ 52, 78, 1, 96, 26, 45, 47, 33, 96, 36 ],
|
1834
|
+
[ 60, 54, 81, 66, 81, 90, 80, 93, 12, 55 ],
|
1835
|
+
[ 70, 5, 46, 14, 71, 19, 66, 36, 41, 21 ]
|
1836
|
+
]
|
1387
1837
|
|
1388
1838
|
###############################################################################
|
1389
1839
|
#
|
1390
1840
|
# Example 1.
|
1391
1841
|
#
|
1392
1842
|
caption = 'Cells with values >= 50 are in light red. ' +
|
1393
|
-
|
1843
|
+
'Values < 50 are in light green.'
|
1394
1844
|
|
1395
1845
|
# Write the data.
|
1396
1846
|
worksheet1.write('A1', caption)
|
@@ -1404,7 +1854,7 @@ def test_conditional_format
|
|
1404
1854
|
:value => 50,
|
1405
1855
|
:format => format1
|
1406
1856
|
}
|
1407
|
-
|
1857
|
+
)
|
1408
1858
|
|
1409
1859
|
# Write another conditional format over the same range.
|
1410
1860
|
worksheet1.conditional_formatting('B3:K12',
|
@@ -1414,7 +1864,7 @@ def test_conditional_format
|
|
1414
1864
|
:value => 50,
|
1415
1865
|
:format => format2
|
1416
1866
|
}
|
1417
|
-
|
1867
|
+
)
|
1418
1868
|
|
1419
1869
|
|
1420
1870
|
###############################################################################
|
@@ -1422,7 +1872,7 @@ def test_conditional_format
|
|
1422
1872
|
# Example 2.
|
1423
1873
|
#
|
1424
1874
|
caption = 'Values between 30 and 70 are in light red. ' +
|
1425
|
-
|
1875
|
+
'Values outside that range are in light green.'
|
1426
1876
|
|
1427
1877
|
worksheet2.write('A1', caption)
|
1428
1878
|
worksheet2.write_col('B3', data)
|
@@ -1435,7 +1885,7 @@ def test_conditional_format
|
|
1435
1885
|
:maximum => 70,
|
1436
1886
|
:format => format1
|
1437
1887
|
}
|
1438
|
-
|
1888
|
+
)
|
1439
1889
|
|
1440
1890
|
worksheet2.conditional_formatting('B3:K12',
|
1441
1891
|
{
|
@@ -1445,7 +1895,7 @@ def test_conditional_format
|
|
1445
1895
|
:maximum => 70,
|
1446
1896
|
:format => format2
|
1447
1897
|
}
|
1448
|
-
|
1898
|
+
)
|
1449
1899
|
|
1450
1900
|
|
1451
1901
|
###############################################################################
|
@@ -1453,7 +1903,7 @@ def test_conditional_format
|
|
1453
1903
|
# Example 3.
|
1454
1904
|
#
|
1455
1905
|
caption = 'Duplicate values are in light red. ' +
|
1456
|
-
|
1906
|
+
'Unique values are in light green.'
|
1457
1907
|
|
1458
1908
|
worksheet3.write('A1', caption)
|
1459
1909
|
worksheet3.write_col('B3', data)
|
@@ -1463,14 +1913,14 @@ def test_conditional_format
|
|
1463
1913
|
:type => 'duplicate',
|
1464
1914
|
:format => format1,
|
1465
1915
|
}
|
1466
|
-
|
1916
|
+
)
|
1467
1917
|
|
1468
1918
|
worksheet3.conditional_formatting('B3:K12',
|
1469
1919
|
{
|
1470
1920
|
:type => 'unique',
|
1471
1921
|
:format => format2,
|
1472
1922
|
}
|
1473
|
-
|
1923
|
+
)
|
1474
1924
|
|
1475
1925
|
|
1476
1926
|
###############################################################################
|
@@ -1478,7 +1928,7 @@ def test_conditional_format
|
|
1478
1928
|
# Example 4.
|
1479
1929
|
#
|
1480
1930
|
caption = 'Above average values are in light red. ' +
|
1481
|
-
|
1931
|
+
'Below average values are in light green.'
|
1482
1932
|
|
1483
1933
|
worksheet4.write('A1', caption)
|
1484
1934
|
worksheet4.write_col('B3', data)
|
@@ -1489,7 +1939,7 @@ def test_conditional_format
|
|
1489
1939
|
:criteria => 'above',
|
1490
1940
|
:format => format1
|
1491
1941
|
}
|
1492
|
-
|
1942
|
+
)
|
1493
1943
|
|
1494
1944
|
worksheet4.conditional_formatting('B3:K12',
|
1495
1945
|
{
|
@@ -1497,7 +1947,7 @@ def test_conditional_format
|
|
1497
1947
|
:criteria => 'below',
|
1498
1948
|
:format => format2
|
1499
1949
|
}
|
1500
|
-
|
1950
|
+
)
|
1501
1951
|
|
1502
1952
|
|
1503
1953
|
###############################################################################
|
@@ -1505,7 +1955,7 @@ def test_conditional_format
|
|
1505
1955
|
# Example 5.
|
1506
1956
|
#
|
1507
1957
|
caption = 'Top 10 values are in light red. ' +
|
1508
|
-
|
1958
|
+
'Bottom 10 values are in light green.'
|
1509
1959
|
|
1510
1960
|
worksheet5.write('A1', caption)
|
1511
1961
|
worksheet5.write_col('B3', data)
|
@@ -1516,7 +1966,7 @@ def test_conditional_format
|
|
1516
1966
|
:value => '10',
|
1517
1967
|
:format => format1
|
1518
1968
|
}
|
1519
|
-
|
1969
|
+
)
|
1520
1970
|
|
1521
1971
|
worksheet5.conditional_formatting('B3:K12',
|
1522
1972
|
{
|
@@ -1524,7 +1974,7 @@ def test_conditional_format
|
|
1524
1974
|
:value => '10',
|
1525
1975
|
:format => format2
|
1526
1976
|
}
|
1527
|
-
|
1977
|
+
)
|
1528
1978
|
|
1529
1979
|
|
1530
1980
|
###############################################################################
|
@@ -1532,7 +1982,7 @@ def test_conditional_format
|
|
1532
1982
|
# Example 6.
|
1533
1983
|
#
|
1534
1984
|
caption = 'Cells with values >= 50 are in light red. ' +
|
1535
|
-
|
1985
|
+
'Values < 50 are in light green. Non-contiguous ranges.'
|
1536
1986
|
|
1537
1987
|
# Write the data.
|
1538
1988
|
worksheet6.write('A1', caption)
|
@@ -1546,7 +1996,7 @@ def test_conditional_format
|
|
1546
1996
|
:value => 50,
|
1547
1997
|
:format => format1
|
1548
1998
|
}
|
1549
|
-
|
1999
|
+
)
|
1550
2000
|
|
1551
2001
|
# Write another conditional format over the same range.
|
1552
2002
|
worksheet6.conditional_formatting('B3:K6,B9:K12',
|
@@ -1556,7 +2006,7 @@ def test_conditional_format
|
|
1556
2006
|
:value => 50,
|
1557
2007
|
:format => format2
|
1558
2008
|
}
|
1559
|
-
|
2009
|
+
)
|
1560
2010
|
|
1561
2011
|
|
1562
2012
|
###############################################################################
|
@@ -1583,19 +2033,19 @@ def test_conditional_format
|
|
1583
2033
|
{
|
1584
2034
|
:type => '2_color_scale'
|
1585
2035
|
}
|
1586
|
-
|
2036
|
+
)
|
1587
2037
|
|
1588
2038
|
worksheet7.conditional_formatting('D3:D14',
|
1589
2039
|
{
|
1590
2040
|
:type => '3_color_scale'
|
1591
2041
|
}
|
1592
|
-
|
2042
|
+
)
|
1593
2043
|
|
1594
2044
|
worksheet7.conditional_formatting('F3:F14',
|
1595
2045
|
{
|
1596
2046
|
:type => 'data_bar'
|
1597
2047
|
}
|
1598
|
-
|
2048
|
+
)
|
1599
2049
|
|
1600
2050
|
|
1601
2051
|
###############################################################################
|
@@ -1624,7 +2074,7 @@ def test_conditional_format
|
|
1624
2074
|
:min_color => "#FF0000",
|
1625
2075
|
:max_color => "#00FF00"
|
1626
2076
|
}
|
1627
|
-
|
2077
|
+
)
|
1628
2078
|
|
1629
2079
|
worksheet8.conditional_formatting('D3:D14',
|
1630
2080
|
{
|
@@ -1633,14 +2083,14 @@ def test_conditional_format
|
|
1633
2083
|
:mid_color => "#8DB4E3",
|
1634
2084
|
:max_color => "#538ED5"
|
1635
2085
|
}
|
1636
|
-
|
2086
|
+
)
|
1637
2087
|
|
1638
2088
|
worksheet8.conditional_formatting('F3:F14',
|
1639
2089
|
{
|
1640
2090
|
:type => 'data_bar',
|
1641
2091
|
:bar_color => '#63C384'
|
1642
2092
|
}
|
1643
|
-
|
2093
|
+
)
|
1644
2094
|
|
1645
2095
|
workbook.close
|
1646
2096
|
store_to_tempfile
|
@@ -1654,13 +2104,13 @@ def test_data_validate
|
|
1654
2104
|
|
1655
2105
|
# Add a format for the header cells.
|
1656
2106
|
header_format = workbook.add_format(
|
1657
|
-
|
1658
|
-
|
1659
|
-
|
1660
|
-
|
1661
|
-
|
1662
|
-
|
1663
|
-
|
2107
|
+
:border => 1,
|
2108
|
+
:bg_color => 43,
|
2109
|
+
:bold => 1,
|
2110
|
+
:text_wrap => 1,
|
2111
|
+
:valign => 'vcenter',
|
2112
|
+
:indent => 1
|
2113
|
+
)
|
1664
2114
|
|
1665
2115
|
# Set up layout of the worksheet.
|
1666
2116
|
worksheet.set_column('A:A', 68)
|
@@ -1932,32 +2382,32 @@ def test_date_time
|
|
1932
2382
|
# the format codes change the appearance of the date.
|
1933
2383
|
#
|
1934
2384
|
date_formats = [
|
1935
|
-
|
1936
|
-
|
1937
|
-
|
1938
|
-
|
1939
|
-
|
1940
|
-
|
1941
|
-
|
1942
|
-
|
1943
|
-
|
1944
|
-
|
1945
|
-
|
1946
|
-
|
1947
|
-
|
1948
|
-
|
1949
|
-
|
1950
|
-
|
1951
|
-
|
1952
|
-
|
1953
|
-
|
1954
|
-
|
1955
|
-
|
1956
|
-
|
1957
|
-
|
1958
|
-
|
1959
|
-
|
1960
|
-
|
2385
|
+
'dd/mm/yy',
|
2386
|
+
'mm/dd/yy',
|
2387
|
+
'',
|
2388
|
+
'd mm yy',
|
2389
|
+
'dd mm yy',
|
2390
|
+
'',
|
2391
|
+
'dd m yy',
|
2392
|
+
'dd mm yy',
|
2393
|
+
'dd mmm yy',
|
2394
|
+
'dd mmmm yy',
|
2395
|
+
'',
|
2396
|
+
'dd mm y',
|
2397
|
+
'dd mm yyy',
|
2398
|
+
'dd mm yyyy',
|
2399
|
+
'',
|
2400
|
+
'd mmmm yyyy',
|
2401
|
+
'',
|
2402
|
+
'dd/mm/yy',
|
2403
|
+
'dd/mm/yy hh:mm',
|
2404
|
+
'dd/mm/yy hh:mm:ss',
|
2405
|
+
'dd/mm/yy hh:mm:ss.000',
|
2406
|
+
'',
|
2407
|
+
'hh:mm',
|
2408
|
+
'hh:mm:ss',
|
2409
|
+
'hh:mm:ss.000'
|
2410
|
+
]
|
1961
2411
|
|
1962
2412
|
# Write the same date and time using each of the above formats. The empty
|
1963
2413
|
# string formats create a blank line to make the example clearer.
|
@@ -1969,9 +2419,9 @@ def test_date_time
|
|
1969
2419
|
|
1970
2420
|
# Create a format for the date or time.
|
1971
2421
|
format = workbook.add_format(
|
1972
|
-
|
1973
|
-
|
1974
|
-
|
2422
|
+
:num_format => date_format,
|
2423
|
+
:align => 'left'
|
2424
|
+
)
|
1975
2425
|
|
1976
2426
|
# Write the same date using different formats.
|
1977
2427
|
worksheet.write_date_time(row, 0, '2004-08-01T12:30:45.123', format)
|
@@ -2036,17 +2486,17 @@ def test_demo
|
|
2036
2486
|
worksheet.set_row(0, 40)
|
2037
2487
|
|
2038
2488
|
heading = workbook.add_format(
|
2039
|
-
|
2040
|
-
|
2041
|
-
|
2042
|
-
|
2043
|
-
|
2044
|
-
|
2489
|
+
:bold => 1,
|
2490
|
+
:color => 'blue',
|
2491
|
+
:size => 16,
|
2492
|
+
:merge => 1,
|
2493
|
+
:align => 'vcenter'
|
2494
|
+
)
|
2045
2495
|
|
2046
2496
|
hyperlink_format = workbook.add_format(
|
2047
|
-
|
2048
|
-
|
2049
|
-
|
2497
|
+
:color => 'blue',
|
2498
|
+
:underline => 1
|
2499
|
+
)
|
2050
2500
|
|
2051
2501
|
headings = ['Features of WriteXLSX', '']
|
2052
2502
|
worksheet.write_row('A1', headings, heading)
|
@@ -2056,12 +2506,12 @@ def test_demo
|
|
2056
2506
|
# Some text examples
|
2057
2507
|
#
|
2058
2508
|
text_format = workbook.add_format(
|
2059
|
-
|
2060
|
-
|
2061
|
-
|
2062
|
-
|
2063
|
-
|
2064
|
-
|
2509
|
+
:bold => 1,
|
2510
|
+
:italic => 1,
|
2511
|
+
:color => 'red',
|
2512
|
+
:size => 18,
|
2513
|
+
:font => 'Lucida Calligraphy'
|
2514
|
+
)
|
2065
2515
|
|
2066
2516
|
worksheet.write('A2', "Text")
|
2067
2517
|
worksheet.write('B2', "Hello Excel")
|
@@ -2104,7 +2554,10 @@ def test_demo
|
|
2104
2554
|
# Images
|
2105
2555
|
#
|
2106
2556
|
worksheet.write('A10', "Images")
|
2107
|
-
worksheet.insert_image(
|
2557
|
+
worksheet.insert_image(
|
2558
|
+
'B10', File.join(@test_dir, 'republic.png'),
|
2559
|
+
:x_offset => 16, :y_offset => 8
|
2560
|
+
)
|
2108
2561
|
|
2109
2562
|
#######################################################################
|
2110
2563
|
#
|
@@ -2129,10 +2582,10 @@ def test_diag_border
|
|
2129
2582
|
format3 = workbook.add_format(:diag_type => 3)
|
2130
2583
|
|
2131
2584
|
format4 = workbook.add_format(
|
2132
|
-
|
2133
|
-
|
2134
|
-
|
2135
|
-
|
2585
|
+
:diag_type => 3,
|
2586
|
+
:diag_border => 7,
|
2587
|
+
:diag_color => 'red'
|
2588
|
+
)
|
2136
2589
|
|
2137
2590
|
worksheet.write('B3', 'Text', format1)
|
2138
2591
|
worksheet.write('B6', 'Text', format2)
|
@@ -2218,9 +2671,9 @@ def intro(workbook, center, heading, colors)
|
|
2218
2671
|
format2.set_color('blue')
|
2219
2672
|
|
2220
2673
|
format3 = workbook.add_format(
|
2221
|
-
|
2222
|
-
|
2223
|
-
|
2674
|
+
:color => 'blue',
|
2675
|
+
:underline => 1
|
2676
|
+
)
|
2224
2677
|
|
2225
2678
|
worksheet.write(2, 0, 'This workbook demonstrates some of', format)
|
2226
2679
|
worksheet.write(3, 0, 'the formatting options provided by', format)
|
@@ -2233,16 +2686,16 @@ def intro(workbook, center, heading, colors)
|
|
2233
2686
|
'Named colors', format3)
|
2234
2687
|
|
2235
2688
|
worksheet.write(
|
2236
|
-
|
2237
|
-
|
2238
|
-
|
2239
|
-
|
2689
|
+
'A10',
|
2690
|
+
"internal:'Standard colors'!A1",
|
2691
|
+
'Standard colors', format3
|
2692
|
+
)
|
2240
2693
|
|
2241
2694
|
worksheet.write(
|
2242
|
-
|
2243
|
-
|
2244
|
-
|
2245
|
-
|
2695
|
+
'A11',
|
2696
|
+
"internal:'Numeric formats'!A1",
|
2697
|
+
'Numeric formats', format3
|
2698
|
+
)
|
2246
2699
|
|
2247
2700
|
worksheet.write('A12', "internal:Borders!A1", 'Borders', format3)
|
2248
2701
|
worksheet.write('A13', "internal:Patterns!A1", 'Patterns', format3)
|
@@ -2272,10 +2725,10 @@ def named_colors(workbook, center, heading, colors)
|
|
2272
2725
|
[33, 11, 53, 17, 22, 18, 13, 16, 23, 9, 12, 15, 14, 20, 8, 10].each do |index|
|
2273
2726
|
color = colors[index]
|
2274
2727
|
format = workbook.add_format(
|
2275
|
-
|
2276
|
-
|
2277
|
-
|
2278
|
-
|
2728
|
+
:bg_color => color,
|
2729
|
+
:pattern => 1,
|
2730
|
+
:border => 1
|
2731
|
+
)
|
2279
2732
|
|
2280
2733
|
worksheet.write(i + 1, 0, index, center)
|
2281
2734
|
worksheet.write(i + 1, 1, sprintf("0x%02X", index), center)
|
@@ -2302,10 +2755,10 @@ def standard_colors(workbook, center, heading, colors)
|
|
2302
2755
|
|
2303
2756
|
(8 .. 63).each do |i|
|
2304
2757
|
format = workbook.add_format(
|
2305
|
-
|
2306
|
-
|
2307
|
-
|
2308
|
-
|
2758
|
+
:bg_color => i,
|
2759
|
+
:pattern => 1,
|
2760
|
+
:border => 1
|
2761
|
+
)
|
2309
2762
|
|
2310
2763
|
worksheet.write((i - 7), 0, i, center)
|
2311
2764
|
worksheet.write((i - 7), 1, sprintf("0x%02X", i), center)
|
@@ -2787,17 +3240,17 @@ def test_hyperlink
|
|
2787
3240
|
|
2788
3241
|
# Add the standard url link format.
|
2789
3242
|
url_format = workbook.add_format(
|
2790
|
-
|
2791
|
-
|
2792
|
-
|
3243
|
+
:color => 'blue',
|
3244
|
+
:underline => 1
|
3245
|
+
)
|
2793
3246
|
|
2794
3247
|
# Add a sample format.
|
2795
3248
|
red_format = workbook.add_format(
|
2796
|
-
|
2797
|
-
|
2798
|
-
|
2799
|
-
|
2800
|
-
|
3249
|
+
:color => 'red',
|
3250
|
+
:bold => 1,
|
3251
|
+
:underline => 1,
|
3252
|
+
:size => 12
|
3253
|
+
)
|
2801
3254
|
|
2802
3255
|
# Add an alternate description string to the URL.
|
2803
3256
|
str = 'Perl home.'
|
@@ -2873,16 +3326,16 @@ def test_merge2
|
|
2873
3326
|
|
2874
3327
|
# Create a merged format
|
2875
3328
|
format = workbook.add_format(
|
2876
|
-
|
2877
|
-
|
2878
|
-
|
2879
|
-
|
2880
|
-
|
2881
|
-
|
2882
|
-
|
2883
|
-
|
2884
|
-
|
2885
|
-
|
3329
|
+
:center_across => 1,
|
3330
|
+
:bold => 1,
|
3331
|
+
:size => 15,
|
3332
|
+
:pattern => 1,
|
3333
|
+
:border => 6,
|
3334
|
+
:color => 'white',
|
3335
|
+
:fg_color => 'green',
|
3336
|
+
:border_color => 'yellow',
|
3337
|
+
:align => 'vcenter'
|
3338
|
+
)
|
2886
3339
|
|
2887
3340
|
# Only one cell should contain text, the others should be blank.
|
2888
3341
|
worksheet.write(2, 1, "Center across selection", format)
|
@@ -2909,12 +3362,12 @@ def test_merge3
|
|
2909
3362
|
# Example: Merge cells containing a hyperlink using merge_range().
|
2910
3363
|
#
|
2911
3364
|
format = workbook.add_format(
|
2912
|
-
|
2913
|
-
|
2914
|
-
|
2915
|
-
|
2916
|
-
|
2917
|
-
|
3365
|
+
:border => 1,
|
3366
|
+
:underline => 1,
|
3367
|
+
:color => 'blue',
|
3368
|
+
:align => 'center',
|
3369
|
+
:valign => 'vcenter'
|
3370
|
+
)
|
2918
3371
|
|
2919
3372
|
# Merge 3 cells
|
2920
3373
|
worksheet.merge_range('B4:D4', 'http://www.perl.com', format)
|
@@ -2942,12 +3395,12 @@ def test_merge4
|
|
2942
3395
|
# Example 1: Text centered vertically and horizontally
|
2943
3396
|
#
|
2944
3397
|
format1 = workbook.add_format(
|
2945
|
-
|
2946
|
-
|
2947
|
-
|
2948
|
-
|
2949
|
-
|
2950
|
-
|
3398
|
+
:border => 6,
|
3399
|
+
:bold => 1,
|
3400
|
+
:color => 'red',
|
3401
|
+
:valign => 'vcenter',
|
3402
|
+
:align => 'center'
|
3403
|
+
)
|
2951
3404
|
|
2952
3405
|
worksheet.merge_range('B2:D3', 'Vertical and horizontal', format1)
|
2953
3406
|
|
@@ -2956,12 +3409,12 @@ def test_merge4
|
|
2956
3409
|
# Example 2: Text aligned to the top and left
|
2957
3410
|
#
|
2958
3411
|
format2 = workbook.add_format(
|
2959
|
-
|
2960
|
-
|
2961
|
-
|
2962
|
-
|
2963
|
-
|
2964
|
-
|
3412
|
+
:border => 6,
|
3413
|
+
:bold => 1,
|
3414
|
+
:color => 'red',
|
3415
|
+
:valign => 'top',
|
3416
|
+
:align => 'left'
|
3417
|
+
)
|
2965
3418
|
|
2966
3419
|
worksheet.merge_range('B5:D6', 'Aligned to the top and left', format2)
|
2967
3420
|
|
@@ -2970,12 +3423,12 @@ def test_merge4
|
|
2970
3423
|
# Example 3: Text aligned to the bottom and right
|
2971
3424
|
#
|
2972
3425
|
format3 = workbook.add_format(
|
2973
|
-
|
2974
|
-
|
2975
|
-
|
2976
|
-
|
2977
|
-
|
2978
|
-
|
3426
|
+
:border => 6,
|
3427
|
+
:bold => 1,
|
3428
|
+
:color => 'red',
|
3429
|
+
:valign => 'bottom',
|
3430
|
+
:align => 'right'
|
3431
|
+
)
|
2979
3432
|
|
2980
3433
|
worksheet.merge_range('B8:D9', 'Aligned to the bottom and right', format3)
|
2981
3434
|
|
@@ -2984,12 +3437,12 @@ def test_merge4
|
|
2984
3437
|
# Example 4: Text justified (i.e. wrapped) in the cell
|
2985
3438
|
#
|
2986
3439
|
format4 = workbook.add_format(
|
2987
|
-
|
2988
|
-
|
2989
|
-
|
2990
|
-
|
2991
|
-
|
2992
|
-
|
3440
|
+
:border => 6,
|
3441
|
+
:bold => 1,
|
3442
|
+
:color => 'red',
|
3443
|
+
:valign => 'top',
|
3444
|
+
:align => 'justify'
|
3445
|
+
)
|
2993
3446
|
|
2994
3447
|
worksheet.merge_range('B11:D12', 'Justified: ' << 'so on and ' * 18, format4)
|
2995
3448
|
|
@@ -3013,13 +3466,13 @@ def test_merge5
|
|
3013
3466
|
# Rotation 1, letters run from top to bottom
|
3014
3467
|
#
|
3015
3468
|
format1 = workbook.add_format(
|
3016
|
-
|
3017
|
-
|
3018
|
-
|
3019
|
-
|
3020
|
-
|
3021
|
-
|
3022
|
-
|
3469
|
+
:border => 6,
|
3470
|
+
:bold => 1,
|
3471
|
+
:color => 'red',
|
3472
|
+
:valign => 'vcentre',
|
3473
|
+
:align => 'centre',
|
3474
|
+
:rotation => 270
|
3475
|
+
)
|
3023
3476
|
|
3024
3477
|
worksheet.merge_range( 'B4:B9', 'Rotation 270', format1 )
|
3025
3478
|
|
@@ -3028,13 +3481,13 @@ def test_merge5
|
|
3028
3481
|
# Rotation 2, 90ー anticlockwise
|
3029
3482
|
#
|
3030
3483
|
format2 = workbook.add_format(
|
3031
|
-
|
3032
|
-
|
3033
|
-
|
3034
|
-
|
3035
|
-
|
3036
|
-
|
3037
|
-
|
3484
|
+
:border => 6,
|
3485
|
+
:bold => 1,
|
3486
|
+
:color => 'red',
|
3487
|
+
:valign => 'vcentre',
|
3488
|
+
:align => 'centre',
|
3489
|
+
:rotation => 90
|
3490
|
+
)
|
3038
3491
|
|
3039
3492
|
worksheet.merge_range( 'D4:D9', 'Rotation 90°', format2 )
|
3040
3493
|
|
@@ -3043,13 +3496,13 @@ def test_merge5
|
|
3043
3496
|
# Rotation 3, 90ー clockwise
|
3044
3497
|
#
|
3045
3498
|
format3 = workbook.add_format(
|
3046
|
-
|
3047
|
-
|
3048
|
-
|
3049
|
-
|
3050
|
-
|
3051
|
-
|
3052
|
-
|
3499
|
+
:border => 6,
|
3500
|
+
:bold => 1,
|
3501
|
+
:color => 'red',
|
3502
|
+
:valign => 'vcentre',
|
3503
|
+
:align => 'centre',
|
3504
|
+
:rotation => -90
|
3505
|
+
)
|
3053
3506
|
|
3054
3507
|
worksheet.merge_range( 'F4:F9', 'Rotation -90°', format3 )
|
3055
3508
|
|
@@ -3070,14 +3523,14 @@ def test_merge6
|
|
3070
3523
|
|
3071
3524
|
# Format for the merged cells.
|
3072
3525
|
format = workbook.add_format(
|
3073
|
-
|
3074
|
-
|
3075
|
-
|
3076
|
-
|
3077
|
-
|
3078
|
-
|
3079
|
-
|
3080
|
-
|
3526
|
+
:border => 6,
|
3527
|
+
:bold => 1,
|
3528
|
+
:color => 'red',
|
3529
|
+
:size => 20,
|
3530
|
+
:valign => 'vcentre',
|
3531
|
+
:align => 'left',
|
3532
|
+
:indent => 1
|
3533
|
+
)
|
3081
3534
|
|
3082
3535
|
###############################################################################
|
3083
3536
|
#
|
@@ -3234,12 +3687,12 @@ def test_outline
|
|
3234
3687
|
# Example 3: Create a worksheet with outlined columns.
|
3235
3688
|
#
|
3236
3689
|
data = [
|
3237
|
-
|
3238
|
-
|
3239
|
-
|
3240
|
-
|
3241
|
-
|
3242
|
-
|
3690
|
+
[ 'Month', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', ' Total' ],
|
3691
|
+
[ 'North', 50, 20, 15, 25, 65, 80, '=SUM(B2:G2)' ],
|
3692
|
+
[ 'South', 10, 20, 30, 50, 50, 50, '=SUM(B3:G3)' ],
|
3693
|
+
[ 'East', 45, 75, 50, 15, 75, 100, '=SUM(B4:G4)' ],
|
3694
|
+
[ 'West', 15, 15, 55, 35, 20, 50, '=SUM(B5:G5)' ],
|
3695
|
+
]
|
3243
3696
|
|
3244
3697
|
# Add bold format to the first row
|
3245
3698
|
worksheet3.set_row(0, nil, bold)
|
@@ -3259,10 +3712,10 @@ def test_outline
|
|
3259
3712
|
# Example 4: Show all possible outline levels.
|
3260
3713
|
#
|
3261
3714
|
levels = [
|
3262
|
-
|
3263
|
-
|
3264
|
-
|
3265
|
-
|
3715
|
+
"Level 1", "Level 2", "Level 3", "Level 4", "Level 5", "Level 6",
|
3716
|
+
"Level 7", "Level 6", "Level 5", "Level 4", "Level 3", "Level 2",
|
3717
|
+
"Level 1"
|
3718
|
+
]
|
3266
3719
|
|
3267
3720
|
|
3268
3721
|
worksheet4.write_col('A1', levels)
|
@@ -3393,12 +3846,12 @@ def test_outline_collapsed
|
|
3393
3846
|
# Example 5: Create a worksheet with outlined columns.
|
3394
3847
|
#
|
3395
3848
|
data = [
|
3396
|
-
|
3397
|
-
|
3398
|
-
|
3399
|
-
|
3400
|
-
|
3401
|
-
|
3849
|
+
[ 'Month', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Total' ],
|
3850
|
+
[ 'North', 50, 20, 15, 25, 65, 80, '=SUM(B2:G2)' ],
|
3851
|
+
[ 'South', 10, 20, 30, 50, 50, 50, '=SUM(B3:G3)' ],
|
3852
|
+
[ 'East', 45, 75, 50, 15, 75, 100, '=SUM(B4:G4)' ],
|
3853
|
+
[ 'West', 15, 15, 55, 35, 20, 50, '=SUM(B5:G6)' ]
|
3854
|
+
]
|
3402
3855
|
|
3403
3856
|
# Add bold format to the first row
|
3404
3857
|
worksheet5.set_row(0, nil, bold)
|
@@ -3499,10 +3952,10 @@ def test_panes
|
|
3499
3952
|
#
|
3500
3953
|
|
3501
3954
|
header = workbook.add_format(
|
3502
|
-
|
3503
|
-
|
3504
|
-
|
3505
|
-
|
3955
|
+
:align => 'center',
|
3956
|
+
:valign => 'vcenter',
|
3957
|
+
:fg_color => 0x2A
|
3958
|
+
)
|
3506
3959
|
|
3507
3960
|
center = workbook.add_format(:align => 'center')
|
3508
3961
|
|
@@ -3598,16 +4051,16 @@ def test_properties
|
|
3598
4051
|
worksheet = workbook.add_worksheet
|
3599
4052
|
|
3600
4053
|
workbook.set_properties(
|
3601
|
-
|
3602
|
-
|
3603
|
-
|
3604
|
-
|
3605
|
-
|
3606
|
-
|
3607
|
-
|
3608
|
-
|
3609
|
-
|
3610
|
-
|
4054
|
+
:title => 'This is an example spreadsheet',
|
4055
|
+
:subject => 'With document properties',
|
4056
|
+
:author => 'John McNamara',
|
4057
|
+
:manager => 'Dr. Heinz Doofenshmirtz',
|
4058
|
+
:company => 'of Wolves',
|
4059
|
+
:category => 'Example spreadsheets',
|
4060
|
+
:keywords => 'Sample, Example, Properties',
|
4061
|
+
:comments => 'Created with Perl and Excel::Writer::XLSX',
|
4062
|
+
:status => 'Quo'
|
4063
|
+
)
|
3611
4064
|
|
3612
4065
|
worksheet.set_column('A:A', 70)
|
3613
4066
|
worksheet.write('A1', "Select 'Office Button -> Prepare -> Properties' to see the file properties.")
|
@@ -3708,16 +4161,16 @@ def test_rich_strings
|
|
3708
4161
|
|
3709
4162
|
# Write some strings with multiple formats.
|
3710
4163
|
worksheet.write_rich_string('A1',
|
3711
|
-
|
4164
|
+
'This is ', bold, 'bold', ' and this is ', italic, 'italic')
|
3712
4165
|
|
3713
4166
|
worksheet.write_rich_string('A3',
|
3714
|
-
|
4167
|
+
'This is ', red, 'red', ' and this is ', blue, 'blue')
|
3715
4168
|
|
3716
4169
|
worksheet.write_rich_string('A5',
|
3717
|
-
|
4170
|
+
'Some ', bold, 'bold text', ' centered', center)
|
3718
4171
|
|
3719
4172
|
worksheet.write_rich_string('A7',
|
3720
|
-
|
4173
|
+
italic, 'j = k', superc, '(n-1)', center)
|
3721
4174
|
|
3722
4175
|
workbook.close
|
3723
4176
|
store_to_tempfile
|
@@ -3750,7 +4203,7 @@ def test_shape1
|
|
3750
4203
|
:text => "Hello\nWorld",
|
3751
4204
|
:width => 60,
|
3752
4205
|
:height => 60
|
3753
|
-
|
4206
|
+
)
|
3754
4207
|
|
3755
4208
|
worksheet.insert_shape('A1', ellipse, 50, 50)
|
3756
4209
|
|
@@ -3775,12 +4228,12 @@ def test_shape2
|
|
3775
4228
|
:text => "Plain",
|
3776
4229
|
:width => 100,
|
3777
4230
|
:height => 100
|
3778
|
-
|
4231
|
+
)
|
3779
4232
|
|
3780
4233
|
bbformat = workbook.add_format(
|
3781
4234
|
:color => 'red',
|
3782
4235
|
:font => 'Lucida Calligraphy'
|
3783
|
-
|
4236
|
+
)
|
3784
4237
|
|
3785
4238
|
bbformat.set_bold
|
3786
4239
|
bbformat.set_underline
|
@@ -3797,7 +4250,7 @@ def test_shape2
|
|
3797
4250
|
:line_weight => 3,
|
3798
4251
|
:fill => 'FFFF00',
|
3799
4252
|
:line => '3366FF'
|
3800
|
-
|
4253
|
+
)
|
3801
4254
|
|
3802
4255
|
worksheet.insert_shape('A1', plain, 50, 50)
|
3803
4256
|
worksheet.insert_shape('A1', decor, 250, 50)
|
@@ -3818,7 +4271,7 @@ def test_shape3
|
|
3818
4271
|
:text => 'Normal',
|
3819
4272
|
:width => 100,
|
3820
4273
|
:height => 100
|
3821
|
-
|
4274
|
+
)
|
3822
4275
|
|
3823
4276
|
worksheet.insert_shape('A1', normal, 50, 50)
|
3824
4277
|
normal.text = 'Scaled 3w x 2h'
|
@@ -3841,7 +4294,7 @@ def test_shape4
|
|
3841
4294
|
:type => type,
|
3842
4295
|
:width => 90,
|
3843
4296
|
:height => 90
|
3844
|
-
|
4297
|
+
)
|
3845
4298
|
|
3846
4299
|
(1..10).each do |n|
|
3847
4300
|
# Change the last 5 rectangles to stars. Previously
|
@@ -3857,7 +4310,7 @@ def test_shape4
|
|
3857
4310
|
:width => 90,
|
3858
4311
|
:height => 90,
|
3859
4312
|
:text => 'started as a box'
|
3860
|
-
|
4313
|
+
)
|
3861
4314
|
worksheet.insert_shape('A1', stencil, 100, 150)
|
3862
4315
|
|
3863
4316
|
stencil.stencil = 0
|
@@ -3884,14 +4337,14 @@ def test_shape5
|
|
3884
4337
|
:type => 'ellipse',
|
3885
4338
|
:width => 60,
|
3886
4339
|
:height => 60
|
3887
|
-
|
4340
|
+
)
|
3888
4341
|
worksheet.insert_shape('A1', s1, 50, 50)
|
3889
4342
|
|
3890
4343
|
s2 = workbook.add_shape(
|
3891
4344
|
:type => 'plus',
|
3892
4345
|
:width => 20,
|
3893
4346
|
:height => 20
|
3894
|
-
|
4347
|
+
)
|
3895
4348
|
worksheet.insert_shape('A1', s2, 250, 200)
|
3896
4349
|
|
3897
4350
|
# Create a connector to link the two shapes.
|
@@ -3923,14 +4376,14 @@ def test_shape6
|
|
3923
4376
|
:type => 'chevron',
|
3924
4377
|
:width => 60,
|
3925
4378
|
:height => 60
|
3926
|
-
|
4379
|
+
)
|
3927
4380
|
worksheet.insert_shape('A1', s1, 50, 50)
|
3928
4381
|
|
3929
4382
|
s2 = workbook.add_shape(
|
3930
4383
|
:type => 'pentagon',
|
3931
4384
|
:width => 20,
|
3932
4385
|
:height => 20
|
3933
|
-
|
4386
|
+
)
|
3934
4387
|
worksheet.insert_shape('A1', s2, 250, 200)
|
3935
4388
|
|
3936
4389
|
# Create a connector to link the two shapes.
|
@@ -3970,7 +4423,7 @@ def test_shape7
|
|
3970
4423
|
:text => "Hello\nWorld",
|
3971
4424
|
:width => cw,
|
3972
4425
|
:height => ch
|
3973
|
-
|
4426
|
+
)
|
3974
4427
|
worksheet.insert_shape('A1', ellipse, cx, cy)
|
3975
4428
|
|
3976
4429
|
# Add a plus sign at 4 different positions around the circle.
|
@@ -3984,7 +4437,7 @@ def test_shape7
|
|
3984
4437
|
:id => 3,
|
3985
4438
|
:width => pw,
|
3986
4439
|
:height => ph
|
3987
|
-
|
4440
|
+
)
|
3988
4441
|
|
3989
4442
|
p1 = worksheet.insert_shape('A1', plus, 350, 350)
|
3990
4443
|
p2 = worksheet.insert_shape('A1', plus, 150, 350)
|
@@ -4035,7 +4488,7 @@ def test_shape8
|
|
4035
4488
|
:text => "Hello\nWorld",
|
4036
4489
|
:width => cw,
|
4037
4490
|
:height => ch
|
4038
|
-
|
4491
|
+
)
|
4039
4492
|
worksheet.insert_shape('A1', ellipse, cx, cy)
|
4040
4493
|
|
4041
4494
|
# Add a plus sign at 4 different positionos around the circle.
|
@@ -4049,7 +4502,7 @@ def test_shape8
|
|
4049
4502
|
:id => 3,
|
4050
4503
|
:width => pw,
|
4051
4504
|
:height => ph
|
4052
|
-
|
4505
|
+
)
|
4053
4506
|
|
4054
4507
|
p1 = worksheet.insert_shape('A1', plus, 350, 150)
|
4055
4508
|
p2 = worksheet.insert_shape('A1', plus, 350, 350)
|
@@ -4100,11 +4553,11 @@ def test_shape_all
|
|
4100
4553
|
end
|
4101
4554
|
last_sheet = sheet
|
4102
4555
|
shape = workbook.add_shape(
|
4103
|
-
|
4104
|
-
|
4105
|
-
|
4106
|
-
|
4107
|
-
|
4556
|
+
:type => name,
|
4557
|
+
:text => name,
|
4558
|
+
:width => 90,
|
4559
|
+
:height => 90
|
4560
|
+
)
|
4108
4561
|
|
4109
4562
|
# Connectors can not have labels, so write the connector name in the cell
|
4110
4563
|
# to the left.
|
@@ -4530,17 +4983,18 @@ def test_tables
|
|
4530
4983
|
worksheet10 = workbook.add_worksheet
|
4531
4984
|
worksheet11 = workbook.add_worksheet
|
4532
4985
|
worksheet12 = workbook.add_worksheet
|
4986
|
+
worksheet13 = workbook.add_worksheet
|
4533
4987
|
|
4534
4988
|
currency_format = workbook.add_format(:num_format => '$#,##0')
|
4535
4989
|
|
4536
4990
|
|
4537
4991
|
# Some sample data for the table.
|
4538
4992
|
data = [
|
4539
|
-
|
4540
|
-
|
4541
|
-
|
4542
|
-
|
4543
|
-
|
4993
|
+
[ 'Apples', 10000, 5000, 8000, 6000 ],
|
4994
|
+
[ 'Pears', 2000, 3000, 4000, 5000 ],
|
4995
|
+
[ 'Bananas', 6000, 6000, 6500, 6000 ],
|
4996
|
+
[ 'Oranges', 500, 300, 200, 700 ]
|
4997
|
+
]
|
4544
4998
|
|
4545
4999
|
###############################################################################
|
4546
5000
|
#
|
@@ -4561,7 +5015,7 @@ def test_tables
|
|
4561
5015
|
#
|
4562
5016
|
# Example 2.
|
4563
5017
|
#
|
4564
|
-
caption = 'Default table with data.'
|
5018
|
+
caption = 'Default table with data.'
|
4565
5019
|
|
4566
5020
|
# Set the columns widths.
|
4567
5021
|
worksheet2.set_column('B:G', 12)
|
@@ -4630,7 +5084,7 @@ def test_tables
|
|
4630
5084
|
#
|
4631
5085
|
# Example 6.
|
4632
5086
|
#
|
4633
|
-
caption = 'Table with banded columns but without default banded rows.'
|
5087
|
+
caption = 'Table with banded columns but without default banded rows.'
|
4634
5088
|
|
4635
5089
|
# Set the columns widths.
|
4636
5090
|
worksheet6.set_column('B:G', 12)
|
@@ -4648,7 +5102,7 @@ def test_tables
|
|
4648
5102
|
#
|
4649
5103
|
# Example 7.
|
4650
5104
|
#
|
4651
|
-
caption = 'Table with user defined column headers'
|
5105
|
+
caption = 'Table with user defined column headers'
|
4652
5106
|
|
4653
5107
|
# Set the columns widths.
|
4654
5108
|
worksheet7.set_column('B:G', 12)
|
@@ -4658,24 +5112,24 @@ def test_tables
|
|
4658
5112
|
|
4659
5113
|
# Add a table to the worksheet.
|
4660
5114
|
worksheet7.add_table(
|
4661
|
-
|
4662
|
-
|
4663
|
-
|
4664
|
-
|
4665
|
-
|
4666
|
-
|
4667
|
-
|
4668
|
-
|
4669
|
-
|
4670
|
-
|
4671
|
-
|
4672
|
-
|
5115
|
+
'B3:F7',
|
5116
|
+
{
|
5117
|
+
:data => data,
|
5118
|
+
:columns => [
|
5119
|
+
{ :header => 'Product' },
|
5120
|
+
{ :header => 'Quarter 1' },
|
5121
|
+
{ :header => 'Quarter 2' },
|
5122
|
+
{ :header => 'Quarter 3' },
|
5123
|
+
{ :header => 'Quarter 4' }
|
5124
|
+
]
|
5125
|
+
}
|
5126
|
+
)
|
4673
5127
|
|
4674
5128
|
###############################################################################
|
4675
5129
|
#
|
4676
5130
|
# Example 8.
|
4677
5131
|
#
|
4678
|
-
caption = 'Table with user defined column headers'
|
5132
|
+
caption = 'Table with user defined column headers'
|
4679
5133
|
|
4680
5134
|
# Set the columns widths.
|
4681
5135
|
worksheet8.set_column('B:G', 12)
|
@@ -4685,29 +5139,29 @@ def test_tables
|
|
4685
5139
|
|
4686
5140
|
# Add a table to the worksheet.
|
4687
5141
|
worksheet8.add_table(
|
4688
|
-
|
4689
|
-
|
4690
|
-
|
4691
|
-
|
4692
|
-
|
4693
|
-
|
4694
|
-
|
4695
|
-
|
4696
|
-
|
4697
|
-
|
4698
|
-
|
4699
|
-
|
4700
|
-
|
4701
|
-
|
4702
|
-
|
4703
|
-
|
5142
|
+
'B3:G7',
|
5143
|
+
{
|
5144
|
+
:data => data,
|
5145
|
+
:columns => [
|
5146
|
+
{ :header => 'Product' },
|
5147
|
+
{ :header => 'Quarter 1' },
|
5148
|
+
{ :header => 'Quarter 2' },
|
5149
|
+
{ :header => 'Quarter 3' },
|
5150
|
+
{ :header => 'Quarter 4' },
|
5151
|
+
{
|
5152
|
+
:header => 'Year',
|
5153
|
+
:formula => '=SUM(Table8[@[Quarter 1]:[Quarter 4]])'
|
5154
|
+
}
|
5155
|
+
]
|
5156
|
+
}
|
5157
|
+
)
|
4704
5158
|
|
4705
5159
|
|
4706
5160
|
###############################################################################
|
4707
5161
|
#
|
4708
5162
|
# Example 9.
|
4709
5163
|
#
|
4710
|
-
caption = 'Table with totals row (but no caption or totals).'
|
5164
|
+
caption = 'Table with totals row (but no caption or totals).'
|
4711
5165
|
|
4712
5166
|
# Set the columns widths.
|
4713
5167
|
worksheet9.set_column('B:G', 12)
|
@@ -4717,29 +5171,29 @@ def test_tables
|
|
4717
5171
|
|
4718
5172
|
# Add a table to the worksheet.
|
4719
5173
|
worksheet9.add_table(
|
4720
|
-
|
4721
|
-
|
4722
|
-
|
4723
|
-
|
4724
|
-
|
4725
|
-
|
4726
|
-
|
4727
|
-
|
4728
|
-
|
4729
|
-
|
4730
|
-
|
4731
|
-
|
4732
|
-
|
4733
|
-
|
4734
|
-
|
4735
|
-
|
4736
|
-
|
5174
|
+
'B3:G8',
|
5175
|
+
{
|
5176
|
+
:data => data,
|
5177
|
+
:total_row => 1,
|
5178
|
+
:columns => [
|
5179
|
+
{ :header => 'Product' },
|
5180
|
+
{ :header => 'Quarter 1' },
|
5181
|
+
{ :header => 'Quarter 2' },
|
5182
|
+
{ :header => 'Quarter 3' },
|
5183
|
+
{ :header => 'Quarter 4' },
|
5184
|
+
{
|
5185
|
+
:header => 'Year',
|
5186
|
+
:formula => '=SUM(Table8[@[Quarter 1]:[Quarter 4]])'
|
5187
|
+
}
|
5188
|
+
]
|
5189
|
+
}
|
5190
|
+
)
|
4737
5191
|
|
4738
5192
|
###############################################################################
|
4739
5193
|
#
|
4740
5194
|
# Example 10.
|
4741
5195
|
#
|
4742
|
-
caption = 'Table with totals row with user captions and functions.'
|
5196
|
+
caption = 'Table with totals row with user captions and functions.'
|
4743
5197
|
|
4744
5198
|
# Set the columns widths.
|
4745
5199
|
worksheet10.set_column('B:G', 12)
|
@@ -4749,30 +5203,30 @@ def test_tables
|
|
4749
5203
|
|
4750
5204
|
# Add a table to the worksheet.
|
4751
5205
|
worksheet10.add_table(
|
4752
|
-
|
4753
|
-
|
4754
|
-
|
4755
|
-
|
4756
|
-
|
4757
|
-
|
4758
|
-
|
4759
|
-
|
4760
|
-
|
4761
|
-
|
4762
|
-
|
4763
|
-
|
4764
|
-
|
4765
|
-
|
4766
|
-
|
4767
|
-
|
4768
|
-
|
4769
|
-
|
5206
|
+
'B3:G8',
|
5207
|
+
{
|
5208
|
+
:data => data,
|
5209
|
+
:total_row => 1,
|
5210
|
+
:columns => [
|
5211
|
+
{ :header => 'Product', :total_string => 'Totals' },
|
5212
|
+
{ :header => 'Quarter 1', :total_function => 'sum' },
|
5213
|
+
{ :header => 'Quarter 2', :total_function => 'sum' },
|
5214
|
+
{ :header => 'Quarter 3', :total_function => 'sum' },
|
5215
|
+
{ :header => 'Quarter 4', :total_function => 'sum' },
|
5216
|
+
{
|
5217
|
+
:header => 'Year',
|
5218
|
+
:formula => '=SUM(Table8[@[Quarter 1]:[Quarter 4]])',
|
5219
|
+
:total_function => 'sum'
|
5220
|
+
}
|
5221
|
+
]
|
5222
|
+
}
|
5223
|
+
)
|
4770
5224
|
|
4771
5225
|
###############################################################################
|
4772
5226
|
#
|
4773
5227
|
# Example 11.
|
4774
5228
|
#
|
4775
|
-
caption = 'Table with alternative Excel style.'
|
5229
|
+
caption = 'Table with alternative Excel style.'
|
4776
5230
|
|
4777
5231
|
# Set the columns widths.
|
4778
5232
|
worksheet11.set_column('B:G', 12)
|
@@ -4782,31 +5236,31 @@ def test_tables
|
|
4782
5236
|
|
4783
5237
|
# Add a table to the worksheet.
|
4784
5238
|
worksheet11.add_table(
|
4785
|
-
|
4786
|
-
|
4787
|
-
|
4788
|
-
|
4789
|
-
|
4790
|
-
|
4791
|
-
|
4792
|
-
|
4793
|
-
|
4794
|
-
|
4795
|
-
|
4796
|
-
|
4797
|
-
|
4798
|
-
|
4799
|
-
|
4800
|
-
|
4801
|
-
|
4802
|
-
|
4803
|
-
|
5239
|
+
'B3:G8',
|
5240
|
+
{
|
5241
|
+
:data => data,
|
5242
|
+
:style => 'Table Style Light 11',
|
5243
|
+
:total_row => 1,
|
5244
|
+
:columns => [
|
5245
|
+
{ :header => 'Product', :total_string => 'Totals' },
|
5246
|
+
{ :header => 'Quarter 1', :total_function => 'sum' },
|
5247
|
+
{ :header => 'Quarter 2', :total_function => 'sum' },
|
5248
|
+
{ :header => 'Quarter 3', :total_function => 'sum' },
|
5249
|
+
{ :header => 'Quarter 4', :total_function => 'sum' },
|
5250
|
+
{
|
5251
|
+
:header => 'Year',
|
5252
|
+
:formula => '=SUM(Table8[@[Quarter 1]:[Quarter 4]])',
|
5253
|
+
:total_function => 'sum'
|
5254
|
+
}
|
5255
|
+
]
|
5256
|
+
}
|
5257
|
+
)
|
4804
5258
|
|
4805
5259
|
###############################################################################
|
4806
5260
|
#
|
4807
5261
|
# Example 12.
|
4808
5262
|
#
|
4809
|
-
caption = 'Table with
|
5263
|
+
caption = 'Table with no Excel style.'
|
4810
5264
|
|
4811
5265
|
# Set the columns widths.
|
4812
5266
|
worksheet12.set_column('B:G', 12)
|
@@ -4816,41 +5270,75 @@ def test_tables
|
|
4816
5270
|
|
4817
5271
|
# Add a table to the worksheet.
|
4818
5272
|
worksheet12.add_table(
|
4819
|
-
|
4820
|
-
|
4821
|
-
|
4822
|
-
|
4823
|
-
|
4824
|
-
|
4825
|
-
|
4826
|
-
|
4827
|
-
|
4828
|
-
|
4829
|
-
|
4830
|
-
|
4831
|
-
|
4832
|
-
|
4833
|
-
|
4834
|
-
|
4835
|
-
|
4836
|
-
|
4837
|
-
|
4838
|
-
|
4839
|
-
|
4840
|
-
|
4841
|
-
|
4842
|
-
|
4843
|
-
|
4844
|
-
|
4845
|
-
|
4846
|
-
|
4847
|
-
|
4848
|
-
|
4849
|
-
|
4850
|
-
|
4851
|
-
|
4852
|
-
|
4853
|
-
|
5273
|
+
'B3:G8',
|
5274
|
+
{
|
5275
|
+
:data => data,
|
5276
|
+
:style => 'None',
|
5277
|
+
:total_row => 1,
|
5278
|
+
:columns => [
|
5279
|
+
{ :header => 'Product', :total_string => 'Totals' },
|
5280
|
+
{ :header => 'Quarter 1', :total_function => 'sum' },
|
5281
|
+
{ :header => 'Quarter 2', :total_function => 'sum' },
|
5282
|
+
{ :header => 'Quarter 3', :total_function => 'sum' },
|
5283
|
+
{ :header => 'Quarter 4', :total_function => 'sum' },
|
5284
|
+
{
|
5285
|
+
:header => 'Year',
|
5286
|
+
:formula => '=SUM(Table12[@[Quarter 1]:[Quarter 4]])',
|
5287
|
+
:total_function => 'sum'
|
5288
|
+
}
|
5289
|
+
]
|
5290
|
+
}
|
5291
|
+
)
|
5292
|
+
|
5293
|
+
###############################################################################
|
5294
|
+
#
|
5295
|
+
# Example 13.
|
5296
|
+
#
|
5297
|
+
caption = 'Table with column formats.'
|
5298
|
+
|
5299
|
+
# Set the columns widths.
|
5300
|
+
worksheet13.set_column('B:G', 12)
|
5301
|
+
|
5302
|
+
# Write the caption.
|
5303
|
+
worksheet13.write('B1', caption)
|
5304
|
+
|
5305
|
+
# Add a table to the worksheet.
|
5306
|
+
worksheet13.add_table(
|
5307
|
+
'B3:G8',
|
5308
|
+
{
|
5309
|
+
:data => data,
|
5310
|
+
:total_row => 1,
|
5311
|
+
:columns => [
|
5312
|
+
{ :header => 'Product', :total_string => 'Totals' },
|
5313
|
+
{
|
5314
|
+
:header => 'Quarter 1',
|
5315
|
+
:total_function => 'sum',
|
5316
|
+
:format => currency_format,
|
5317
|
+
},
|
5318
|
+
{
|
5319
|
+
:header => 'Quarter 2',
|
5320
|
+
:total_function => 'sum',
|
5321
|
+
:format => currency_format,
|
5322
|
+
},
|
5323
|
+
{
|
5324
|
+
:header => 'Quarter 3',
|
5325
|
+
:total_function => 'sum',
|
5326
|
+
:format => currency_format,
|
5327
|
+
},
|
5328
|
+
{
|
5329
|
+
:header => 'Quarter 4',
|
5330
|
+
:total_function => 'sum',
|
5331
|
+
:format => currency_format,
|
5332
|
+
},
|
5333
|
+
{
|
5334
|
+
:header => 'Year',
|
5335
|
+
:formula => '=SUM(Table8[@[Quarter 1]:[Quarter 4]])',
|
5336
|
+
:total_function => 'sum',
|
5337
|
+
:format => currency_format,
|
5338
|
+
}
|
5339
|
+
]
|
5340
|
+
}
|
5341
|
+
)
|
4854
5342
|
|
4855
5343
|
workbook.close
|
4856
5344
|
store_to_tempfile
|
@@ -4864,42 +5352,42 @@ def test_sparklines1
|
|
4864
5352
|
|
4865
5353
|
# Some sample data to plot.
|
4866
5354
|
data = [
|
4867
|
-
|
4868
|
-
|
4869
|
-
|
4870
|
-
|
5355
|
+
[ -2, 2, 3, -1, 0 ],
|
5356
|
+
[ 30, 20, 33, 20, 15 ],
|
5357
|
+
[ 1, -1, -1, 1, -1 ]
|
5358
|
+
]
|
4871
5359
|
|
4872
5360
|
# Write the sample data to the worksheet.
|
4873
5361
|
worksheet.write_col('A1', data)
|
4874
5362
|
|
4875
5363
|
# Add a line sparkline (the default) with markers.
|
4876
5364
|
worksheet.add_sparkline(
|
4877
|
-
|
4878
|
-
|
4879
|
-
|
4880
|
-
|
4881
|
-
|
4882
|
-
|
5365
|
+
{
|
5366
|
+
:location => 'F1',
|
5367
|
+
:range => 'Sheet1!A1:E1',
|
5368
|
+
:markers => 1
|
5369
|
+
}
|
5370
|
+
)
|
4883
5371
|
|
4884
5372
|
# Add a column sparkline with non-default style.
|
4885
5373
|
worksheet.add_sparkline(
|
4886
|
-
|
4887
|
-
|
4888
|
-
|
4889
|
-
|
4890
|
-
|
4891
|
-
|
4892
|
-
|
5374
|
+
{
|
5375
|
+
:location => 'F2',
|
5376
|
+
:range => 'Sheet1!A2:E2',
|
5377
|
+
:type => 'column',
|
5378
|
+
:style => 12
|
5379
|
+
}
|
5380
|
+
)
|
4893
5381
|
|
4894
5382
|
# Add a win/loss sparkline with negative values highlighted.
|
4895
5383
|
worksheet.add_sparkline(
|
4896
|
-
|
4897
|
-
|
4898
|
-
|
4899
|
-
|
4900
|
-
|
4901
|
-
|
4902
|
-
|
5384
|
+
{
|
5385
|
+
:location => 'F3',
|
5386
|
+
:range => 'Sheet1!A3:E3',
|
5387
|
+
:type => 'win_loss',
|
5388
|
+
:negative_points => 1
|
5389
|
+
}
|
5390
|
+
)
|
4903
5391
|
|
4904
5392
|
workbook.close
|
4905
5393
|
store_to_tempfile
|
@@ -4928,11 +5416,11 @@ def test_sparklines2
|
|
4928
5416
|
str = 'A default "line" sparkline.'
|
4929
5417
|
|
4930
5418
|
worksheet1.add_sparkline(
|
4931
|
-
|
4932
|
-
|
4933
|
-
|
4934
|
-
|
4935
|
-
|
5419
|
+
{
|
5420
|
+
:location => 'A2',
|
5421
|
+
:range => 'Sheet2!A1:J1'
|
5422
|
+
}
|
5423
|
+
)
|
4936
5424
|
|
4937
5425
|
worksheet1.write(row, 1, str)
|
4938
5426
|
row += 1
|
@@ -4942,12 +5430,12 @@ def test_sparklines2
|
|
4942
5430
|
str = 'A default "column" sparkline.'
|
4943
5431
|
|
4944
5432
|
worksheet1.add_sparkline(
|
4945
|
-
|
4946
|
-
|
4947
|
-
|
4948
|
-
|
4949
|
-
|
4950
|
-
|
5433
|
+
{
|
5434
|
+
:location => 'A3',
|
5435
|
+
:range => 'Sheet2!A2:J2',
|
5436
|
+
:type => 'column'
|
5437
|
+
}
|
5438
|
+
)
|
4951
5439
|
|
4952
5440
|
worksheet1.write(row, 1, str)
|
4953
5441
|
row += 1
|
@@ -4957,12 +5445,12 @@ def test_sparklines2
|
|
4957
5445
|
str = 'A default "win/loss" sparkline.'
|
4958
5446
|
|
4959
5447
|
worksheet1.add_sparkline(
|
4960
|
-
|
4961
|
-
|
4962
|
-
|
4963
|
-
|
4964
|
-
|
4965
|
-
|
5448
|
+
{
|
5449
|
+
:location => 'A4',
|
5450
|
+
:range => 'Sheet2!A3:J3',
|
5451
|
+
:type => 'win_loss'
|
5452
|
+
}
|
5453
|
+
)
|
4966
5454
|
|
4967
5455
|
worksheet1.write(row, 1, str)
|
4968
5456
|
row += 2
|
@@ -4972,12 +5460,12 @@ def test_sparklines2
|
|
4972
5460
|
str = 'Line with markers.'
|
4973
5461
|
|
4974
5462
|
worksheet1.add_sparkline(
|
4975
|
-
|
4976
|
-
|
4977
|
-
|
4978
|
-
|
4979
|
-
|
4980
|
-
|
5463
|
+
{
|
5464
|
+
:location => 'A6',
|
5465
|
+
:range => 'Sheet2!A1:J1',
|
5466
|
+
:markers => 1
|
5467
|
+
}
|
5468
|
+
)
|
4981
5469
|
|
4982
5470
|
worksheet1.write(row, 1, str)
|
4983
5471
|
row += 1
|
@@ -4987,13 +5475,13 @@ def test_sparklines2
|
|
4987
5475
|
str = 'Line with high and low points.'
|
4988
5476
|
|
4989
5477
|
worksheet1.add_sparkline(
|
4990
|
-
|
4991
|
-
|
4992
|
-
|
4993
|
-
|
4994
|
-
|
4995
|
-
|
4996
|
-
|
5478
|
+
{
|
5479
|
+
:location => 'A7',
|
5480
|
+
:range => 'Sheet2!A1:J1',
|
5481
|
+
:high_point => 1,
|
5482
|
+
:low_point => 1
|
5483
|
+
}
|
5484
|
+
)
|
4997
5485
|
|
4998
5486
|
worksheet1.write(row, 1, str)
|
4999
5487
|
row += 1
|
@@ -5003,13 +5491,13 @@ def test_sparklines2
|
|
5003
5491
|
str = 'Line with first and last point markers.'
|
5004
5492
|
|
5005
5493
|
worksheet1.add_sparkline(
|
5006
|
-
|
5007
|
-
|
5008
|
-
|
5009
|
-
|
5010
|
-
|
5011
|
-
|
5012
|
-
|
5494
|
+
{
|
5495
|
+
:location => 'A8',
|
5496
|
+
:range => 'Sheet2!A1:J1',
|
5497
|
+
:first_point => 1,
|
5498
|
+
:last_point => 1
|
5499
|
+
}
|
5500
|
+
)
|
5013
5501
|
|
5014
5502
|
worksheet1.write(row, 1, str)
|
5015
5503
|
row += 1
|
@@ -5019,12 +5507,12 @@ def test_sparklines2
|
|
5019
5507
|
str = 'Line with negative point markers.'
|
5020
5508
|
|
5021
5509
|
worksheet1.add_sparkline(
|
5022
|
-
|
5023
|
-
|
5024
|
-
|
5025
|
-
|
5026
|
-
|
5027
|
-
|
5510
|
+
{
|
5511
|
+
:location => 'A9',
|
5512
|
+
:range => 'Sheet2!A1:J1',
|
5513
|
+
:negative_points => 1
|
5514
|
+
}
|
5515
|
+
)
|
5028
5516
|
|
5029
5517
|
worksheet1.write(row, 1, str)
|
5030
5518
|
row += 1
|
@@ -5034,12 +5522,12 @@ def test_sparklines2
|
|
5034
5522
|
str = 'Line with axis.'
|
5035
5523
|
|
5036
5524
|
worksheet1.add_sparkline(
|
5037
|
-
|
5038
|
-
|
5039
|
-
|
5040
|
-
|
5041
|
-
|
5042
|
-
|
5525
|
+
{
|
5526
|
+
:location => 'A10',
|
5527
|
+
:range => 'Sheet2!A1:J1',
|
5528
|
+
:axis => 1
|
5529
|
+
}
|
5530
|
+
)
|
5043
5531
|
|
5044
5532
|
worksheet1.write(row, 1, str)
|
5045
5533
|
row += 2
|
@@ -5049,12 +5537,12 @@ def test_sparklines2
|
|
5049
5537
|
str = 'Column with default style (1).'
|
5050
5538
|
|
5051
5539
|
worksheet1.add_sparkline(
|
5052
|
-
|
5053
|
-
|
5054
|
-
|
5055
|
-
|
5056
|
-
|
5057
|
-
|
5540
|
+
{
|
5541
|
+
:location => 'A12',
|
5542
|
+
:range => 'Sheet2!A2:J2',
|
5543
|
+
:type => 'column'
|
5544
|
+
}
|
5545
|
+
)
|
5058
5546
|
|
5059
5547
|
worksheet1.write(row, 1, str)
|
5060
5548
|
row += 1
|
@@ -5064,13 +5552,13 @@ def test_sparklines2
|
|
5064
5552
|
str = 'Column with style 2.'
|
5065
5553
|
|
5066
5554
|
worksheet1.add_sparkline(
|
5067
|
-
|
5068
|
-
|
5069
|
-
|
5070
|
-
|
5071
|
-
|
5072
|
-
|
5073
|
-
|
5555
|
+
{
|
5556
|
+
:location => 'A13',
|
5557
|
+
:range => 'Sheet2!A2:J2',
|
5558
|
+
:type => 'column',
|
5559
|
+
:style => 2
|
5560
|
+
}
|
5561
|
+
)
|
5074
5562
|
|
5075
5563
|
worksheet1.write(row, 1, str)
|
5076
5564
|
row += 1
|
@@ -5080,13 +5568,13 @@ def test_sparklines2
|
|
5080
5568
|
str = 'Column with style 3.'
|
5081
5569
|
|
5082
5570
|
worksheet1.add_sparkline(
|
5083
|
-
|
5084
|
-
|
5085
|
-
|
5086
|
-
|
5087
|
-
|
5088
|
-
|
5089
|
-
|
5571
|
+
{
|
5572
|
+
:location => 'A14',
|
5573
|
+
:range => 'Sheet2!A2:J2',
|
5574
|
+
:type => 'column',
|
5575
|
+
:style => 3
|
5576
|
+
}
|
5577
|
+
)
|
5090
5578
|
|
5091
5579
|
worksheet1.write(row, 1, str)
|
5092
5580
|
row += 1
|
@@ -5096,13 +5584,13 @@ def test_sparklines2
|
|
5096
5584
|
str = 'Column with style 4.'
|
5097
5585
|
|
5098
5586
|
worksheet1.add_sparkline(
|
5099
|
-
|
5100
|
-
|
5101
|
-
|
5102
|
-
|
5103
|
-
|
5104
|
-
|
5105
|
-
|
5587
|
+
{
|
5588
|
+
:location => 'A15',
|
5589
|
+
:range => 'Sheet2!A2:J2',
|
5590
|
+
:type => 'column',
|
5591
|
+
:style => 4
|
5592
|
+
}
|
5593
|
+
)
|
5106
5594
|
|
5107
5595
|
worksheet1.write(row, 1, str)
|
5108
5596
|
row += 1
|
@@ -5112,13 +5600,13 @@ def test_sparklines2
|
|
5112
5600
|
str = 'Column with style 5.'
|
5113
5601
|
|
5114
5602
|
worksheet1.add_sparkline(
|
5115
|
-
|
5116
|
-
|
5117
|
-
|
5118
|
-
|
5119
|
-
|
5120
|
-
|
5121
|
-
|
5603
|
+
{
|
5604
|
+
:location => 'A16',
|
5605
|
+
:range => 'Sheet2!A2:J2',
|
5606
|
+
:type => 'column',
|
5607
|
+
:style => 5
|
5608
|
+
}
|
5609
|
+
)
|
5122
5610
|
|
5123
5611
|
worksheet1.write(row, 1, str)
|
5124
5612
|
row += 1
|
@@ -5128,13 +5616,13 @@ def test_sparklines2
|
|
5128
5616
|
str = 'Column with style 6.'
|
5129
5617
|
|
5130
5618
|
worksheet1.add_sparkline(
|
5131
|
-
|
5132
|
-
|
5133
|
-
|
5134
|
-
|
5135
|
-
|
5136
|
-
|
5137
|
-
|
5619
|
+
{
|
5620
|
+
:location => 'A17',
|
5621
|
+
:range => 'Sheet2!A2:J2',
|
5622
|
+
:type => 'column',
|
5623
|
+
:style => 6
|
5624
|
+
}
|
5625
|
+
)
|
5138
5626
|
|
5139
5627
|
worksheet1.write(row, 1, str)
|
5140
5628
|
row += 1
|
@@ -5144,13 +5632,13 @@ def test_sparklines2
|
|
5144
5632
|
str = 'Column with a user defined colour.'
|
5145
5633
|
|
5146
5634
|
worksheet1.add_sparkline(
|
5147
|
-
|
5148
|
-
|
5149
|
-
|
5150
|
-
|
5151
|
-
|
5152
|
-
|
5153
|
-
|
5635
|
+
{
|
5636
|
+
:location => 'A18',
|
5637
|
+
:range => 'Sheet2!A2:J2',
|
5638
|
+
:type => 'column',
|
5639
|
+
:series_color => '#E965E0'
|
5640
|
+
}
|
5641
|
+
)
|
5154
5642
|
|
5155
5643
|
worksheet1.write(row, 1, str)
|
5156
5644
|
row += 2
|
@@ -5160,12 +5648,12 @@ def test_sparklines2
|
|
5160
5648
|
str = 'A win/loss sparkline.'
|
5161
5649
|
|
5162
5650
|
worksheet1.add_sparkline(
|
5163
|
-
|
5164
|
-
|
5165
|
-
|
5166
|
-
|
5167
|
-
|
5168
|
-
|
5651
|
+
{
|
5652
|
+
:location => 'A20',
|
5653
|
+
:range => 'Sheet2!A3:J3',
|
5654
|
+
:type => 'win_loss'
|
5655
|
+
}
|
5656
|
+
)
|
5169
5657
|
|
5170
5658
|
worksheet1.write(row, 1, str)
|
5171
5659
|
row += 1
|
@@ -5175,13 +5663,13 @@ def test_sparklines2
|
|
5175
5663
|
str = 'A win/loss sparkline with negative points highlighted.'
|
5176
5664
|
|
5177
5665
|
worksheet1.add_sparkline(
|
5178
|
-
|
5179
|
-
|
5180
|
-
|
5181
|
-
|
5182
|
-
|
5183
|
-
|
5184
|
-
|
5666
|
+
{
|
5667
|
+
:location => 'A21',
|
5668
|
+
:range => 'Sheet2!A3:J3',
|
5669
|
+
:type => 'win_loss',
|
5670
|
+
:negative_points => 1
|
5671
|
+
}
|
5672
|
+
)
|
5185
5673
|
|
5186
5674
|
worksheet1.write(row, 1, str)
|
5187
5675
|
row += 2
|
@@ -5191,13 +5679,13 @@ def test_sparklines2
|
|
5191
5679
|
str = 'A left to right column (the default).'
|
5192
5680
|
|
5193
5681
|
worksheet1.add_sparkline(
|
5194
|
-
|
5195
|
-
|
5196
|
-
|
5197
|
-
|
5198
|
-
|
5199
|
-
|
5200
|
-
|
5682
|
+
{
|
5683
|
+
:location => 'A23',
|
5684
|
+
:range => 'Sheet2!A4:J4',
|
5685
|
+
:type => 'column',
|
5686
|
+
:style => 20
|
5687
|
+
}
|
5688
|
+
)
|
5201
5689
|
|
5202
5690
|
worksheet1.write(row, 1, str)
|
5203
5691
|
row += 1
|
@@ -5207,14 +5695,14 @@ def test_sparklines2
|
|
5207
5695
|
str = 'A right to left column.'
|
5208
5696
|
|
5209
5697
|
worksheet1.add_sparkline(
|
5210
|
-
|
5211
|
-
|
5212
|
-
|
5213
|
-
|
5214
|
-
|
5215
|
-
|
5216
|
-
|
5217
|
-
|
5698
|
+
{
|
5699
|
+
:location => 'A24',
|
5700
|
+
:range => 'Sheet2!A4:J4',
|
5701
|
+
:type => 'column',
|
5702
|
+
:style => 20,
|
5703
|
+
:reverse => 1
|
5704
|
+
}
|
5705
|
+
)
|
5218
5706
|
|
5219
5707
|
worksheet1.write(row, 1, str)
|
5220
5708
|
row += 1
|
@@ -5224,13 +5712,13 @@ def test_sparklines2
|
|
5224
5712
|
str = 'Sparkline and text in one cell.'
|
5225
5713
|
|
5226
5714
|
worksheet1.add_sparkline(
|
5227
|
-
|
5228
|
-
|
5229
|
-
|
5230
|
-
|
5231
|
-
|
5232
|
-
|
5233
|
-
|
5715
|
+
{
|
5716
|
+
:location => 'A25',
|
5717
|
+
:range => 'Sheet2!A4:J4',
|
5718
|
+
:type => 'column',
|
5719
|
+
:style => 20
|
5720
|
+
}
|
5721
|
+
)
|
5234
5722
|
|
5235
5723
|
worksheet1.write(row, 0, 'Growth')
|
5236
5724
|
worksheet1.write(row, 1, str)
|
@@ -5241,12 +5729,12 @@ def test_sparklines2
|
|
5241
5729
|
str = 'A grouped sparkline. Changes are applied to all three.'
|
5242
5730
|
|
5243
5731
|
worksheet1.add_sparkline(
|
5244
|
-
|
5245
|
-
|
5246
|
-
|
5247
|
-
|
5248
|
-
|
5249
|
-
|
5732
|
+
{
|
5733
|
+
:location => [ 'A27', 'A28', 'A29' ],
|
5734
|
+
:range => [ 'Sheet2!A5:J5', 'Sheet2!A6:J6', 'Sheet2!A7:J7' ],
|
5735
|
+
:markers => 1
|
5736
|
+
}
|
5737
|
+
)
|
5250
5738
|
|
5251
5739
|
worksheet1.write(row, 1, str)
|
5252
5740
|
row += 1
|
@@ -5258,23 +5746,23 @@ def test_sparklines2
|
|
5258
5746
|
worksheet2.set_column('A:J', 11)
|
5259
5747
|
|
5260
5748
|
data = [
|
5261
|
-
|
5262
|
-
|
5749
|
+
# Simple line data.
|
5750
|
+
[ -2, 2, 3, -1, 0, -2, 3, 2, 1, 0 ],
|
5263
5751
|
|
5264
|
-
|
5265
|
-
|
5752
|
+
# Simple column data.
|
5753
|
+
[ 30, 20, 33, 20, 15, 5, 5, 15, 10, 15 ],
|
5266
5754
|
|
5267
|
-
|
5268
|
-
|
5755
|
+
# Simple win/loss data.
|
5756
|
+
[ 1, 1, -1, -1, 1, -1, 1, 1, 1, -1 ],
|
5269
5757
|
|
5270
|
-
|
5271
|
-
|
5758
|
+
# Unbalanced histogram.
|
5759
|
+
[ 5, 6, 7, 10, 15, 20, 30, 50, 70, 100 ],
|
5272
5760
|
|
5273
|
-
|
5274
|
-
|
5275
|
-
|
5276
|
-
|
5277
|
-
|
5761
|
+
# Data for the grouped sparkline example.
|
5762
|
+
[ -2, 2, 3, -1, 0, -2, 3, 2, 1, 0 ],
|
5763
|
+
[ 3, -1, 0, -2, 3, 2, 1, 0, 2, 1 ],
|
5764
|
+
[ 0, -2, 3, 2, 1, 0, 1, 2, 3, 1 ]
|
5765
|
+
]
|
5278
5766
|
|
5279
5767
|
# Write the sample data to the worksheet.
|
5280
5768
|
worksheet2.write_col('A1', data)
|
@@ -5339,10 +5827,10 @@ def test_chart_data_table
|
|
5339
5827
|
# Add the worksheet data that the charts will refer to.
|
5340
5828
|
headings = [ 'Number', 'Batch 1', 'Batch 2' ]
|
5341
5829
|
data = [
|
5342
|
-
|
5343
|
-
|
5344
|
-
|
5345
|
-
|
5830
|
+
[ 2, 3, 4, 5, 6, 7 ],
|
5831
|
+
[ 10, 40, 50, 20, 10, 50 ],
|
5832
|
+
[ 30, 60, 70, 50, 40, 30 ]
|
5833
|
+
]
|
5346
5834
|
|
5347
5835
|
worksheet.write('A1', headings, bold)
|
5348
5836
|
worksheet.write('A2', data)
|
@@ -5352,18 +5840,18 @@ def test_chart_data_table
|
|
5352
5840
|
|
5353
5841
|
# Configure the first series.
|
5354
5842
|
chart1.add_series(
|
5355
|
-
|
5356
|
-
|
5357
|
-
|
5358
|
-
|
5843
|
+
:name => '=Sheet1!$B$1',
|
5844
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
5845
|
+
:values => '=Sheet1!$B$2:$B$7'
|
5846
|
+
)
|
5359
5847
|
|
5360
5848
|
# Configure second series. Note alternative use of array ref to define
|
5361
5849
|
# ranges: [ sheetname, row_start, row_end, col_start, col_end ].
|
5362
5850
|
chart1.add_series(
|
5363
|
-
|
5364
|
-
|
5365
|
-
|
5366
|
-
|
5851
|
+
:name => '=Sheet1!$C$1',
|
5852
|
+
:categories => [ 'Sheet1', 1, 6, 0, 0 ],
|
5853
|
+
:values => [ 'Sheet1', 1, 6, 2, 2 ]
|
5854
|
+
)
|
5367
5855
|
|
5368
5856
|
# Add a chart title and some axis labels.
|
5369
5857
|
chart1.set_title(:name => 'Chart with Data Table')
|
@@ -5383,18 +5871,18 @@ def test_chart_data_table
|
|
5383
5871
|
|
5384
5872
|
# Configure the first series.
|
5385
5873
|
chart2.add_series(
|
5386
|
-
|
5387
|
-
|
5388
|
-
|
5389
|
-
|
5874
|
+
:name => '=Sheet1!$B$1',
|
5875
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
5876
|
+
:values => '=Sheet1!$B$2:$B$7'
|
5877
|
+
)
|
5390
5878
|
|
5391
5879
|
# Configure second series. Note alternative use of array ref to define
|
5392
5880
|
# ranges: [ sheetname, row_start, row_end, col_start, col_end ].
|
5393
5881
|
chart2.add_series(
|
5394
|
-
|
5395
|
-
|
5396
|
-
|
5397
|
-
|
5882
|
+
:name => '=Sheet1!$C$1',
|
5883
|
+
:categories => [ 'Sheet1', 1, 6, 0, 0 ],
|
5884
|
+
:values => [ 'Sheet1', 1, 6, 2, 2 ]
|
5885
|
+
)
|
5398
5886
|
|
5399
5887
|
# Add a chart title and some axis labels.
|
5400
5888
|
chart2.set_title(:name => 'Data Table with legend keys')
|
@@ -5424,10 +5912,10 @@ def test_chart_data_tools
|
|
5424
5912
|
# Add the worksheet data that the charts will refer to.
|
5425
5913
|
headings = [ 'Number', 'Data 1', 'Data 2' ]
|
5426
5914
|
data = [
|
5427
|
-
|
5428
|
-
|
5429
|
-
|
5430
|
-
|
5915
|
+
[ 2, 3, 4, 5, 6, 7 ],
|
5916
|
+
[ 10, 40, 50, 20, 10, 50 ],
|
5917
|
+
[ 30, 60, 70, 50, 40, 30 ]
|
5918
|
+
]
|
5431
5919
|
|
5432
5920
|
worksheet.write('A1', headings, bold)
|
5433
5921
|
worksheet.write('A2', data)
|
@@ -5443,20 +5931,20 @@ def test_chart_data_tools
|
|
5443
5931
|
|
5444
5932
|
# Configure the first series with a polynomial trendline.
|
5445
5933
|
chart1.add_series(
|
5446
|
-
|
5447
|
-
|
5448
|
-
|
5449
|
-
|
5450
|
-
|
5451
|
-
|
5452
|
-
|
5934
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
5935
|
+
:values => '=Sheet1!$B$2:$B$7',
|
5936
|
+
:trendline => {
|
5937
|
+
:type => 'polynomial',
|
5938
|
+
:order => 3,
|
5939
|
+
}
|
5940
|
+
)
|
5453
5941
|
|
5454
5942
|
# Configure the second series with a moving average trendline.
|
5455
5943
|
chart1.add_series(
|
5456
|
-
|
5457
|
-
|
5458
|
-
|
5459
|
-
|
5944
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
5945
|
+
:values => '=Sheet1!$C$2:$C$7',
|
5946
|
+
:trendline => { :type => 'linear' }
|
5947
|
+
)
|
5460
5948
|
|
5461
5949
|
# Add a chart title. and some axis labels.
|
5462
5950
|
chart1.set_title(:name => 'Chart with Trendlines')
|
@@ -5474,17 +5962,17 @@ def test_chart_data_tools
|
|
5474
5962
|
|
5475
5963
|
# Configure the first series.
|
5476
5964
|
chart2.add_series(
|
5477
|
-
|
5478
|
-
|
5479
|
-
|
5480
|
-
|
5481
|
-
|
5965
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
5966
|
+
:values => '=Sheet1!$B$2:$B$7',
|
5967
|
+
:data_labels => { :value => 1 },
|
5968
|
+
:marker => { :type => 'automatic' }
|
5969
|
+
)
|
5482
5970
|
|
5483
5971
|
# Configure the second series.
|
5484
5972
|
chart2.add_series(
|
5485
|
-
|
5486
|
-
|
5487
|
-
|
5973
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
5974
|
+
:values => '=Sheet1!$C$2:$C$7'
|
5975
|
+
)
|
5488
5976
|
|
5489
5977
|
# Add a chart title. and some axis labels.
|
5490
5978
|
chart2.set_title(:name => 'Chart with Data Labels and Markers')
|
@@ -5502,16 +5990,16 @@ def test_chart_data_tools
|
|
5502
5990
|
|
5503
5991
|
# Configure the first series.
|
5504
5992
|
chart3.add_series(
|
5505
|
-
|
5506
|
-
|
5507
|
-
|
5508
|
-
|
5993
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
5994
|
+
:values => '=Sheet1!$B$2:$B$7',
|
5995
|
+
:y_error_bars => { :type => 'standard_error' }
|
5996
|
+
)
|
5509
5997
|
|
5510
5998
|
# Configure the second series.
|
5511
5999
|
chart3.add_series(
|
5512
|
-
|
5513
|
-
|
5514
|
-
|
6000
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
6001
|
+
:values => '=Sheet1!$C$2:$C$7'
|
6002
|
+
)
|
5515
6003
|
|
5516
6004
|
# Add a chart title. and some axis labels.
|
5517
6005
|
chart3.set_title(:name => 'Chart with Error Bars')
|
@@ -5532,15 +6020,15 @@ def test_chart_data_tools
|
|
5532
6020
|
|
5533
6021
|
# Configure the first series.
|
5534
6022
|
chart4.add_series(
|
5535
|
-
|
5536
|
-
|
5537
|
-
|
6023
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
6024
|
+
:values => '=Sheet1!$B$2:$B$7'
|
6025
|
+
)
|
5538
6026
|
|
5539
6027
|
# Configure the second series.
|
5540
6028
|
chart4.add_series(
|
5541
|
-
|
5542
|
-
|
5543
|
-
|
6029
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
6030
|
+
:values => '=Sheet1!$C$2:$C$7'
|
6031
|
+
)
|
5544
6032
|
|
5545
6033
|
# Add a chart title. and some axis labels.
|
5546
6034
|
chart4.set_title(:name => 'Chart with Up-Down Bars')
|
@@ -5561,15 +6049,15 @@ def test_chart_data_tools
|
|
5561
6049
|
|
5562
6050
|
# Configure the first series.
|
5563
6051
|
chart5.add_series(
|
5564
|
-
|
5565
|
-
|
5566
|
-
|
6052
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
6053
|
+
:values => '=Sheet1!$B$2:$B$7'
|
6054
|
+
)
|
5567
6055
|
|
5568
6056
|
# Configure the second series.
|
5569
6057
|
chart5.add_series(
|
5570
|
-
|
5571
|
-
|
5572
|
-
|
6058
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
6059
|
+
:values => '=Sheet1!$C$2:$C$7'
|
6060
|
+
)
|
5573
6061
|
|
5574
6062
|
# Add a chart title. and some axis labels.
|
5575
6063
|
chart5.set_title(:name => 'Chart with High-Low Lines')
|
@@ -5590,15 +6078,15 @@ def test_chart_data_tools
|
|
5590
6078
|
|
5591
6079
|
# Configure the first series.
|
5592
6080
|
chart6.add_series(
|
5593
|
-
|
5594
|
-
|
5595
|
-
|
6081
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
6082
|
+
:values => '=Sheet1!$B$2:$B$7'
|
6083
|
+
)
|
5596
6084
|
|
5597
6085
|
# Configure the second series.
|
5598
6086
|
chart6.add_series(
|
5599
|
-
|
5600
|
-
|
5601
|
-
|
6087
|
+
:categories => '=Sheet1!$A$2:$A$7',
|
6088
|
+
:values => '=Sheet1!$C$2:$C$7'
|
6089
|
+
)
|
5602
6090
|
|
5603
6091
|
# Add a chart title. and some axis labels.
|
5604
6092
|
chart6.set_title(:name => 'Chart with Drop Lines')
|