write_xlsx 0.0.4 → 0.51.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.
- data/Gemfile +4 -2
- data/README.rdoc +14 -12
- data/Rakefile +8 -8
- data/VERSION +1 -1
- data/examples/chart_secondary_axis.rb +55 -0
- data/examples/date_time.rb +84 -0
- data/examples/panes.rb +108 -0
- data/examples/regions.rb +49 -0
- data/examples/shape1.rb +36 -0
- data/examples/shape2.rb +53 -0
- data/examples/shape3.rb +32 -0
- data/examples/shape4.rb +55 -0
- data/examples/shape5.rb +48 -0
- data/examples/shape6.rb +48 -0
- data/examples/shape7.rb +74 -0
- data/examples/shape8.rb +73 -0
- data/examples/shape_all.rb +241 -0
- data/examples/stats.rb +69 -0
- data/examples/stats_ext.rb +77 -0
- data/examples/stocks.rb +73 -0
- data/examples/tables.rb +360 -0
- data/lib/write_xlsx.rb +25 -1
- data/lib/write_xlsx/chart.rb +656 -260
- data/lib/write_xlsx/chart/area.rb +41 -7
- data/lib/write_xlsx/chart/bar.rb +16 -17
- data/lib/write_xlsx/chart/column.rb +5 -15
- data/lib/write_xlsx/chart/line.rb +15 -6
- data/lib/write_xlsx/chart/pie.rb +7 -21
- data/lib/write_xlsx/chart/scatter.rb +90 -20
- data/lib/write_xlsx/chart/stock.rb +24 -43
- data/lib/write_xlsx/chartsheet.rb +29 -11
- data/lib/write_xlsx/drawing.rb +354 -35
- data/lib/write_xlsx/format.rb +72 -21
- data/lib/write_xlsx/package/app.rb +2 -5
- data/lib/write_xlsx/package/comments.rb +5 -1
- data/lib/write_xlsx/package/content_types.rb +10 -0
- data/lib/write_xlsx/package/packager.rb +41 -7
- data/lib/write_xlsx/package/relationships.rb +1 -1
- data/lib/write_xlsx/package/shared_strings.rb +36 -8
- data/lib/write_xlsx/package/styles.rb +12 -9
- data/lib/write_xlsx/package/table.rb +194 -0
- data/lib/write_xlsx/package/vml.rb +26 -27
- data/lib/write_xlsx/package/xml_writer_simple.rb +25 -4
- data/lib/write_xlsx/shape.rb +172 -0
- data/lib/write_xlsx/utility.rb +20 -0
- data/lib/write_xlsx/workbook.rb +499 -141
- data/lib/write_xlsx/worksheet.rb +1162 -153
- data/test/chart/test_add_series.rb +43 -4
- data/test/chart/test_write_d_lbls.rb +274 -0
- data/test/chart/test_write_major_gridlines.rb +1 -1
- data/test/chartsheet/test_chartsheet01.rb +31 -0
- data/test/drawing/test_drawing_shape_01.rb +68 -0
- data/test/drawing/test_drawing_shape_02.rb +73 -0
- data/test/drawing/test_drawing_shape_03.rb +38 -0
- data/test/drawing/test_drawing_shape_04.rb +121 -0
- data/test/drawing/test_drawing_shape_05.rb +45 -0
- data/test/drawing/test_drawing_shape_06.rb +42 -0
- data/test/drawing/test_drawing_shape_07.rb +47 -0
- data/test/drawing/test_write_a_graphic_frame_locks.rb +18 -0
- data/test/drawing/test_write_c_chart.rb +18 -0
- data/test/drawing/test_write_c_nv_graphic_frame_pr.rb +28 -0
- data/test/drawing/test_write_c_nv_pr.rb +18 -0
- data/test/drawing/test_write_col.rb +18 -0
- data/test/drawing/test_write_col_off.rb +18 -0
- data/test/drawing/test_write_ext.rb +18 -0
- data/test/drawing/test_write_pos.rb +18 -0
- data/test/drawing/test_write_row.rb +18 -0
- data/test/drawing/test_write_row_off.rb +18 -0
- data/test/drawing/test_write_xfrm_extension.rb +18 -0
- data/test/drawing/test_write_xfrm_offset.rb +18 -0
- data/test/helper.rb +93 -50
- data/test/package/shared_strings/test_write_si.rb +10 -1
- data/test/package/table/test_table01.rb +42 -0
- data/test/package/table/test_table02.rb +44 -0
- data/test/package/table/test_table03.rb +48 -0
- data/test/package/table/test_table04.rb +46 -0
- data/test/package/table/test_table05.rb +46 -0
- data/test/package/table/test_table06.rb +52 -0
- data/test/package/table/test_table07.rb +47 -0
- data/test/package/table/test_table08.rb +53 -0
- data/test/package/table/test_table09.rb +65 -0
- data/test/package/table/test_table10.rb +45 -0
- data/test/package/table/test_table11.rb +60 -0
- data/test/package/table/test_table12.rb +60 -0
- data/test/package/table/test_write_auto_filter.rb +16 -0
- data/test/package/table/test_write_table_column.rb +15 -0
- data/test/package/table/test_write_table_style_info.rb +25 -0
- data/test/package/table/test_write_xml_declaration.rb +15 -0
- data/test/perl_output/a_simple.xlsx +0 -0
- data/test/perl_output/array_formula.xlsx +0 -0
- data/test/perl_output/chart_secondary_axis.xlsx +0 -0
- data/test/perl_output/data_validate.xlsx +0 -0
- data/test/perl_output/date_time.xlsx +0 -0
- data/test/perl_output/demo.xlsx +0 -0
- data/test/perl_output/formats.xlsx +0 -0
- data/test/perl_output/headers.xlsx +0 -0
- data/test/perl_output/outline_collapsed.xlsx +0 -0
- data/test/perl_output/panes.xlsx +0 -0
- data/test/perl_output/regions.xlsx +0 -0
- data/test/perl_output/shape1.xlsx +0 -0
- data/test/perl_output/shape2.xlsx +0 -0
- data/test/perl_output/shape3.xlsx +0 -0
- data/test/perl_output/shape4.xlsx +0 -0
- data/test/perl_output/shape5.xlsx +0 -0
- data/test/perl_output/shape6.xlsx +0 -0
- data/test/perl_output/shape7.xlsx +0 -0
- data/test/perl_output/shape8.xlsx +0 -0
- data/test/perl_output/shape_all.xlsx +0 -0
- data/test/perl_output/stats.xlsx +0 -0
- data/test/perl_output/stats_ext.xlsx +0 -0
- data/test/perl_output/stocks.xlsx +0 -0
- data/test/perl_output/tables.xlsx +0 -0
- data/test/regression/images/blue.jpg +0 -0
- data/test/regression/images/blue.png +0 -0
- data/test/regression/images/grey.jpg +0 -0
- data/test/regression/images/grey.png +0 -0
- data/test/regression/images/red.bmp +0 -0
- data/test/regression/images/red.jpg +0 -0
- data/test/regression/images/red.png +0 -0
- data/test/regression/images/yellow.jpg +0 -0
- data/test/regression/images/yellow.png +0 -0
- data/test/regression/test_array_formula01.rb +31 -0
- data/test/regression/test_array_formula02.rb +32 -0
- data/test/regression/test_autofilter00.rb +84 -0
- data/test/regression/test_autofilter01.rb +86 -0
- data/test/regression/test_autofilter02.rb +104 -0
- data/test/regression/test_autofilter03.rb +104 -0
- data/test/regression/test_autofilter04.rb +107 -0
- data/test/regression/test_autofilter05.rb +108 -0
- data/test/regression/test_autofilter06.rb +108 -0
- data/test/regression/test_autofilter07.rb +107 -0
- data/test/regression/test_chart_area01.rb +45 -0
- data/test/regression/test_chart_area02.rb +45 -0
- data/test/regression/test_chart_area03.rb +45 -0
- data/test/regression/test_chart_axis01.rb +46 -0
- data/test/regression/test_chart_axis02.rb +46 -0
- data/test/regression/test_chart_axis03.rb +68 -0
- data/test/regression/test_chart_axis04.rb +53 -0
- data/test/regression/test_chart_axis05.rb +48 -0
- data/test/regression/test_chart_axis06.rb +50 -0
- data/test/regression/test_chart_axis07.rb +54 -0
- data/test/regression/test_chart_axis08.rb +53 -0
- data/test/regression/test_chart_axis09.rb +47 -0
- data/test/regression/test_chart_axis10.rb +53 -0
- data/test/regression/test_chart_axis11.rb +47 -0
- data/test/regression/test_chart_axis12.rb +47 -0
- data/test/regression/test_chart_axis13.rb +53 -0
- data/test/regression/test_chart_axis14.rb +67 -0
- data/test/regression/test_chart_axis15.rb +48 -0
- data/test/regression/test_chart_axis16.rb +70 -0
- data/test/regression/test_chart_axis17.rb +46 -0
- data/test/regression/test_chart_axis18.rb +44 -0
- data/test/regression/test_chart_axis19.rb +46 -0
- data/test/regression/test_chart_axis20.rb +46 -0
- data/test/regression/test_chart_axis21.rb +50 -0
- data/test/regression/test_chart_bar01.rb +44 -0
- data/test/regression/test_chart_bar02.rb +55 -0
- data/test/regression/test_chart_bar03.rb +67 -0
- data/test/regression/test_chart_bar04.rb +70 -0
- data/test/regression/test_chart_bar05.rb +43 -0
- data/test/regression/test_chart_bar06.rb +50 -0
- data/test/regression/test_chart_bar07.rb +54 -0
- data/test/regression/test_chart_bar08.rb +44 -0
- data/test/regression/test_chart_bar09.rb +43 -0
- data/test/regression/test_chart_bar10.rb +47 -0
- data/test/regression/test_chart_bar11.rb +71 -0
- data/test/regression/test_chart_bar12.rb +43 -0
- data/test/regression/test_chart_bar13.rb +53 -0
- data/test/regression/test_chart_bar14.rb +63 -0
- data/test/regression/test_chart_bar15.rb +53 -0
- data/test/regression/test_chart_bar16.rb +51 -0
- data/test/regression/test_chart_bar17.rb +47 -0
- data/test/regression/test_chart_bar18.rb +58 -0
- data/test/regression/test_chart_bar19.rb +50 -0
- data/test/regression/test_chart_bar20.rb +47 -0
- data/test/regression/test_chart_bar21.rb +53 -0
- data/test/regression/test_chart_bar22.rb +68 -0
- data/test/regression/test_chart_bar23.rb +62 -0
- data/test/regression/test_chart_bar24.rb +46 -0
- data/test/regression/test_chart_blank01.rb +41 -0
- data/test/regression/test_chart_blank02.rb +41 -0
- data/test/regression/test_chart_blank03.rb +41 -0
- data/test/regression/test_chart_blank04.rb +41 -0
- data/test/regression/test_chart_blank05.rb +46 -0
- data/test/regression/test_chart_blank06.rb +41 -0
- data/test/regression/test_chart_column01.rb +43 -0
- data/test/regression/test_chart_column02.rb +45 -0
- data/test/regression/test_chart_column03.rb +45 -0
- data/test/regression/test_chart_column04.rb +45 -0
- data/test/regression/test_chart_column05.rb +39 -0
- data/test/regression/test_chart_column06.rb +46 -0
- data/test/regression/test_chart_crossing01.rb +50 -0
- data/test/regression/test_chart_crossing02.rb +48 -0
- data/test/regression/test_chart_crossing03.rb +53 -0
- data/test/regression/test_chart_crossing04.rb +53 -0
- data/test/regression/test_chart_format01.rb +44 -0
- data/test/regression/test_chart_format02.rb +45 -0
- data/test/regression/test_chart_format03.rb +46 -0
- data/test/regression/test_chart_format04.rb +45 -0
- data/test/regression/test_chart_format05.rb +45 -0
- data/test/regression/test_chart_format06.rb +52 -0
- data/test/regression/test_chart_format07.rb +57 -0
- data/test/regression/test_chart_format08.rb +52 -0
- data/test/regression/test_chart_format09.rb +56 -0
- data/test/regression/test_chart_format10.rb +59 -0
- data/test/regression/test_chart_format11.rb +63 -0
- data/test/regression/test_chart_format12.rb +60 -0
- data/test/regression/test_chart_format13.rb +52 -0
- data/test/regression/test_chart_format14.rb +56 -0
- data/test/regression/test_chart_format15.rb +54 -0
- data/test/regression/test_chart_format16.rb +57 -0
- data/test/regression/test_chart_format17.rb +40 -0
- data/test/regression/test_chart_format18.rb +44 -0
- data/test/regression/test_chart_line01.rb +39 -0
- data/test/regression/test_chart_line02.rb +45 -0
- data/test/regression/test_chart_name01.rb +46 -0
- data/test/regression/test_chart_name02.rb +58 -0
- data/test/regression/test_chart_name03.rb +58 -0
- data/test/regression/test_chart_pie01.rb +36 -0
- data/test/regression/test_chart_scatter01.rb +45 -0
- data/test/regression/test_chart_scatter02.rb +49 -0
- data/test/regression/test_chart_scatter03.rb +49 -0
- data/test/regression/test_chart_scatter04.rb +49 -0
- data/test/regression/test_chart_scatter05.rb +49 -0
- data/test/regression/test_chart_scatter06.rb +51 -0
- data/test/regression/test_chart_scatter07.rb +60 -0
- data/test/regression/test_chart_sparse01.rb +54 -0
- data/test/regression/test_chart_stock01.rb +72 -0
- data/test/regression/test_chart_stock02.rb +73 -0
- data/test/regression/test_chart_str01.rb +48 -0
- data/test/regression/test_chart_str02.rb +52 -0
- data/test/regression/test_chartsheet01.rb +46 -0
- data/test/regression/test_chartsheet02.rb +50 -0
- data/test/regression/test_chartsheet03.rb +48 -0
- data/test/regression/test_chartsheet04.rb +48 -0
- data/test/regression/test_chartsheet05.rb +48 -0
- data/test/regression/test_chartsheet06.rb +48 -0
- data/test/regression/test_chartsheet07.rb +57 -0
- data/test/regression/test_chartsheet08.rb +61 -0
- data/test/regression/test_chartsheet09.rb +52 -0
- data/test/regression/test_comment01.rb +27 -0
- data/test/regression/test_comment02.rb +28 -0
- data/test/regression/test_comment03.rb +32 -0
- data/test/regression/test_comment04.rb +37 -0
- data/test/regression/test_comment06.rb +34 -0
- data/test/regression/test_comment07.rb +36 -0
- data/test/regression/test_comment08.rb +36 -0
- data/test/regression/test_comment09.rb +32 -0
- data/test/regression/test_comment10.rb +31 -0
- data/test/regression/test_cond_format01.rb +46 -0
- data/test/regression/test_cond_format02.rb +41 -0
- data/test/regression/test_cond_format03.rb +52 -0
- data/test/regression/test_cond_format04.rb +51 -0
- data/test/regression/test_cond_format05.rb +41 -0
- data/test/regression/test_cond_format06.rb +45 -0
- data/test/regression/test_cond_format07.rb +62 -0
- data/test/regression/test_cond_format08.rb +46 -0
- data/test/regression/test_cond_format10.rb +43 -0
- data/test/regression/test_cond_format11.rb +47 -0
- data/test/regression/test_cond_format12.rb +47 -0
- data/test/regression/test_custom_colors01.rb +33 -0
- data/test/regression/test_date_1904_01.rb +36 -0
- data/test/regression/test_date_1904_02.rb +39 -0
- data/test/regression/test_defined_name01.rb +47 -0
- data/test/regression/test_escapes01.rb +37 -0
- data/test/regression/test_escapes02.rb +33 -0
- data/test/regression/test_escapes03.rb +34 -0
- data/test/regression/test_fit_to_pages01.rb +37 -0
- data/test/regression/test_fit_to_pages02.rb +37 -0
- data/test/regression/test_fit_to_pages03.rb +37 -0
- data/test/regression/test_fit_to_pages04.rb +37 -0
- data/test/regression/test_fit_to_pages05.rb +37 -0
- data/test/regression/test_format01.rb +35 -0
- data/test/regression/test_format02.rb +47 -0
- data/test/regression/test_format03.rb +31 -0
- data/test/regression/test_format04.rb +41 -0
- data/test/regression/test_gridlines01.rb +36 -0
- data/test/regression/test_hyperlink01.rb +23 -0
- data/test/regression/test_hyperlink02.rb +27 -0
- data/test/regression/test_hyperlink03.rb +32 -0
- data/test/regression/test_hyperlink04.rb +31 -0
- data/test/regression/test_hyperlink05.rb +26 -0
- data/test/regression/test_hyperlink06.rb +25 -0
- data/test/regression/test_hyperlink07.rb +24 -0
- data/test/regression/test_hyperlink08.rb +24 -0
- data/test/regression/test_hyperlink09.rb +25 -0
- data/test/regression/test_hyperlink10.rb +24 -0
- data/test/regression/test_hyperlink11.rb +24 -0
- data/test/regression/test_hyperlink12.rb +25 -0
- data/test/regression/test_hyperlink13.rb +24 -0
- data/test/regression/test_hyperlink14.rb +24 -0
- data/test/regression/test_hyperlink15.rb +26 -0
- data/test/regression/test_hyperlink16.rb +26 -0
- data/test/regression/test_hyperlink17.rb +27 -0
- data/test/regression/test_hyperlink18.rb +27 -0
- data/test/regression/test_image01.rb +23 -0
- data/test/regression/test_image02.rb +23 -0
- data/test/regression/test_image03.rb +23 -0
- data/test/regression/test_image04.rb +23 -0
- data/test/regression/test_image05.rb +26 -0
- data/test/regression/test_image06.rb +36 -0
- data/test/regression/test_image07.rb +25 -0
- data/test/regression/test_outline01.rb +86 -0
- data/test/regression/test_outline02.rb +89 -0
- data/test/regression/test_outline03.rb +59 -0
- data/test/regression/test_outline04.rb +55 -0
- data/test/regression/test_outline05.rb +90 -0
- data/test/regression/test_outline06.rb +89 -0
- data/test/regression/test_page_breaks01.rb +36 -0
- data/test/regression/test_page_breaks02.rb +36 -0
- data/test/regression/test_page_breaks03.rb +36 -0
- data/test/regression/test_page_breaks04.rb +36 -0
- data/test/regression/test_page_breaks05.rb +36 -0
- data/test/regression/test_page_breaks06.rb +37 -0
- data/test/regression/test_page_view01.rb +36 -0
- data/test/regression/test_panes01.rb +66 -0
- data/test/regression/test_print_across01.rb +37 -0
- data/test/regression/test_print_area01.rb +36 -0
- data/test/regression/test_print_area02.rb +36 -0
- data/test/regression/test_print_area03.rb +36 -0
- data/test/regression/test_print_area04.rb +36 -0
- data/test/regression/test_print_area05.rb +36 -0
- data/test/regression/test_print_area06.rb +36 -0
- data/test/regression/test_print_area07.rb +37 -0
- data/test/regression/test_print_options01.rb +36 -0
- data/test/regression/test_print_options02.rb +36 -0
- data/test/regression/test_print_options03.rb +36 -0
- data/test/regression/test_print_options04.rb +36 -0
- data/test/regression/test_print_options05.rb +39 -0
- data/test/regression/test_print_options06.rb +37 -0
- data/test/regression/test_print_scale01.rb +37 -0
- data/test/regression/test_print_scale02.rb +37 -0
- data/test/regression/test_properties01.rb +40 -0
- data/test/regression/test_repeat01.rb +36 -0
- data/test/regression/test_repeat02.rb +36 -0
- data/test/regression/test_repeat03.rb +37 -0
- data/test/regression/test_repeat04.rb +36 -0
- data/test/regression/test_repeat05.rb +43 -0
- data/test/regression/test_rich_string01.rb +28 -0
- data/test/regression/test_rich_string02.rb +28 -0
- data/test/regression/test_rich_string03.rb +28 -0
- data/test/regression/test_rich_string04.rb +28 -0
- data/test/regression/test_rich_string05.rb +30 -0
- data/test/regression/test_rich_string06.rb +27 -0
- data/test/regression/test_rich_string07.rb +33 -0
- data/test/regression/test_rich_string08.rb +29 -0
- data/test/regression/test_rich_string09.rb +31 -0
- data/test/regression/test_rich_string10.rb +30 -0
- data/test/regression/test_rich_string11.rb +29 -0
- data/test/regression/test_row_col_format01.rb +24 -0
- data/test/regression/test_row_col_format02.rb +25 -0
- data/test/regression/test_row_col_format03.rb +24 -0
- data/test/regression/test_row_col_format04.rb +25 -0
- data/test/regression/test_row_col_format05.rb +26 -0
- data/test/regression/test_row_col_format06.rb +29 -0
- data/test/regression/test_row_col_format07.rb +24 -0
- data/test/regression/test_row_col_format08.rb +34 -0
- data/test/regression/test_row_col_format09.rb +33 -0
- data/test/regression/test_row_col_format10.rb +24 -0
- data/test/regression/test_row_col_format11.rb +23 -0
- data/test/regression/test_row_col_format12.rb +23 -0
- data/test/regression/test_row_col_format13.rb +28 -0
- data/test/regression/test_row_col_format14.rb +28 -0
- data/test/regression/test_shape_connect01.rb +46 -0
- data/test/regression/test_shape_connect02.rb +42 -0
- data/test/regression/test_shape_connect03.rb +78 -0
- data/test/regression/test_shape_connect04.rb +75 -0
- data/test/regression/test_shape_scale01.rb +47 -0
- data/test/regression/test_shape_stencil01.rb +44 -0
- data/test/regression/test_shared_strings01.rb +34 -0
- data/test/regression/test_shared_strings02.rb +47 -0
- data/test/regression/test_simple01.rb +24 -0
- data/test/regression/test_simple02.rb +32 -0
- data/test/regression/test_tab_color01.rb +29 -0
- data/test/regression/test_table01.rb +27 -0
- data/test/regression/test_table02.rb +37 -0
- data/test/regression/test_table03.rb +30 -0
- data/test/regression/test_table04.rb +34 -0
- data/test/regression/test_table05.rb +38 -0
- data/test/regression/test_table06.rb +41 -0
- data/test/regression/test_table07.rb +29 -0
- data/test/regression/test_table08.rb +48 -0
- data/test/regression/test_table09.rb +65 -0
- data/test/regression/test_table10.rb +68 -0
- data/test/regression/test_table11.rb +37 -0
- data/test/regression/test_table12.rb +36 -0
- data/test/regression/test_table13.rb +51 -0
- data/test/regression/test_table14.rb +51 -0
- data/test/regression/xlsx_files/array_formula01.xlsx +0 -0
- data/test/regression/xlsx_files/array_formula02.xlsx +0 -0
- data/test/regression/xlsx_files/autofilter00.xlsx +0 -0
- data/test/regression/xlsx_files/autofilter01.xlsx +0 -0
- data/test/regression/xlsx_files/autofilter02.xlsx +0 -0
- data/test/regression/xlsx_files/autofilter03.xlsx +0 -0
- data/test/regression/xlsx_files/autofilter04.xlsx +0 -0
- data/test/regression/xlsx_files/autofilter05.xlsx +0 -0
- data/test/regression/xlsx_files/autofilter06.xlsx +0 -0
- data/test/regression/xlsx_files/autofilter07.xlsx +0 -0
- data/test/regression/xlsx_files/chart_area01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_area02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_area03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_area04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis07.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis08.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis09.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis10.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis11.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis12.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis13.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis14.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis15.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis16.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis17.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis18.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis19.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis20.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis21.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar07.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar08.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar09.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar10.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar11.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar12.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar13.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar14.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar15.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar16.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar17.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar18.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar19.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar20.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar21.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar22.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar23.xlsx +0 -0
- data/test/regression/xlsx_files/chart_bar24.xlsx +0 -0
- data/test/regression/xlsx_files/chart_blank01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_blank02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_blank03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_blank04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_blank05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_blank06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_column01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_column02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_column03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_column04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_column05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_column06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_crossing01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_crossing02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_crossing03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_crossing04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format07.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format08.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format09.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format10.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format11.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format12.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format13.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format14.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format15.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format16.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format17.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format18.xlsx +0 -0
- data/test/regression/xlsx_files/chart_line01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_line02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_name01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_name02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_name03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_pie01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_scatter01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_scatter02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_scatter03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_scatter04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_scatter05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_scatter06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_scatter07.xlsx +0 -0
- data/test/regression/xlsx_files/chart_sparse01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_stock01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_stock02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_str01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_str02.xlsx +0 -0
- data/test/regression/xlsx_files/chartsheet01.xlsx +0 -0
- data/test/regression/xlsx_files/chartsheet02.xlsx +0 -0
- data/test/regression/xlsx_files/chartsheet03.xlsx +0 -0
- data/test/regression/xlsx_files/chartsheet04.xlsx +0 -0
- data/test/regression/xlsx_files/chartsheet05.xlsx +0 -0
- data/test/regression/xlsx_files/chartsheet06.xlsx +0 -0
- data/test/regression/xlsx_files/chartsheet07.xlsx +0 -0
- data/test/regression/xlsx_files/chartsheet08.xlsx +0 -0
- data/test/regression/xlsx_files/chartsheet09.xlsx +0 -0
- data/test/regression/xlsx_files/comment01.xlsx +0 -0
- data/test/regression/xlsx_files/comment02.xlsx +0 -0
- data/test/regression/xlsx_files/comment03.xlsx +0 -0
- data/test/regression/xlsx_files/comment04.xlsx +0 -0
- data/test/regression/xlsx_files/comment05.xlsx +0 -0
- data/test/regression/xlsx_files/comment06.xlsx +0 -0
- data/test/regression/xlsx_files/comment07.xlsx +0 -0
- data/test/regression/xlsx_files/comment08.xlsx +0 -0
- data/test/regression/xlsx_files/comment09.xlsx +0 -0
- data/test/regression/xlsx_files/comment10.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format01.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format02.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format03.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format04.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format05.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format06.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format07.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format08.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format10.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format11.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format12.xlsx +0 -0
- data/test/regression/xlsx_files/custom_colors01.xlsx +0 -0
- data/test/regression/xlsx_files/date_1904_01.xlsx +0 -0
- data/test/regression/xlsx_files/date_1904_02.xlsx +0 -0
- data/test/regression/xlsx_files/defined_name01.xlsx +0 -0
- data/test/regression/xlsx_files/escapes01.xlsx +0 -0
- data/test/regression/xlsx_files/escapes02.xlsx +0 -0
- data/test/regression/xlsx_files/escapes03.xlsx +0 -0
- data/test/regression/xlsx_files/filehandle01.xlsx +0 -0
- data/test/regression/xlsx_files/fit_to_pages01.xlsx +0 -0
- data/test/regression/xlsx_files/fit_to_pages02.xlsx +0 -0
- data/test/regression/xlsx_files/fit_to_pages03.xlsx +0 -0
- data/test/regression/xlsx_files/fit_to_pages04.xlsx +0 -0
- data/test/regression/xlsx_files/fit_to_pages05.xlsx +0 -0
- data/test/regression/xlsx_files/format01.xlsx +0 -0
- data/test/regression/xlsx_files/format02.xlsx +0 -0
- data/test/regression/xlsx_files/format03.xlsx +0 -0
- data/test/regression/xlsx_files/format04.xlsx +0 -0
- data/test/regression/xlsx_files/gridlines01.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink01.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink02.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink03.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink04.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink05.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink06.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink07.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink08.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink09.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink10.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink11.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink12.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink13.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink14.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink15.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink16.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink17.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink18.xlsx +0 -0
- data/test/regression/xlsx_files/image01.xlsx +0 -0
- data/test/regression/xlsx_files/image02.xlsx +0 -0
- data/test/regression/xlsx_files/image03.xlsx +0 -0
- data/test/regression/xlsx_files/image04.xlsx +0 -0
- data/test/regression/xlsx_files/image05.xlsx +0 -0
- data/test/regression/xlsx_files/image06.xlsx +0 -0
- data/test/regression/xlsx_files/image07.xlsx +0 -0
- data/test/regression/xlsx_files/outline01.xlsx +0 -0
- data/test/regression/xlsx_files/outline02.xlsx +0 -0
- data/test/regression/xlsx_files/outline03.xlsx +0 -0
- data/test/regression/xlsx_files/outline04.xlsx +0 -0
- data/test/regression/xlsx_files/outline05.xlsx +0 -0
- data/test/regression/xlsx_files/outline06.xlsx +0 -0
- data/test/regression/xlsx_files/page_breaks01.xlsx +0 -0
- data/test/regression/xlsx_files/page_breaks02.xlsx +0 -0
- data/test/regression/xlsx_files/page_breaks03.xlsx +0 -0
- data/test/regression/xlsx_files/page_breaks04.xlsx +0 -0
- data/test/regression/xlsx_files/page_breaks05.xlsx +0 -0
- data/test/regression/xlsx_files/page_breaks06.xlsx +0 -0
- data/test/regression/xlsx_files/page_view01.xlsx +0 -0
- data/test/regression/xlsx_files/panes01.xlsx +0 -0
- data/test/regression/xlsx_files/print_across01.xlsx +0 -0
- data/test/regression/xlsx_files/print_area01.xlsx +0 -0
- data/test/regression/xlsx_files/print_area02.xlsx +0 -0
- data/test/regression/xlsx_files/print_area03.xlsx +0 -0
- data/test/regression/xlsx_files/print_area04.xlsx +0 -0
- data/test/regression/xlsx_files/print_area05.xlsx +0 -0
- data/test/regression/xlsx_files/print_area06.xlsx +0 -0
- data/test/regression/xlsx_files/print_area07.xlsx +0 -0
- data/test/regression/xlsx_files/print_options01.xlsx +0 -0
- data/test/regression/xlsx_files/print_options02.xlsx +0 -0
- data/test/regression/xlsx_files/print_options03.xlsx +0 -0
- data/test/regression/xlsx_files/print_options04.xlsx +0 -0
- data/test/regression/xlsx_files/print_options05.xlsx +0 -0
- data/test/regression/xlsx_files/print_options06.xlsx +0 -0
- data/test/regression/xlsx_files/print_scale01.xlsx +0 -0
- data/test/regression/xlsx_files/print_scale02.xlsx +0 -0
- data/test/regression/xlsx_files/properties01.xlsx +0 -0
- data/test/regression/xlsx_files/repeat01.xlsx +0 -0
- data/test/regression/xlsx_files/repeat02.xlsx +0 -0
- data/test/regression/xlsx_files/repeat03.xlsx +0 -0
- data/test/regression/xlsx_files/repeat04.xlsx +0 -0
- data/test/regression/xlsx_files/repeat05.xlsx +0 -0
- data/test/regression/xlsx_files/rich_string01.xlsx +0 -0
- data/test/regression/xlsx_files/rich_string02.xlsx +0 -0
- data/test/regression/xlsx_files/rich_string03.xlsx +0 -0
- data/test/regression/xlsx_files/rich_string04.xlsx +0 -0
- data/test/regression/xlsx_files/rich_string05.xlsx +0 -0
- data/test/regression/xlsx_files/rich_string06.xlsx +0 -0
- data/test/regression/xlsx_files/rich_string07.xlsx +0 -0
- data/test/regression/xlsx_files/rich_string08.xlsx +0 -0
- data/test/regression/xlsx_files/rich_string09.xlsx +0 -0
- data/test/regression/xlsx_files/rich_string10.xlsx +0 -0
- data/test/regression/xlsx_files/rich_string11.xlsx +0 -0
- data/test/regression/xlsx_files/row_col_format01.xlsx +0 -0
- data/test/regression/xlsx_files/row_col_format02.xlsx +0 -0
- data/test/regression/xlsx_files/row_col_format03.xlsx +0 -0
- data/test/regression/xlsx_files/row_col_format04.xlsx +0 -0
- data/test/regression/xlsx_files/row_col_format05.xlsx +0 -0
- data/test/regression/xlsx_files/row_col_format06.xlsx +0 -0
- data/test/regression/xlsx_files/row_col_format07.xlsx +0 -0
- data/test/regression/xlsx_files/row_col_format08.xlsx +0 -0
- data/test/regression/xlsx_files/row_col_format09.xlsx +0 -0
- data/test/regression/xlsx_files/row_col_format10.xlsx +0 -0
- data/test/regression/xlsx_files/row_col_format11.xlsx +0 -0
- data/test/regression/xlsx_files/row_col_format12.xlsx +0 -0
- data/test/regression/xlsx_files/row_col_format13.xlsx +0 -0
- data/test/regression/xlsx_files/row_col_format14.xlsx +0 -0
- data/test/regression/xlsx_files/shape_connect01.xlsx +0 -0
- data/test/regression/xlsx_files/shape_connect02.xlsx +0 -0
- data/test/regression/xlsx_files/shape_connect03.xlsx +0 -0
- data/test/regression/xlsx_files/shape_connect04.xlsx +0 -0
- data/test/regression/xlsx_files/shape_scale01.xlsx +0 -0
- data/test/regression/xlsx_files/shape_stencil01.xlsx +0 -0
- data/test/regression/xlsx_files/shared_strings01.xlsx +0 -0
- data/test/regression/xlsx_files/shared_strings02.xlsx +0 -0
- data/test/regression/xlsx_files/simple01.xlsx +0 -0
- data/test/regression/xlsx_files/simple02.xlsx +0 -0
- data/test/regression/xlsx_files/tab_color01.xlsx +0 -0
- data/test/regression/xlsx_files/table01.xlsx +0 -0
- data/test/regression/xlsx_files/table02.xlsx +0 -0
- data/test/regression/xlsx_files/table03.xlsx +0 -0
- data/test/regression/xlsx_files/table04.xlsx +0 -0
- data/test/regression/xlsx_files/table05.xlsx +0 -0
- data/test/regression/xlsx_files/table06.xlsx +0 -0
- data/test/regression/xlsx_files/table07.xlsx +0 -0
- data/test/regression/xlsx_files/table08.xlsx +0 -0
- data/test/regression/xlsx_files/table09.xlsx +0 -0
- data/test/regression/xlsx_files/table10.xlsx +0 -0
- data/test/regression/xlsx_files/table11.xlsx +0 -0
- data/test/regression/xlsx_files/table12.xlsx +0 -0
- data/test/regression/xlsx_files/table13.xlsx +0 -0
- data/test/regression/xlsx_files/table14.xlsx +0 -0
- data/test/test_example_match.rb +2386 -889
- data/test/workbook/test_write_defined_names.rb +1 -1
- data/test/worksheet/test_cond_format_01.rb +82 -0
- data/test/worksheet/test_cond_format_02.rb +87 -0
- data/test/worksheet/test_cond_format_03.rb +97 -0
- data/test/worksheet/test_cond_format_04.rb +85 -0
- data/test/worksheet/test_cond_format_05.rb +96 -0
- data/test/worksheet/test_cond_format_06.rb +106 -0
- data/test/worksheet/test_cond_format_07.rb +116 -0
- data/test/worksheet/test_cond_format_08.rb +115 -0
- data/test/worksheet/test_cond_format_09.rb +108 -0
- data/test/worksheet/test_cond_format_10.rb +83 -0
- data/test/worksheet/test_cond_format_11.rb +85 -0
- data/test/worksheet/test_cond_format_12.rb +133 -0
- data/test/worksheet/test_cond_format_13.rb +135 -0
- data/test/worksheet/test_cond_format_14.rb +132 -0
- data/test/worksheet/test_cond_format_15.rb +93 -0
- data/test/worksheet/test_cond_format_16.rb +138 -0
- data/test/worksheet/test_cond_format_17.rb +141 -0
- data/test/worksheet/test_cond_format_18.rb +135 -0
- data/test/worksheet/test_cond_format_19.rb +139 -0
- data/test/worksheet/test_write_array_formula_01.rb +3 -4
- data/test/worksheet/test_write_data_validation_01.rb +1 -1
- data/test/worksheet/test_write_data_validation_02.rb +2 -2
- data/test/worksheet/test_write_methods.rb +6 -1
- data/test/worksheet/test_write_page_setup.rb +1 -1
- data/test/worksheet/test_write_sheet_view.rb +1 -1
- data/write_xlsx.gemspec +644 -9
- metadata +649 -22
- data/test/chart/test_write_chart_space.rb +0 -15
|
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
|
@@ -5,16 +5,16 @@
|
|
|
5
5
|
class TestExampleMatch < Test::Unit::TestCase
|
|
6
6
|
def setup
|
|
7
7
|
setup_dir_var
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
@
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def teardown
|
|
11
|
+
File.delete(@xlsx) if File.exist?(@xlsx)
|
|
12
12
|
end
|
|
13
13
|
|
|
14
14
|
def test_a_simple
|
|
15
|
-
xlsx = 'a_simple.xlsx'
|
|
15
|
+
@xlsx = 'a_simple.xlsx'
|
|
16
16
|
# Create a new workbook called simple.xls and add a worksheet
|
|
17
|
-
workbook = WriteXLSX.new(xlsx)
|
|
17
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
18
18
|
worksheet = workbook.add_worksheet
|
|
19
19
|
|
|
20
20
|
# The general syntax is write(row, column, token). Note that row and
|
|
@@ -43,12 +43,12 @@ def test_a_simple
|
|
|
43
43
|
worksheet.write(10, 0, 'http://www.ruby-lang.org/', hyperlink_format)
|
|
44
44
|
|
|
45
45
|
workbook.close
|
|
46
|
-
compare_xlsx(@
|
|
46
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
47
47
|
end
|
|
48
48
|
|
|
49
49
|
def test_array_formula
|
|
50
|
-
xlsx = 'array_formula.xlsx'
|
|
51
|
-
workbook = WriteXLSX.new(xlsx)
|
|
50
|
+
@xlsx = 'array_formula.xlsx'
|
|
51
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
52
52
|
worksheet = workbook.add_worksheet
|
|
53
53
|
|
|
54
54
|
# Write some test data.
|
|
@@ -65,12 +65,276 @@ def test_array_formula
|
|
|
65
65
|
worksheet.write_array_formula('A5:A7', '{=TREND(C5:C7,B5:B7)}')
|
|
66
66
|
|
|
67
67
|
workbook.close
|
|
68
|
-
compare_xlsx(@
|
|
68
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def test_autofilter
|
|
72
|
+
@xlsx = 'autofilter.xlsx'
|
|
73
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
74
|
+
|
|
75
|
+
worksheet1 = workbook.add_worksheet
|
|
76
|
+
worksheet2 = workbook.add_worksheet
|
|
77
|
+
worksheet3 = workbook.add_worksheet
|
|
78
|
+
worksheet4 = workbook.add_worksheet
|
|
79
|
+
worksheet5 = workbook.add_worksheet
|
|
80
|
+
worksheet6 = workbook.add_worksheet
|
|
81
|
+
|
|
82
|
+
bold = workbook.add_format(:bold => 1 )
|
|
83
|
+
|
|
84
|
+
# Extract the data embedded at the end of this file.
|
|
85
|
+
data_array = autofilter_data.split("\n")
|
|
86
|
+
headings = data_array.shift.split
|
|
87
|
+
data = []
|
|
88
|
+
data_array.each { |line| data << line.split }
|
|
89
|
+
|
|
90
|
+
# Set up several sheets with the same data.
|
|
91
|
+
workbook.worksheets.each do |worksheet|
|
|
92
|
+
worksheet.set_column('A:D', 12 )
|
|
93
|
+
worksheet.set_row(0, 20, bold )
|
|
94
|
+
worksheet.write('A1', headings )
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
###############################################################################
|
|
99
|
+
#
|
|
100
|
+
# Example 1. Autofilter without conditions.
|
|
101
|
+
#
|
|
102
|
+
|
|
103
|
+
worksheet1.autofilter('A1:D51' )
|
|
104
|
+
worksheet1.write('A2', [ data ] )
|
|
105
|
+
|
|
106
|
+
###############################################################################
|
|
107
|
+
#
|
|
108
|
+
#
|
|
109
|
+
# Example 2. Autofilter with a filter condition in the first column.
|
|
110
|
+
#
|
|
111
|
+
|
|
112
|
+
# The range in this example is the same as above but in row-column notation.
|
|
113
|
+
worksheet2.autofilter(0, 0, 50, 3 )
|
|
114
|
+
|
|
115
|
+
# The placeholder "Region" in the filter is ignored and can be any string
|
|
116
|
+
# that adds clarity to the expression.
|
|
117
|
+
#
|
|
118
|
+
worksheet2.filter_column(0, 'Region eq East' )
|
|
119
|
+
|
|
120
|
+
#
|
|
121
|
+
# Hide the rows that don't match the filter criteria.
|
|
122
|
+
#
|
|
123
|
+
row = 1
|
|
124
|
+
|
|
125
|
+
data.each do |row_data|
|
|
126
|
+
region = row_data[0]
|
|
127
|
+
|
|
128
|
+
worksheet2.set_row(row, nil, nil, 1) unless region == 'East'
|
|
129
|
+
worksheet2.write(row, 0, row_data)
|
|
130
|
+
row += 1
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
###############################################################################
|
|
134
|
+
#
|
|
135
|
+
#
|
|
136
|
+
# Example 3. Autofilter with a dual filter condition in one of the columns.
|
|
137
|
+
#
|
|
138
|
+
|
|
139
|
+
worksheet3.autofilter('A1:D51' )
|
|
140
|
+
|
|
141
|
+
worksheet3.filter_column('A', 'x eq East or x eq South' )
|
|
142
|
+
|
|
143
|
+
#
|
|
144
|
+
# Hide the rows that don't match the filter criteria.
|
|
145
|
+
#
|
|
146
|
+
row = 1
|
|
147
|
+
|
|
148
|
+
data.each do |row_data|
|
|
149
|
+
region = row_data[0]
|
|
150
|
+
|
|
151
|
+
worksheet3.set_row(row, nil, nil, 1) unless region == 'East' || region == 'South'
|
|
152
|
+
worksheet3.write(row, 0,row_data)
|
|
153
|
+
row += 1
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
###############################################################################
|
|
158
|
+
#
|
|
159
|
+
#
|
|
160
|
+
# Example 4. Autofilter with filter conditions in two columns.
|
|
161
|
+
#
|
|
162
|
+
|
|
163
|
+
worksheet4.autofilter('A1:D51')
|
|
164
|
+
|
|
165
|
+
worksheet4.filter_column('A', 'x eq East')
|
|
166
|
+
worksheet4.filter_column('C', 'x > 3000 and x < 8000')
|
|
167
|
+
|
|
168
|
+
#
|
|
169
|
+
# Hide the rows that don't match the filter criteria.
|
|
170
|
+
#
|
|
171
|
+
row = 1
|
|
172
|
+
|
|
173
|
+
data.each do |row_data|
|
|
174
|
+
region = row_data[0]
|
|
175
|
+
volume = row_data[2]
|
|
176
|
+
|
|
177
|
+
unless region == 'East' && volume.to_i > 3000 && volume.to_i < 8000
|
|
178
|
+
# Hide row.
|
|
179
|
+
worksheet4.set_row(row, nil, nil, 1)
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
worksheet4.write(row, 0, row_data)
|
|
183
|
+
row += 1
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
###############################################################################
|
|
188
|
+
#
|
|
189
|
+
#
|
|
190
|
+
# Example 5. Autofilter with filter for blanks.
|
|
191
|
+
#
|
|
192
|
+
|
|
193
|
+
# Create a blank cell in our test data.
|
|
194
|
+
data[5][0] = ''
|
|
195
|
+
|
|
196
|
+
worksheet5.autofilter('A1:D51')
|
|
197
|
+
worksheet5.filter_column('A', 'x eq Blanks')
|
|
198
|
+
|
|
199
|
+
#
|
|
200
|
+
# Hide the rows that don't match the filter criteria.
|
|
201
|
+
#
|
|
202
|
+
row = 1
|
|
203
|
+
|
|
204
|
+
data.each do |row_data|
|
|
205
|
+
region = row_data[0]
|
|
206
|
+
|
|
207
|
+
worksheet5.set_row(row, nil, nil, 1) unless region == ''
|
|
208
|
+
|
|
209
|
+
worksheet5.write(row, 0, row_data)
|
|
210
|
+
row += 1
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
###############################################################################
|
|
215
|
+
#
|
|
216
|
+
#
|
|
217
|
+
# Example 6. Autofilter with filter for non-blanks.
|
|
218
|
+
#
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
worksheet6.autofilter('A1:D51')
|
|
222
|
+
worksheet6.filter_column('A', 'x eq NonBlanks')
|
|
223
|
+
|
|
224
|
+
#
|
|
225
|
+
# Hide the rows that don't match the filter criteria.
|
|
226
|
+
#
|
|
227
|
+
row = 1
|
|
228
|
+
|
|
229
|
+
data.each do |row_data|
|
|
230
|
+
region = row_data[0]
|
|
231
|
+
|
|
232
|
+
worksheet6.set_row(row, nil, nil, 1) unless region != ''
|
|
233
|
+
|
|
234
|
+
worksheet6.write(row, 0, row_data)
|
|
235
|
+
row += 1
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
workbook.close
|
|
239
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
def test_chart_scatter06
|
|
243
|
+
@xlsx = 'chart_scatter06.xlsx'
|
|
244
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
245
|
+
worksheet = workbook.add_worksheet
|
|
246
|
+
chart = workbook.add_chart(:type => 'scatter', :embedded => 1)
|
|
247
|
+
|
|
248
|
+
# For testing, copy the randomly generated axis ids in the target xlsx file.
|
|
249
|
+
chart.instance_variable_set(:@axis_ids, [57708544, 44297600])
|
|
250
|
+
|
|
251
|
+
data = [
|
|
252
|
+
[ 1, 2, 3, 4, 5 ],
|
|
253
|
+
[ 2, 4, 6, 8, 10 ],
|
|
254
|
+
[ 3, 6, 9, 12, 15 ]
|
|
255
|
+
|
|
256
|
+
]
|
|
257
|
+
|
|
258
|
+
worksheet.write('A1', data)
|
|
259
|
+
|
|
260
|
+
chart.add_series(
|
|
261
|
+
:categories => '=Sheet1!$A$1:$A$5',
|
|
262
|
+
:values => '=Sheet1!$B$1:$B$5'
|
|
263
|
+
)
|
|
264
|
+
|
|
265
|
+
chart.add_series(
|
|
266
|
+
:categories => '=Sheet1!$A$1:$A$5',
|
|
267
|
+
:values => '=Sheet1!$C$1:$C$5'
|
|
268
|
+
)
|
|
269
|
+
|
|
270
|
+
chart.set_x_axis(:minor_unit => 1, :major_unit => 3)
|
|
271
|
+
chart.set_y_axis(:minor_unit => 2, :major_unit => 4)
|
|
272
|
+
|
|
273
|
+
worksheet.insert_chart('E9', chart)
|
|
274
|
+
|
|
275
|
+
workbook.close
|
|
276
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
277
|
+
end
|
|
278
|
+
|
|
279
|
+
def autofilter_data
|
|
280
|
+
<<EOS
|
|
281
|
+
Region Item Volume Month
|
|
282
|
+
East Apple 9000 July
|
|
283
|
+
East Apple 5000 July
|
|
284
|
+
South Orange 9000 September
|
|
285
|
+
North Apple 2000 November
|
|
286
|
+
West Apple 9000 November
|
|
287
|
+
South Pear 7000 October
|
|
288
|
+
North Pear 9000 August
|
|
289
|
+
West Orange 1000 December
|
|
290
|
+
West Grape 1000 November
|
|
291
|
+
South Pear 10000 April
|
|
292
|
+
West Grape 6000 January
|
|
293
|
+
South Orange 3000 May
|
|
294
|
+
North Apple 3000 December
|
|
295
|
+
South Apple 7000 February
|
|
296
|
+
West Grape 1000 December
|
|
297
|
+
East Grape 8000 February
|
|
298
|
+
South Grape 10000 June
|
|
299
|
+
West Pear 7000 December
|
|
300
|
+
South Apple 2000 October
|
|
301
|
+
East Grape 7000 December
|
|
302
|
+
North Grape 6000 April
|
|
303
|
+
East Pear 8000 February
|
|
304
|
+
North Apple 7000 August
|
|
305
|
+
North Orange 7000 July
|
|
306
|
+
North Apple 6000 June
|
|
307
|
+
South Grape 8000 September
|
|
308
|
+
West Apple 3000 October
|
|
309
|
+
South Orange 10000 November
|
|
310
|
+
West Grape 4000 July
|
|
311
|
+
North Orange 5000 August
|
|
312
|
+
East Orange 1000 November
|
|
313
|
+
East Orange 4000 October
|
|
314
|
+
North Grape 5000 August
|
|
315
|
+
East Apple 1000 December
|
|
316
|
+
South Apple 10000 March
|
|
317
|
+
East Grape 7000 October
|
|
318
|
+
West Grape 1000 September
|
|
319
|
+
East Grape 10000 October
|
|
320
|
+
South Orange 8000 March
|
|
321
|
+
North Apple 4000 July
|
|
322
|
+
South Orange 5000 July
|
|
323
|
+
West Apple 4000 June
|
|
324
|
+
East Apple 5000 April
|
|
325
|
+
North Pear 3000 August
|
|
326
|
+
East Grape 9000 November
|
|
327
|
+
North Orange 8000 October
|
|
328
|
+
East Apple 10000 June
|
|
329
|
+
South Pear 1000 December
|
|
330
|
+
North Grape 10000 July
|
|
331
|
+
East Grape 6000 February
|
|
332
|
+
EOS
|
|
69
333
|
end
|
|
70
334
|
|
|
71
335
|
def test_chart_area
|
|
72
|
-
xlsx = 'chart_area.xlsx'
|
|
73
|
-
workbook = WriteXLSX.new(xlsx)
|
|
336
|
+
@xlsx = 'chart_area.xlsx'
|
|
337
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
74
338
|
worksheet = workbook.add_worksheet
|
|
75
339
|
bold = workbook.add_format(:bold => 1)
|
|
76
340
|
|
|
@@ -115,12 +379,12 @@ def test_chart_area
|
|
|
115
379
|
worksheet.insert_chart('D2', chart, 25, 10)
|
|
116
380
|
|
|
117
381
|
workbook.close
|
|
118
|
-
compare_xlsx(@
|
|
382
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
119
383
|
end
|
|
120
384
|
|
|
121
385
|
def test_chart_bar
|
|
122
|
-
xlsx = 'chart_bar.xlsx'
|
|
123
|
-
workbook = WriteXLSX.new(xlsx)
|
|
386
|
+
@xlsx = 'chart_bar.xlsx'
|
|
387
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
124
388
|
worksheet = workbook.add_worksheet
|
|
125
389
|
bold = workbook.add_format(:bold => 1)
|
|
126
390
|
|
|
@@ -165,12 +429,12 @@ def test_chart_bar
|
|
|
165
429
|
worksheet.insert_chart('D2', chart, 25, 10)
|
|
166
430
|
|
|
167
431
|
workbook.close
|
|
168
|
-
compare_xlsx(@
|
|
432
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
169
433
|
end
|
|
170
434
|
|
|
171
435
|
def test_chart_column
|
|
172
|
-
xlsx = 'chart_column.xlsx'
|
|
173
|
-
workbook = WriteXLSX.new(xlsx)
|
|
436
|
+
@xlsx = 'chart_column.xlsx'
|
|
437
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
174
438
|
worksheet = workbook.add_worksheet
|
|
175
439
|
bold = workbook.add_format(:bold => 1)
|
|
176
440
|
|
|
@@ -215,12 +479,12 @@ def test_chart_column
|
|
|
215
479
|
worksheet.insert_chart('D2', chart, 25, 10)
|
|
216
480
|
|
|
217
481
|
workbook.close
|
|
218
|
-
compare_xlsx(@
|
|
482
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
219
483
|
end
|
|
220
484
|
|
|
221
485
|
def test_chart_line
|
|
222
|
-
xlsx = 'chart_line.xlsx'
|
|
223
|
-
workbook = WriteXLSX.new(xlsx)
|
|
486
|
+
@xlsx = 'chart_line.xlsx'
|
|
487
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
224
488
|
worksheet = workbook.add_worksheet
|
|
225
489
|
bold = workbook.add_format(:bold => 1)
|
|
226
490
|
|
|
@@ -265,12 +529,12 @@ def test_chart_line
|
|
|
265
529
|
worksheet.insert_chart('D2', chart, 25, 10)
|
|
266
530
|
|
|
267
531
|
workbook.close
|
|
268
|
-
compare_xlsx(@
|
|
532
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
269
533
|
end
|
|
270
534
|
|
|
271
535
|
def test_chart_pie
|
|
272
|
-
xlsx = 'chart_pie.xlsx'
|
|
273
|
-
workbook = WriteXLSX.new(xlsx)
|
|
536
|
+
@xlsx = 'chart_pie.xlsx'
|
|
537
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
274
538
|
worksheet = workbook.add_worksheet
|
|
275
539
|
bold = workbook.add_format(:bold => 1)
|
|
276
540
|
|
|
@@ -305,12 +569,12 @@ def test_chart_pie
|
|
|
305
569
|
worksheet.insert_chart('C2', chart, 25, 10)
|
|
306
570
|
|
|
307
571
|
workbook.close
|
|
308
|
-
compare_xlsx(@
|
|
572
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
309
573
|
end
|
|
310
574
|
|
|
311
575
|
def test_chart_scatter
|
|
312
|
-
xlsx = 'chart_scatter.xlsx'
|
|
313
|
-
workbook = WriteXLSX.new(xlsx)
|
|
576
|
+
@xlsx = 'chart_scatter.xlsx'
|
|
577
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
314
578
|
worksheet = workbook.add_worksheet
|
|
315
579
|
bold = workbook.add_format(:bold => 1)
|
|
316
580
|
|
|
@@ -355,12 +619,12 @@ def test_chart_scatter
|
|
|
355
619
|
worksheet.insert_chart('D2', chart, 25, 10)
|
|
356
620
|
|
|
357
621
|
workbook.close
|
|
358
|
-
compare_xlsx(@
|
|
622
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
359
623
|
end
|
|
360
624
|
|
|
361
625
|
def test_chart_stock
|
|
362
|
-
xlsx = 'chart_stock.xlsx'
|
|
363
|
-
workbook = WriteXLSX.new(xlsx)
|
|
626
|
+
@xlsx = 'chart_stock.xlsx'
|
|
627
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
364
628
|
worksheet = workbook.add_worksheet
|
|
365
629
|
bold = workbook.add_format(:bold => 1)
|
|
366
630
|
date_format = workbook.add_format(:num_format => 'dd/mm/yyyy')
|
|
@@ -411,19 +675,412 @@ def test_chart_stock
|
|
|
411
675
|
worksheet.insert_chart('E9', chart)
|
|
412
676
|
|
|
413
677
|
workbook.close
|
|
414
|
-
compare_xlsx(@
|
|
678
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
415
679
|
end
|
|
416
680
|
|
|
417
|
-
def
|
|
418
|
-
xlsx = '
|
|
419
|
-
workbook = WriteXLSX.new(xlsx)
|
|
420
|
-
|
|
681
|
+
def test_chart_secondary_axis
|
|
682
|
+
@xlsx = 'chart_secondary_axis.xlsx'
|
|
683
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
684
|
+
worksheet = workbook.add_worksheet
|
|
685
|
+
bold = workbook.add_format(:bold => 1)
|
|
421
686
|
|
|
422
|
-
#
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
687
|
+
# Add the worksheet data that the charts will refer to.
|
|
688
|
+
headings = [ 'Aliens', 'Humans']
|
|
689
|
+
data = [
|
|
690
|
+
[ 2, 3, 4, 5, 6, 7 ],
|
|
691
|
+
[ 10, 40, 50, 20, 10, 50 ]
|
|
692
|
+
]
|
|
693
|
+
|
|
694
|
+
worksheet.write('A1', headings, bold)
|
|
695
|
+
worksheet.write('A2', data)
|
|
696
|
+
|
|
697
|
+
# Create a new chart object. In this case an embedded chart.
|
|
698
|
+
chart = workbook.add_chart(:type => 'line', :embedded => 1)
|
|
699
|
+
|
|
700
|
+
# Configure the first series.
|
|
701
|
+
chart.add_series(
|
|
702
|
+
:name => '=Sheet1!$A$1',
|
|
703
|
+
:values => '=Sheet1!$A$2:$A$7',
|
|
704
|
+
:y2_axis => 1
|
|
705
|
+
)
|
|
706
|
+
|
|
707
|
+
chart.add_series(
|
|
708
|
+
:name => '=Sheet1!$B$1',
|
|
709
|
+
:values => '=Sheet1!$B$2:$B$7'
|
|
710
|
+
)
|
|
711
|
+
|
|
712
|
+
chart.set_legend(:position => 'right')
|
|
713
|
+
|
|
714
|
+
# Add a chart title and some axis labels.
|
|
715
|
+
chart.set_title(:name => 'Survey results')
|
|
716
|
+
chart.set_x_axis(:name => 'Days')
|
|
717
|
+
chart.set_y_axis(:name => 'Population', :major_gridlines => {:show => 0})
|
|
718
|
+
chart.set_y2_axis(:name => 'Laser wounds')
|
|
719
|
+
|
|
720
|
+
# Insert the chart into the worksheet (with an offset).
|
|
721
|
+
worksheet.insert_chart('D2', chart, 25, 10)
|
|
722
|
+
|
|
723
|
+
workbook.close
|
|
724
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
725
|
+
end
|
|
726
|
+
|
|
727
|
+
def test_comments1
|
|
728
|
+
@xlsx = 'comments1.xlsx'
|
|
729
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
730
|
+
worksheet = workbook.add_worksheet
|
|
731
|
+
|
|
732
|
+
worksheet.write('A1', 'Hello')
|
|
733
|
+
worksheet.write_comment('A1', 'This is a comment')
|
|
734
|
+
|
|
735
|
+
workbook.close
|
|
736
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
737
|
+
end
|
|
738
|
+
|
|
739
|
+
def test_comments2
|
|
740
|
+
@xlsx = 'comments2.xlsx'
|
|
741
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
742
|
+
|
|
743
|
+
text_wrap = workbook.add_format( :text_wrap => 1, :valign => 'top' )
|
|
744
|
+
worksheet1 = workbook.add_worksheet
|
|
745
|
+
worksheet2 = workbook.add_worksheet
|
|
746
|
+
worksheet3 = workbook.add_worksheet
|
|
747
|
+
worksheet4 = workbook.add_worksheet
|
|
748
|
+
worksheet5 = workbook.add_worksheet
|
|
749
|
+
worksheet6 = workbook.add_worksheet
|
|
750
|
+
worksheet7 = workbook.add_worksheet
|
|
751
|
+
worksheet8 = workbook.add_worksheet
|
|
752
|
+
|
|
753
|
+
|
|
754
|
+
# Variables that we will use in each example.
|
|
755
|
+
cell_text = ''
|
|
756
|
+
comment = ''
|
|
757
|
+
|
|
758
|
+
|
|
759
|
+
###############################################################################
|
|
760
|
+
#
|
|
761
|
+
# Example 1. Demonstrates a simple cell comments without formatting.
|
|
762
|
+
# comments.
|
|
763
|
+
#
|
|
764
|
+
|
|
765
|
+
# Set up some formatting.
|
|
766
|
+
worksheet1.set_column( 'C:C', 25 )
|
|
767
|
+
worksheet1.set_row( 2, 50 )
|
|
768
|
+
worksheet1.set_row( 5, 50 )
|
|
769
|
+
|
|
770
|
+
|
|
771
|
+
# Simple ascii string.
|
|
772
|
+
cell_text = 'Hold the mouse over this cell to see the comment.'
|
|
773
|
+
|
|
774
|
+
comment = 'This is a comment.'
|
|
775
|
+
|
|
776
|
+
worksheet1.write( 'C3', cell_text, text_wrap )
|
|
777
|
+
worksheet1.write_comment( 'C3', comment )
|
|
778
|
+
|
|
779
|
+
cell_text = 'This is a UTF-8 string.'
|
|
780
|
+
comment = '☺'
|
|
781
|
+
|
|
782
|
+
worksheet1.write( 'C6', cell_text, text_wrap )
|
|
783
|
+
worksheet1.write_comment( 'C6', comment )
|
|
784
|
+
|
|
785
|
+
|
|
786
|
+
|
|
787
|
+
###############################################################################
|
|
788
|
+
#
|
|
789
|
+
# Example 2. Demonstrates visible and hidden comments.
|
|
790
|
+
#
|
|
791
|
+
|
|
792
|
+
# Set up some formatting.
|
|
793
|
+
worksheet2.set_column( 'C:C', 25 )
|
|
794
|
+
worksheet2.set_row( 2, 50 )
|
|
795
|
+
worksheet2.set_row( 5, 50 )
|
|
796
|
+
|
|
797
|
+
|
|
798
|
+
cell_text = 'This cell comment is visible.'
|
|
799
|
+
|
|
800
|
+
comment = 'Hello.'
|
|
801
|
+
|
|
802
|
+
worksheet2.write( 'C3', cell_text, text_wrap )
|
|
803
|
+
worksheet2.write_comment( 'C3', comment, :visible => 1 )
|
|
804
|
+
|
|
805
|
+
|
|
806
|
+
cell_text = "This cell comment isn't visible (the default)."
|
|
807
|
+
|
|
808
|
+
comment = 'Hello.'
|
|
809
|
+
|
|
810
|
+
worksheet2.write( 'C6', cell_text, text_wrap )
|
|
811
|
+
worksheet2.write_comment( 'C6', comment )
|
|
812
|
+
|
|
813
|
+
|
|
814
|
+
###############################################################################
|
|
815
|
+
#
|
|
816
|
+
# Example 3. Demonstrates visible and hidden comments set at the worksheet
|
|
817
|
+
# level.
|
|
818
|
+
#
|
|
819
|
+
|
|
820
|
+
# Set up some formatting.
|
|
821
|
+
worksheet3.set_column( 'C:C', 25 )
|
|
822
|
+
worksheet3.set_row( 2, 50 )
|
|
823
|
+
worksheet3.set_row( 5, 50 )
|
|
824
|
+
worksheet3.set_row( 8, 50 )
|
|
825
|
+
|
|
826
|
+
# Make all comments on the worksheet visible.
|
|
827
|
+
worksheet3.show_comments
|
|
828
|
+
|
|
829
|
+
cell_text = 'This cell comment is visible, explicitly.'
|
|
830
|
+
|
|
831
|
+
comment = 'Hello.'
|
|
832
|
+
|
|
833
|
+
worksheet3.write( 'C3', cell_text, text_wrap )
|
|
834
|
+
worksheet3.write_comment( 'C3', comment, :visible => 1 )
|
|
835
|
+
|
|
836
|
+
|
|
837
|
+
cell_text =
|
|
838
|
+
'This cell comment is also visible because we used show_comments().'
|
|
839
|
+
|
|
840
|
+
comment = 'Hello.'
|
|
841
|
+
|
|
842
|
+
worksheet3.write( 'C6', cell_text, text_wrap )
|
|
843
|
+
worksheet3.write_comment( 'C6', comment )
|
|
844
|
+
|
|
845
|
+
|
|
846
|
+
cell_text = 'However, we can still override it locally.'
|
|
847
|
+
|
|
848
|
+
comment = 'Hello.'
|
|
849
|
+
|
|
850
|
+
worksheet3.write( 'C9', cell_text, text_wrap )
|
|
851
|
+
worksheet3.write_comment( 'C9', comment, :visible => 0 )
|
|
852
|
+
|
|
853
|
+
|
|
854
|
+
###############################################################################
|
|
855
|
+
#
|
|
856
|
+
# Example 4. Demonstrates changes to the comment box dimensions.
|
|
857
|
+
#
|
|
858
|
+
|
|
859
|
+
# Set up some formatting.
|
|
860
|
+
worksheet4.set_column( 'C:C', 25 )
|
|
861
|
+
worksheet4.set_row( 2, 50 )
|
|
862
|
+
worksheet4.set_row( 5, 50 )
|
|
863
|
+
worksheet4.set_row( 8, 50 )
|
|
864
|
+
worksheet4.set_row( 15, 50 )
|
|
865
|
+
|
|
866
|
+
worksheet4.show_comments
|
|
867
|
+
|
|
868
|
+
cell_text = 'This cell comment is default size.'
|
|
869
|
+
|
|
870
|
+
comment = 'Hello.'
|
|
871
|
+
|
|
872
|
+
worksheet4.write( 'C3', cell_text, text_wrap )
|
|
873
|
+
worksheet4.write_comment( 'C3', comment )
|
|
874
|
+
|
|
875
|
+
|
|
876
|
+
cell_text = 'This cell comment is twice as wide.'
|
|
877
|
+
|
|
878
|
+
comment = 'Hello.'
|
|
879
|
+
|
|
880
|
+
worksheet4.write( 'C6', cell_text, text_wrap )
|
|
881
|
+
worksheet4.write_comment( 'C6', comment, :x_scale => 2 )
|
|
882
|
+
|
|
883
|
+
|
|
884
|
+
cell_text = 'This cell comment is twice as high.'
|
|
885
|
+
|
|
886
|
+
comment = 'Hello.'
|
|
887
|
+
|
|
888
|
+
worksheet4.write( 'C9', cell_text, text_wrap )
|
|
889
|
+
worksheet4.write_comment( 'C9', comment, :y_scale => 2 )
|
|
890
|
+
|
|
891
|
+
|
|
892
|
+
cell_text = 'This cell comment is scaled in both directions.'
|
|
893
|
+
|
|
894
|
+
comment = 'Hello.'
|
|
895
|
+
|
|
896
|
+
worksheet4.write( 'C16', cell_text, text_wrap )
|
|
897
|
+
worksheet4.write_comment( 'C16', comment, :x_scale => 1.2, :y_scale => 0.8 )
|
|
898
|
+
|
|
899
|
+
|
|
900
|
+
cell_text = 'This cell comment has width and height specified in pixels.'
|
|
901
|
+
|
|
902
|
+
comment = 'Hello.'
|
|
903
|
+
|
|
904
|
+
worksheet4.write( 'C19', cell_text, text_wrap )
|
|
905
|
+
worksheet4.write_comment( 'C19', comment, :width => 200, :height => 20 )
|
|
906
|
+
|
|
907
|
+
|
|
908
|
+
###############################################################################
|
|
909
|
+
#
|
|
910
|
+
# Example 5. Demonstrates changes to the cell comment position.
|
|
911
|
+
#
|
|
912
|
+
|
|
913
|
+
worksheet5.set_column( 'C:C', 25 )
|
|
914
|
+
worksheet5.set_row( 2, 50 )
|
|
915
|
+
worksheet5.set_row( 5, 50 )
|
|
916
|
+
worksheet5.set_row( 8, 50 )
|
|
917
|
+
worksheet5.set_row( 11, 50 )
|
|
918
|
+
|
|
919
|
+
worksheet5.show_comments
|
|
920
|
+
|
|
921
|
+
cell_text = 'This cell comment is in the default position.'
|
|
922
|
+
|
|
923
|
+
comment = 'Hello.'
|
|
924
|
+
|
|
925
|
+
worksheet5.write( 'C3', cell_text, text_wrap )
|
|
926
|
+
worksheet5.write_comment( 'C3', comment )
|
|
927
|
+
|
|
928
|
+
|
|
929
|
+
cell_text = 'This cell comment has been moved to another cell.'
|
|
930
|
+
|
|
931
|
+
comment = 'Hello.'
|
|
932
|
+
|
|
933
|
+
worksheet5.write( 'C6', cell_text, text_wrap )
|
|
934
|
+
worksheet5.write_comment( 'C6', comment, :start_cell => 'E4' )
|
|
935
|
+
|
|
936
|
+
|
|
937
|
+
cell_text = 'This cell comment has been moved to another cell.'
|
|
938
|
+
|
|
939
|
+
comment = 'Hello.'
|
|
940
|
+
|
|
941
|
+
worksheet5.write( 'C9', cell_text, text_wrap )
|
|
942
|
+
worksheet5.write_comment( 'C9', comment, :start_row => 8, :start_col => 4 )
|
|
943
|
+
|
|
944
|
+
|
|
945
|
+
cell_text = 'This cell comment has been shifted within its default cell.'
|
|
946
|
+
|
|
947
|
+
comment = 'Hello.'
|
|
948
|
+
|
|
949
|
+
worksheet5.write( 'C12', cell_text, text_wrap )
|
|
950
|
+
worksheet5.write_comment( 'C12', comment, :x_offset => 30, :y_offset => 12 )
|
|
951
|
+
|
|
952
|
+
|
|
953
|
+
###############################################################################
|
|
954
|
+
#
|
|
955
|
+
# Example 6. Demonstrates changes to the comment background colour.
|
|
956
|
+
#
|
|
957
|
+
|
|
958
|
+
worksheet6.set_column( 'C:C', 25 )
|
|
959
|
+
worksheet6.set_row( 2, 50 )
|
|
960
|
+
worksheet6.set_row( 5, 50 )
|
|
961
|
+
worksheet6.set_row( 8, 50 )
|
|
962
|
+
|
|
963
|
+
worksheet6.show_comments
|
|
964
|
+
|
|
965
|
+
cell_text = 'This cell comment has a different colour.'
|
|
966
|
+
|
|
967
|
+
comment = 'Hello.'
|
|
968
|
+
|
|
969
|
+
worksheet6.write( 'C3', cell_text, text_wrap )
|
|
970
|
+
worksheet6.write_comment( 'C3', comment, :color => 'green' )
|
|
971
|
+
|
|
972
|
+
|
|
973
|
+
cell_text = 'This cell comment has the default colour.'
|
|
974
|
+
|
|
975
|
+
comment = 'Hello.'
|
|
976
|
+
|
|
977
|
+
worksheet6.write( 'C6', cell_text, text_wrap )
|
|
978
|
+
worksheet6.write_comment( 'C6', comment )
|
|
979
|
+
|
|
980
|
+
|
|
981
|
+
cell_text = 'This cell comment has a different colour.'
|
|
982
|
+
|
|
983
|
+
comment = 'Hello.'
|
|
984
|
+
|
|
985
|
+
worksheet6.write( 'C9', cell_text, text_wrap )
|
|
986
|
+
worksheet6.write_comment( 'C9', comment, :color => 0x35 )
|
|
987
|
+
|
|
988
|
+
|
|
989
|
+
###############################################################################
|
|
990
|
+
#
|
|
991
|
+
# Example 7. Demonstrates how to set the cell comment author.
|
|
992
|
+
#
|
|
993
|
+
|
|
994
|
+
worksheet7.set_column( 'C:C', 30 )
|
|
995
|
+
worksheet7.set_row( 2, 50 )
|
|
996
|
+
worksheet7.set_row( 5, 50 )
|
|
997
|
+
worksheet7.set_row( 8, 50 )
|
|
998
|
+
|
|
999
|
+
author = ''
|
|
1000
|
+
cell = 'C3'
|
|
1001
|
+
|
|
1002
|
+
cell_text = "Move the mouse over this cell and you will see 'Cell commented " +
|
|
1003
|
+
"by #{author}' (blank) in the status bar at the bottom"
|
|
1004
|
+
|
|
1005
|
+
comment = 'Hello.'
|
|
1006
|
+
|
|
1007
|
+
worksheet7.write( cell, cell_text, text_wrap )
|
|
1008
|
+
worksheet7.write_comment( cell, comment )
|
|
1009
|
+
|
|
1010
|
+
|
|
1011
|
+
author = 'Ruby'
|
|
1012
|
+
cell = 'C6'
|
|
1013
|
+
cell_text = "Move the mouse over this cell and you will see 'Cell commented " +
|
|
1014
|
+
"by #{author}' in the status bar at the bottom"
|
|
1015
|
+
|
|
1016
|
+
comment = 'Hello.'
|
|
1017
|
+
|
|
1018
|
+
worksheet7.write( cell, cell_text, text_wrap )
|
|
1019
|
+
worksheet7.write_comment( cell, comment, :author => author )
|
|
1020
|
+
|
|
1021
|
+
|
|
1022
|
+
author = '€'
|
|
1023
|
+
cell = 'C9'
|
|
1024
|
+
cell_text = "Move the mouse over this cell and you will see 'Cell commented " +
|
|
1025
|
+
"by #{author}' in the status bar at the bottom"
|
|
1026
|
+
comment = 'Hello.'
|
|
1027
|
+
|
|
1028
|
+
worksheet7.write( cell, cell_text, text_wrap )
|
|
1029
|
+
worksheet7.write_comment( cell, comment, :author => author )
|
|
1030
|
+
|
|
1031
|
+
|
|
1032
|
+
|
|
1033
|
+
|
|
1034
|
+
###############################################################################
|
|
1035
|
+
#
|
|
1036
|
+
# Example 8. Demonstrates the need to explicitly set the row height.
|
|
1037
|
+
#
|
|
1038
|
+
|
|
1039
|
+
# Set up some formatting.
|
|
1040
|
+
worksheet8.set_column( 'C:C', 25 )
|
|
1041
|
+
worksheet8.set_row( 2, 80 )
|
|
1042
|
+
|
|
1043
|
+
worksheet8.show_comments
|
|
1044
|
+
|
|
1045
|
+
|
|
1046
|
+
cell_text =
|
|
1047
|
+
'The height of this row has been adjusted explicitly using ' +
|
|
1048
|
+
'set_row(). The size of the comment box is adjusted ' +
|
|
1049
|
+
'accordingly by WriteXLSX.'
|
|
1050
|
+
|
|
1051
|
+
comment = 'Hello.'
|
|
1052
|
+
|
|
1053
|
+
worksheet8.write( 'C3', cell_text, text_wrap )
|
|
1054
|
+
worksheet8.write_comment( 'C3', comment )
|
|
1055
|
+
|
|
1056
|
+
|
|
1057
|
+
cell_text =
|
|
1058
|
+
'The height of this row has been adjusted by Excel due to the ' +
|
|
1059
|
+
'text wrap property being set. Unfortunately this means that ' +
|
|
1060
|
+
'the height of the row is unknown to WriteXLSX at ' +
|
|
1061
|
+
"run time and thus the comment box is stretched as well.\n\n" +
|
|
1062
|
+
'Use set_row() to specify the row height explicitly to avoid ' +
|
|
1063
|
+
'this problem.'
|
|
1064
|
+
|
|
1065
|
+
comment = 'Hello.'
|
|
1066
|
+
|
|
1067
|
+
worksheet8.write( 'C6', cell_text, text_wrap )
|
|
1068
|
+
worksheet8.write_comment( 'C6', comment )
|
|
1069
|
+
|
|
1070
|
+
workbook.close
|
|
1071
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
1072
|
+
end
|
|
1073
|
+
|
|
1074
|
+
def test_conditional_format
|
|
1075
|
+
@xlsx = 'conditional_format.xlsx'
|
|
1076
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
1077
|
+
worksheet1 = workbook.add_worksheet
|
|
1078
|
+
|
|
1079
|
+
# Light red fill with dark red text.
|
|
1080
|
+
format1 = workbook.add_format(
|
|
1081
|
+
:bg_color => '#FFC7CE',
|
|
1082
|
+
:color => '#9C0006'
|
|
1083
|
+
)
|
|
427
1084
|
|
|
428
1085
|
# Green fill with dark green text.
|
|
429
1086
|
format2 = workbook.add_format(
|
|
@@ -477,12 +1134,12 @@ def test_conditional_format
|
|
|
477
1134
|
)
|
|
478
1135
|
|
|
479
1136
|
workbook.close
|
|
480
|
-
compare_xlsx(@
|
|
1137
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
481
1138
|
end
|
|
482
1139
|
|
|
483
1140
|
def test_data_validate
|
|
484
|
-
xlsx = 'data_validate.xlsx'
|
|
485
|
-
workbook = WriteXLSX.new(xlsx)
|
|
1141
|
+
@xlsx = 'data_validate.xlsx'
|
|
1142
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
486
1143
|
worksheet = workbook.add_worksheet
|
|
487
1144
|
|
|
488
1145
|
# Add a format for the header cells.
|
|
@@ -744,12 +1401,86 @@ def test_data_validate
|
|
|
744
1401
|
})
|
|
745
1402
|
|
|
746
1403
|
workbook.close
|
|
747
|
-
compare_xlsx(@
|
|
1404
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
1405
|
+
end
|
|
1406
|
+
|
|
1407
|
+
def test_date_time
|
|
1408
|
+
@xlsx = 'date_time.xlsx'
|
|
1409
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
1410
|
+
worksheet = workbook.add_worksheet
|
|
1411
|
+
bold = workbook.add_format(:bold => 1)
|
|
1412
|
+
|
|
1413
|
+
# Expand the first column so that the date is visible.
|
|
1414
|
+
worksheet.set_column('A:B', 30)
|
|
1415
|
+
|
|
1416
|
+
# Write the column headers.
|
|
1417
|
+
worksheet.write('A1', 'Formatted date', bold)
|
|
1418
|
+
worksheet.write('B1', 'Format', bold)
|
|
1419
|
+
|
|
1420
|
+
# Examples date and time formats. In the outpu file compare how changing
|
|
1421
|
+
# the format codes change the appearance of the date.
|
|
1422
|
+
#
|
|
1423
|
+
date_formats = [
|
|
1424
|
+
'dd/mm/yy',
|
|
1425
|
+
'mm/dd/yy',
|
|
1426
|
+
'',
|
|
1427
|
+
'd mm yy',
|
|
1428
|
+
'dd mm yy',
|
|
1429
|
+
'',
|
|
1430
|
+
'dd m yy',
|
|
1431
|
+
'dd mm yy',
|
|
1432
|
+
'dd mmm yy',
|
|
1433
|
+
'dd mmmm yy',
|
|
1434
|
+
'',
|
|
1435
|
+
'dd mm y',
|
|
1436
|
+
'dd mm yyy',
|
|
1437
|
+
'dd mm yyyy',
|
|
1438
|
+
'',
|
|
1439
|
+
'd mmmm yyyy',
|
|
1440
|
+
'',
|
|
1441
|
+
'dd/mm/yy',
|
|
1442
|
+
'dd/mm/yy hh:mm',
|
|
1443
|
+
'dd/mm/yy hh:mm:ss',
|
|
1444
|
+
'dd/mm/yy hh:mm:ss.000',
|
|
1445
|
+
'',
|
|
1446
|
+
'hh:mm',
|
|
1447
|
+
'hh:mm:ss',
|
|
1448
|
+
'hh:mm:ss.000'
|
|
1449
|
+
]
|
|
1450
|
+
|
|
1451
|
+
# Write the same date and time using each of the above formats. The empty
|
|
1452
|
+
# string formats create a blank line to make the example clearer.
|
|
1453
|
+
#
|
|
1454
|
+
row = 0
|
|
1455
|
+
date_formats.each do |date_format|
|
|
1456
|
+
row += 1
|
|
1457
|
+
next if date_format == ''
|
|
1458
|
+
|
|
1459
|
+
# Create a format for the date or time.
|
|
1460
|
+
format = workbook.add_format(
|
|
1461
|
+
:num_format => date_format,
|
|
1462
|
+
:align => 'left'
|
|
1463
|
+
)
|
|
1464
|
+
|
|
1465
|
+
# Write the same date using different formats.
|
|
1466
|
+
worksheet.write_date_time(row, 0, '2004-08-01T12:30:45.123', format)
|
|
1467
|
+
worksheet.write(row, 1, date_format)
|
|
1468
|
+
end
|
|
1469
|
+
|
|
1470
|
+
# The following is an example of an invalid date. It is writen as a string
|
|
1471
|
+
# instead of a number. This is also Excel's default behaviour.
|
|
1472
|
+
#
|
|
1473
|
+
row += 2
|
|
1474
|
+
worksheet.write_date_time(row, 0, '2004-13-01T12:30:45.123')
|
|
1475
|
+
worksheet.write(row, 1, 'Invalid date. Written as string.', bold)
|
|
1476
|
+
|
|
1477
|
+
workbook.close
|
|
1478
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
748
1479
|
end
|
|
749
1480
|
|
|
750
1481
|
def test_defined_name
|
|
751
|
-
xlsx = 'defined_name.xlsx'
|
|
752
|
-
workbook = WriteXLSX.new(xlsx)
|
|
1482
|
+
@xlsx = 'defined_name.xlsx'
|
|
1483
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
753
1484
|
worksheet1 = workbook.add_worksheet
|
|
754
1485
|
worksheet2 = workbook.add_worksheet
|
|
755
1486
|
|
|
@@ -771,12 +1502,12 @@ def test_defined_name
|
|
|
771
1502
|
end
|
|
772
1503
|
|
|
773
1504
|
workbook.close
|
|
774
|
-
compare_xlsx(@
|
|
1505
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
775
1506
|
end
|
|
776
1507
|
|
|
777
1508
|
def test_demo
|
|
778
|
-
xlsx = 'demo.xlsx'
|
|
779
|
-
workbook = WriteXLSX.new(xlsx)
|
|
1509
|
+
@xlsx = 'demo.xlsx'
|
|
1510
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
780
1511
|
worksheet = workbook.add_worksheet('Demo')
|
|
781
1512
|
worksheet2 = workbook.add_worksheet('Another sheet')
|
|
782
1513
|
worksheet3 = workbook.add_worksheet('And another')
|
|
@@ -872,12 +1603,12 @@ def test_demo
|
|
|
872
1603
|
worksheet.write('A19', "Multiple worksheets")
|
|
873
1604
|
|
|
874
1605
|
workbook.close
|
|
875
|
-
compare_xlsx(@
|
|
1606
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
876
1607
|
end
|
|
877
1608
|
|
|
878
1609
|
def test_diag_border
|
|
879
|
-
xlsx = 'diag_border.xlsx'
|
|
880
|
-
workbook = WriteXLSX.new(xlsx)
|
|
1610
|
+
@xlsx = 'diag_border.xlsx'
|
|
1611
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
881
1612
|
worksheet = workbook.add_worksheet()
|
|
882
1613
|
|
|
883
1614
|
|
|
@@ -897,12 +1628,12 @@ def test_diag_border
|
|
|
897
1628
|
worksheet.write('B12', 'Text', format4)
|
|
898
1629
|
|
|
899
1630
|
workbook.close
|
|
900
|
-
compare_xlsx(@
|
|
1631
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
901
1632
|
end
|
|
902
1633
|
|
|
903
1634
|
def test_fit_to_pages
|
|
904
|
-
xlsx = 'fit_to_pages.xlsx'
|
|
905
|
-
workbook = WriteXLSX.new(xlsx)
|
|
1635
|
+
@xlsx = 'fit_to_pages.xlsx'
|
|
1636
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
906
1637
|
worksheet1 = workbook.add_worksheet
|
|
907
1638
|
worksheet2 = workbook.add_worksheet
|
|
908
1639
|
worksheet3 = workbook.add_worksheet
|
|
@@ -922,12 +1653,12 @@ def test_fit_to_pages
|
|
|
922
1653
|
worksheet4.fit_to_pages(1, 0) # 1 page wide and as long as necessary
|
|
923
1654
|
|
|
924
1655
|
workbook.close
|
|
925
|
-
compare_xlsx(@
|
|
1656
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
926
1657
|
end
|
|
927
1658
|
|
|
928
1659
|
def test_formats
|
|
929
|
-
xlsx = 'formats.xlsx'
|
|
930
|
-
workbook = WriteXLSX.new(xlsx)
|
|
1660
|
+
@xlsx = 'formats.xlsx'
|
|
1661
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
931
1662
|
|
|
932
1663
|
# Some common formats
|
|
933
1664
|
center = workbook.add_format(:align => 'center')
|
|
@@ -1404,12 +2135,12 @@ def misc(workbook, center, heading, colors)
|
|
|
1404
2135
|
alignment(workbook, center, heading, colors)
|
|
1405
2136
|
misc(workbook, center, heading, colors)
|
|
1406
2137
|
workbook.close
|
|
1407
|
-
compare_xlsx(@
|
|
2138
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
1408
2139
|
end
|
|
1409
2140
|
|
|
1410
2141
|
def test_headers
|
|
1411
|
-
xlsx = 'headers.xlsx'
|
|
1412
|
-
workbook = WriteXLSX.new(xlsx)
|
|
2142
|
+
@xlsx = 'headers.xlsx'
|
|
2143
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
1413
2144
|
preview = 'Select Print Preview to see the header and footer'
|
|
1414
2145
|
|
|
1415
2146
|
|
|
@@ -1486,12 +2217,12 @@ def test_headers
|
|
|
1486
2217
|
worksheet5.write('A1', preview)
|
|
1487
2218
|
|
|
1488
2219
|
workbook.close
|
|
1489
|
-
compare_xlsx(@
|
|
2220
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
1490
2221
|
end
|
|
1491
2222
|
|
|
1492
2223
|
def test_hide_sheet
|
|
1493
|
-
xlsx = 'hide_sheet.xlsx'
|
|
1494
|
-
workbook = WriteXLSX.new(xlsx)
|
|
2224
|
+
@xlsx = 'hide_sheet.xlsx'
|
|
2225
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
1495
2226
|
worksheet1 = workbook.add_worksheet
|
|
1496
2227
|
worksheet2 = workbook.add_worksheet
|
|
1497
2228
|
worksheet3 = workbook.add_worksheet
|
|
@@ -1508,13 +2239,13 @@ def test_hide_sheet
|
|
|
1508
2239
|
worksheet3.write(0, 0, 'Sheet2 is hidden')
|
|
1509
2240
|
|
|
1510
2241
|
workbook.close
|
|
1511
|
-
compare_xlsx(@
|
|
2242
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
1512
2243
|
end
|
|
1513
2244
|
|
|
1514
2245
|
def test_hyperlink
|
|
1515
|
-
xlsx = 'hyperlink.xlsx'
|
|
2246
|
+
@xlsx = 'hyperlink.xlsx'
|
|
1516
2247
|
# Create a new workbook and add a worksheet
|
|
1517
|
-
workbook = WriteXLSX.new(xlsx)
|
|
2248
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
1518
2249
|
|
|
1519
2250
|
worksheet = workbook.add_worksheet('Hyperlinks')
|
|
1520
2251
|
|
|
@@ -1555,218 +2286,30 @@ def test_hyperlink
|
|
|
1555
2286
|
worksheet.write_string('A11', 'http://www.perl.com/')
|
|
1556
2287
|
|
|
1557
2288
|
workbook.close
|
|
1558
|
-
compare_xlsx(@
|
|
1559
|
-
end
|
|
1560
|
-
|
|
1561
|
-
def test_indent
|
|
1562
|
-
xlsx = 'indent.xlsx'
|
|
1563
|
-
workbook = WriteXLSX.new(xlsx)
|
|
1564
|
-
|
|
1565
|
-
worksheet = workbook.add_worksheet
|
|
1566
|
-
indent1 = workbook.add_format(:indent => 1)
|
|
1567
|
-
indent2 = workbook.add_format(:indent => 2)
|
|
1568
|
-
|
|
1569
|
-
worksheet.set_column('A:A', 40)
|
|
1570
|
-
|
|
1571
|
-
worksheet.write('A1', "This text is indented 1 level", indent1)
|
|
1572
|
-
worksheet.write('A2', "This text is indented 2 levels", indent2)
|
|
1573
|
-
|
|
1574
|
-
workbook.close
|
|
1575
|
-
compare_xlsx(@expected_dir, @result_dir, xlsx)
|
|
1576
|
-
end
|
|
1577
|
-
|
|
1578
|
-
def test_outline
|
|
1579
|
-
xlsx = 'outline.xlsx'
|
|
1580
|
-
# Create a new workbook and add some worksheets
|
|
1581
|
-
workbook = WriteXLSX.new(xlsx)
|
|
1582
|
-
worksheet1 = workbook.add_worksheet('Outlined Rows')
|
|
1583
|
-
worksheet2 = workbook.add_worksheet('Collapsed Rows')
|
|
1584
|
-
worksheet3 = workbook.add_worksheet('Outline Columns')
|
|
1585
|
-
worksheet4 = workbook.add_worksheet('Outline levels')
|
|
1586
|
-
|
|
1587
|
-
# Add a general format
|
|
1588
|
-
bold = workbook.add_format(:bold => 1)
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
###############################################################################
|
|
1592
|
-
#
|
|
1593
|
-
# Example 1: Create a worksheet with outlined rows. It also includes SUBTOTAL()
|
|
1594
|
-
# functions so that it looks like the type of automatic outlines that are
|
|
1595
|
-
# generated when you use the Excel Data.SubTotals menu item.
|
|
1596
|
-
#
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
# For outlines the important parameters are $hidden and $level. Rows with the
|
|
1600
|
-
# same $level are grouped together. The group will be collapsed if $hidden is
|
|
1601
|
-
# non-zero. $height and $XF are assigned default values if they are nil.
|
|
1602
|
-
#
|
|
1603
|
-
# The syntax is: set_row($row, $height, $XF, $hidden, $level, $collapsed)
|
|
1604
|
-
#
|
|
1605
|
-
worksheet1.set_row(1, nil, nil, 0, 2)
|
|
1606
|
-
worksheet1.set_row(2, nil, nil, 0, 2)
|
|
1607
|
-
worksheet1.set_row(3, nil, nil, 0, 2)
|
|
1608
|
-
worksheet1.set_row(4, nil, nil, 0, 2)
|
|
1609
|
-
worksheet1.set_row(5, nil, nil, 0, 1)
|
|
1610
|
-
|
|
1611
|
-
worksheet1.set_row(6, nil, nil, 0, 2)
|
|
1612
|
-
worksheet1.set_row(7, nil, nil, 0, 2)
|
|
1613
|
-
worksheet1.set_row(8, nil, nil, 0, 2)
|
|
1614
|
-
worksheet1.set_row(9, nil, nil, 0, 2)
|
|
1615
|
-
worksheet1.set_row(10, nil, nil, 0, 1)
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
# Add a column format for clarity
|
|
1619
|
-
worksheet1.set_column('A:A', 20)
|
|
1620
|
-
|
|
1621
|
-
# Add the data, labels and formulas
|
|
1622
|
-
worksheet1.write('A1', 'Region', bold)
|
|
1623
|
-
worksheet1.write('A2', 'North')
|
|
1624
|
-
worksheet1.write('A3', 'North')
|
|
1625
|
-
worksheet1.write('A4', 'North')
|
|
1626
|
-
worksheet1.write('A5', 'North')
|
|
1627
|
-
worksheet1.write('A6', 'North Total', bold)
|
|
1628
|
-
|
|
1629
|
-
worksheet1.write('B1', 'Sales', bold)
|
|
1630
|
-
worksheet1.write('B2', 1000)
|
|
1631
|
-
worksheet1.write('B3', 1200)
|
|
1632
|
-
worksheet1.write('B4', 900)
|
|
1633
|
-
worksheet1.write('B5', 1200)
|
|
1634
|
-
worksheet1.write('B6', '=SUBTOTAL(9,B2:B5)', bold)
|
|
1635
|
-
|
|
1636
|
-
worksheet1.write('A7', 'South')
|
|
1637
|
-
worksheet1.write('A8', 'South')
|
|
1638
|
-
worksheet1.write('A9', 'South')
|
|
1639
|
-
worksheet1.write('A10', 'South')
|
|
1640
|
-
worksheet1.write('A11', 'South Total', bold)
|
|
1641
|
-
|
|
1642
|
-
worksheet1.write('B7', 400)
|
|
1643
|
-
worksheet1.write('B8', 600)
|
|
1644
|
-
worksheet1.write('B9', 500)
|
|
1645
|
-
worksheet1.write('B10', 600)
|
|
1646
|
-
worksheet1.write('B11', '=SUBTOTAL(9,B7:B10)', bold)
|
|
1647
|
-
|
|
1648
|
-
worksheet1.write('A12', 'Grand Total', bold)
|
|
1649
|
-
worksheet1.write('B12', '=SUBTOTAL(9,B2:B10)', bold)
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
###############################################################################
|
|
1653
|
-
#
|
|
1654
|
-
# Example 2: Create a worksheet with outlined rows. This is the same as the
|
|
1655
|
-
# previous example except that the rows are collapsed.
|
|
1656
|
-
# Note: We need to indicate the row that contains the collapsed symbol '+'
|
|
1657
|
-
# with the optional parameter, $collapsed.
|
|
1658
|
-
|
|
1659
|
-
# The group will be collapsed if $hidden is non-zero.
|
|
1660
|
-
# The syntax is: set_row($row, $height, $XF, $hidden, $level, $collapsed)
|
|
1661
|
-
#
|
|
1662
|
-
worksheet2.set_row(1, nil, nil, 1, 2)
|
|
1663
|
-
worksheet2.set_row(2, nil, nil, 1, 2)
|
|
1664
|
-
worksheet2.set_row(3, nil, nil, 1, 2)
|
|
1665
|
-
worksheet2.set_row(4, nil, nil, 1, 2)
|
|
1666
|
-
worksheet2.set_row(5, nil, nil, 1, 1)
|
|
1667
|
-
|
|
1668
|
-
worksheet2.set_row(6, nil, nil, 1, 2)
|
|
1669
|
-
worksheet2.set_row(7, nil, nil, 1, 2)
|
|
1670
|
-
worksheet2.set_row(8, nil, nil, 1, 2)
|
|
1671
|
-
worksheet2.set_row(9, nil, nil, 1, 2)
|
|
1672
|
-
worksheet2.set_row(10, nil, nil, 1, 1)
|
|
1673
|
-
worksheet2.set_row(11, nil, nil, 0, 0, 1)
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
# Add a column format for clarity
|
|
1677
|
-
worksheet2.set_column('A:A', 20)
|
|
1678
|
-
|
|
1679
|
-
# Add the data, labels and formulas
|
|
1680
|
-
worksheet2.write('A1', 'Region', bold)
|
|
1681
|
-
worksheet2.write('A2', 'North')
|
|
1682
|
-
worksheet2.write('A3', 'North')
|
|
1683
|
-
worksheet2.write('A4', 'North')
|
|
1684
|
-
worksheet2.write('A5', 'North')
|
|
1685
|
-
worksheet2.write('A6', 'North Total', bold)
|
|
1686
|
-
|
|
1687
|
-
worksheet2.write('B1', 'Sales', bold)
|
|
1688
|
-
worksheet2.write('B2', 1000)
|
|
1689
|
-
worksheet2.write('B3', 1200)
|
|
1690
|
-
worksheet2.write('B4', 900)
|
|
1691
|
-
worksheet2.write('B5', 1200)
|
|
1692
|
-
worksheet2.write('B6', '=SUBTOTAL(9,B2:B5)', bold)
|
|
1693
|
-
|
|
1694
|
-
worksheet2.write('A7', 'South')
|
|
1695
|
-
worksheet2.write('A8', 'South')
|
|
1696
|
-
worksheet2.write('A9', 'South')
|
|
1697
|
-
worksheet2.write('A10', 'South')
|
|
1698
|
-
worksheet2.write('A11', 'South Total', bold)
|
|
1699
|
-
|
|
1700
|
-
worksheet2.write('B7', 400)
|
|
1701
|
-
worksheet2.write('B8', 600)
|
|
1702
|
-
worksheet2.write('B9', 500)
|
|
1703
|
-
worksheet2.write('B10', 600)
|
|
1704
|
-
worksheet2.write('B11', '=SUBTOTAL(9,B7:B10)', bold)
|
|
1705
|
-
|
|
1706
|
-
worksheet2.write('A12', 'Grand Total', bold)
|
|
1707
|
-
worksheet2.write('B12', '=SUBTOTAL(9,B2:B10)', bold)
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
###############################################################################
|
|
1711
|
-
#
|
|
1712
|
-
# Example 3: Create a worksheet with outlined columns.
|
|
1713
|
-
#
|
|
1714
|
-
data = [
|
|
1715
|
-
[ 'Month', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', ' Total' ],
|
|
1716
|
-
[ 'North', 50, 20, 15, 25, 65, 80, '=SUM(B2:G2)' ],
|
|
1717
|
-
[ 'South', 10, 20, 30, 50, 50, 50, '=SUM(B3:G3)' ],
|
|
1718
|
-
[ 'East', 45, 75, 50, 15, 75, 100, '=SUM(B4:G4)' ],
|
|
1719
|
-
[ 'West', 15, 15, 55, 35, 20, 50, '=SUM(B5:G5)' ],
|
|
1720
|
-
]
|
|
1721
|
-
|
|
1722
|
-
# Add bold format to the first row
|
|
1723
|
-
worksheet3.set_row(0, nil, bold)
|
|
1724
|
-
|
|
1725
|
-
# Syntax: set_column($col1, $col2, $width, $XF, $hidden, $level, $collapsed)
|
|
1726
|
-
worksheet3.set_column('A:A', 10, bold)
|
|
1727
|
-
worksheet3.set_column('B:G', 5, nil, 0, 1)
|
|
1728
|
-
worksheet3.set_column('H:H', 10)
|
|
1729
|
-
|
|
1730
|
-
# Write the data and a formula
|
|
1731
|
-
worksheet3.write_col('A1', data)
|
|
1732
|
-
worksheet3.write('H6', '=SUM(H2:H5)', bold)
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
###############################################################################
|
|
1736
|
-
#
|
|
1737
|
-
# Example 4: Show all possible outline levels.
|
|
1738
|
-
#
|
|
1739
|
-
levels = [
|
|
1740
|
-
"Level 1", "Level 2", "Level 3", "Level 4", "Level 5", "Level 6",
|
|
1741
|
-
"Level 7", "Level 6", "Level 5", "Level 4", "Level 3", "Level 2",
|
|
1742
|
-
"Level 1"
|
|
1743
|
-
]
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
worksheet4.write_col('A1', levels)
|
|
1747
|
-
|
|
1748
|
-
worksheet4.set_row(0, nil, nil, nil, 1)
|
|
1749
|
-
worksheet4.set_row(1, nil, nil, nil, 2)
|
|
1750
|
-
worksheet4.set_row(2, nil, nil, nil, 3)
|
|
1751
|
-
worksheet4.set_row(3, nil, nil, nil, 4)
|
|
1752
|
-
worksheet4.set_row(4, nil, nil, nil, 5)
|
|
1753
|
-
worksheet4.set_row(5, nil, nil, nil, 6)
|
|
1754
|
-
worksheet4.set_row(6, nil, nil, nil, 7)
|
|
1755
|
-
worksheet4.set_row(7, nil, nil, nil, 6)
|
|
1756
|
-
worksheet4.set_row(8, nil, nil, nil, 5)
|
|
1757
|
-
worksheet4.set_row(9, nil, nil, nil, 4)
|
|
1758
|
-
worksheet4.set_row(10, nil, nil, nil, 3)
|
|
1759
|
-
worksheet4.set_row(11, nil, nil, nil, 2)
|
|
1760
|
-
worksheet4.set_row(12, nil, nil, nil, 1)
|
|
2289
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
2290
|
+
end
|
|
2291
|
+
|
|
2292
|
+
def test_indent
|
|
2293
|
+
@xlsx = 'indent.xlsx'
|
|
2294
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
2295
|
+
|
|
2296
|
+
worksheet = workbook.add_worksheet
|
|
2297
|
+
indent1 = workbook.add_format(:indent => 1)
|
|
2298
|
+
indent2 = workbook.add_format(:indent => 2)
|
|
2299
|
+
|
|
2300
|
+
worksheet.set_column('A:A', 40)
|
|
2301
|
+
|
|
2302
|
+
worksheet.write('A1', "This text is indented 1 level", indent1)
|
|
2303
|
+
worksheet.write('A2', "This text is indented 2 levels", indent2)
|
|
1761
2304
|
|
|
1762
2305
|
workbook.close
|
|
1763
|
-
compare_xlsx(@
|
|
2306
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
1764
2307
|
end
|
|
1765
2308
|
|
|
1766
2309
|
def test_merge1
|
|
1767
|
-
xlsx = 'merge1.xlsx'
|
|
2310
|
+
@xlsx = 'merge1.xlsx'
|
|
1768
2311
|
# Create a new workbook and add a worksheet
|
|
1769
|
-
workbook = WriteXLSX.new(xlsx)
|
|
2312
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
1770
2313
|
worksheet = workbook.add_worksheet
|
|
1771
2314
|
|
|
1772
2315
|
# Increase the cell size of the merged cells to highlight the formatting.
|
|
@@ -1781,44 +2324,13 @@ def test_merge1
|
|
|
1781
2324
|
worksheet.write_blank(2, 2, format)
|
|
1782
2325
|
worksheet.write_blank(2, 3, format)
|
|
1783
2326
|
workbook.close
|
|
1784
|
-
compare_xlsx(@
|
|
2327
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
1785
2328
|
end
|
|
1786
2329
|
|
|
1787
2330
|
def test_merge2
|
|
1788
2331
|
# Create a new workbook and add a worksheet
|
|
1789
|
-
xlsx = 'merge2.xlsx'
|
|
1790
|
-
workbook = WriteXLSX.new(xlsx)
|
|
1791
|
-
worksheet = workbook.add_worksheet
|
|
1792
|
-
|
|
1793
|
-
# Increase the cell size of the merged cells to highlight the formatting.
|
|
1794
|
-
worksheet.set_column(1, 2, 30)
|
|
1795
|
-
worksheet.set_row(2, 40)
|
|
1796
|
-
|
|
1797
|
-
# Create a merged format
|
|
1798
|
-
format = workbook.add_format(
|
|
1799
|
-
:center_across => 1,
|
|
1800
|
-
:bold => 1,
|
|
1801
|
-
:size => 15,
|
|
1802
|
-
:pattern => 1,
|
|
1803
|
-
:border => 6,
|
|
1804
|
-
:color => 'white',
|
|
1805
|
-
:fg_color => 'green',
|
|
1806
|
-
:border_color => 'yellow',
|
|
1807
|
-
:align => 'vcenter'
|
|
1808
|
-
)
|
|
1809
|
-
|
|
1810
|
-
# Only one cell should contain text, the others should be blank.
|
|
1811
|
-
worksheet.write(2, 1, "Center across selection", format)
|
|
1812
|
-
worksheet.write_blank(2, 2, format)
|
|
1813
|
-
|
|
1814
|
-
workbook.close
|
|
1815
|
-
compare_xlsx(@expected_dir, @result_dir, xlsx)
|
|
1816
|
-
end
|
|
1817
|
-
|
|
1818
|
-
def test_merge3
|
|
1819
|
-
xlsx = 'merge2.xlsx'
|
|
1820
|
-
# Create a new workbook and add a worksheet
|
|
1821
|
-
workbook = WriteXLSX.new(xlsx)
|
|
2332
|
+
@xlsx = 'merge2.xlsx'
|
|
2333
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
1822
2334
|
worksheet = workbook.add_worksheet
|
|
1823
2335
|
|
|
1824
2336
|
# Increase the cell size of the merged cells to highlight the formatting.
|
|
@@ -1843,14 +2355,14 @@ def test_merge3
|
|
|
1843
2355
|
worksheet.write_blank(2, 2, format)
|
|
1844
2356
|
|
|
1845
2357
|
workbook.close
|
|
1846
|
-
compare_xlsx(@
|
|
2358
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
1847
2359
|
end
|
|
1848
2360
|
|
|
1849
2361
|
def test_merge3
|
|
1850
|
-
xlsx = 'merge3.xlsx'
|
|
2362
|
+
@xlsx = 'merge3.xlsx'
|
|
1851
2363
|
|
|
1852
2364
|
# Create a new workbook and add a worksheet
|
|
1853
|
-
workbook = WriteXLSX.new(
|
|
2365
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
1854
2366
|
worksheet = workbook.add_worksheet()
|
|
1855
2367
|
|
|
1856
2368
|
# Increase the cell size of the merged cells to highlight the formatting.
|
|
@@ -1876,13 +2388,13 @@ def test_merge3
|
|
|
1876
2388
|
worksheet.merge_range('B7:D8', 'http://www.perl.com', format)
|
|
1877
2389
|
|
|
1878
2390
|
workbook.close
|
|
1879
|
-
compare_xlsx(@
|
|
2391
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
1880
2392
|
end
|
|
1881
2393
|
|
|
1882
2394
|
def test_merge4
|
|
1883
|
-
xlsx = 'merge4.xlsx'
|
|
2395
|
+
@xlsx = 'merge4.xlsx'
|
|
1884
2396
|
# Create a new workbook and add a worksheet
|
|
1885
|
-
workbook = WriteXLSX.new(xlsx)
|
|
2397
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
1886
2398
|
worksheet = workbook.add_worksheet
|
|
1887
2399
|
|
|
1888
2400
|
# Increase the cell size of the merged cells to highlight the formatting.
|
|
@@ -1946,579 +2458,1487 @@ def test_merge4
|
|
|
1946
2458
|
worksheet.merge_range('B11:D12', 'Justified: ' << 'so on and ' * 18, format4)
|
|
1947
2459
|
|
|
1948
2460
|
workbook.close
|
|
1949
|
-
compare_xlsx(@
|
|
2461
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
1950
2462
|
end
|
|
1951
2463
|
|
|
1952
2464
|
def test_merge5
|
|
1953
|
-
xlsx = 'merge5.xlsx'
|
|
2465
|
+
@xlsx = 'merge5.xlsx'
|
|
2466
|
+
# Create a new workbook and add a worksheet
|
|
2467
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
2468
|
+
worksheet = workbook.add_worksheet
|
|
2469
|
+
|
|
2470
|
+
# Increase the cell size of the merged cells to highlight the formatting.
|
|
2471
|
+
(3 .. 8).each { |row| worksheet.set_row(row, 36 ) }
|
|
2472
|
+
[1, 3, 5].each { |col| worksheet.set_column( col, col, 15 ) }
|
|
2473
|
+
|
|
2474
|
+
###############################################################################
|
|
2475
|
+
#
|
|
2476
|
+
# Rotation 1, letters run from top to bottom
|
|
2477
|
+
#
|
|
2478
|
+
format1 = workbook.add_format(
|
|
2479
|
+
:border => 6,
|
|
2480
|
+
:bold => 1,
|
|
2481
|
+
:color => 'red',
|
|
2482
|
+
:valign => 'vcentre',
|
|
2483
|
+
:align => 'centre',
|
|
2484
|
+
:rotation => 270
|
|
2485
|
+
)
|
|
2486
|
+
|
|
2487
|
+
worksheet.merge_range( 'B4:B9', 'Rotation 270', format1 )
|
|
2488
|
+
|
|
2489
|
+
###############################################################################
|
|
2490
|
+
#
|
|
2491
|
+
# Rotation 2, 90ー anticlockwise
|
|
2492
|
+
#
|
|
2493
|
+
format2 = workbook.add_format(
|
|
2494
|
+
:border => 6,
|
|
2495
|
+
:bold => 1,
|
|
2496
|
+
:color => 'red',
|
|
2497
|
+
:valign => 'vcentre',
|
|
2498
|
+
:align => 'centre',
|
|
2499
|
+
:rotation => 90
|
|
2500
|
+
)
|
|
2501
|
+
|
|
2502
|
+
worksheet.merge_range( 'D4:D9', 'Rotation 90°', format2 )
|
|
2503
|
+
|
|
2504
|
+
###############################################################################
|
|
2505
|
+
#
|
|
2506
|
+
# Rotation 3, 90ー clockwise
|
|
2507
|
+
#
|
|
2508
|
+
format3 = workbook.add_format(
|
|
2509
|
+
:border => 6,
|
|
2510
|
+
:bold => 1,
|
|
2511
|
+
:color => 'red',
|
|
2512
|
+
:valign => 'vcentre',
|
|
2513
|
+
:align => 'centre',
|
|
2514
|
+
:rotation => -90
|
|
2515
|
+
)
|
|
2516
|
+
|
|
2517
|
+
worksheet.merge_range( 'F4:F9', 'Rotation -90°', format3 )
|
|
2518
|
+
|
|
2519
|
+
workbook.close
|
|
2520
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
2521
|
+
end
|
|
2522
|
+
|
|
2523
|
+
def test_merge6
|
|
2524
|
+
@xlsx = 'merge6.xlsx'
|
|
1954
2525
|
# Create a new workbook and add a worksheet
|
|
1955
|
-
workbook = WriteXLSX.new(xlsx)
|
|
2526
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
1956
2527
|
worksheet = workbook.add_worksheet
|
|
1957
2528
|
|
|
1958
|
-
# Increase the cell size of the merged cells to highlight the formatting.
|
|
1959
|
-
(
|
|
1960
|
-
|
|
2529
|
+
# Increase the cell size of the merged cells to highlight the formatting.
|
|
2530
|
+
(2 .. 9).each { |row| worksheet.set_row(row, 36) }
|
|
2531
|
+
worksheet.set_column('B:D', 25)
|
|
2532
|
+
|
|
2533
|
+
# Format for the merged cells.
|
|
2534
|
+
format = workbook.add_format(
|
|
2535
|
+
:border => 6,
|
|
2536
|
+
:bold => 1,
|
|
2537
|
+
:color => 'red',
|
|
2538
|
+
:size => 20,
|
|
2539
|
+
:valign => 'vcentre',
|
|
2540
|
+
:align => 'left',
|
|
2541
|
+
:indent => 1
|
|
2542
|
+
)
|
|
2543
|
+
|
|
2544
|
+
###############################################################################
|
|
2545
|
+
#
|
|
2546
|
+
# Write an Ascii string.
|
|
2547
|
+
#
|
|
2548
|
+
worksheet.merge_range('B3:D4', 'ASCII: A simple string', format)
|
|
2549
|
+
|
|
2550
|
+
###############################################################################
|
|
2551
|
+
#
|
|
2552
|
+
# Write a UTF-8 Unicode string.
|
|
2553
|
+
#
|
|
2554
|
+
smiley = '☺'
|
|
2555
|
+
worksheet.merge_range('B6:D7', "UTF-8: A Unicode smiley #{smiley}", format)
|
|
2556
|
+
|
|
2557
|
+
workbook.close
|
|
2558
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
2559
|
+
end
|
|
2560
|
+
|
|
2561
|
+
def test_outline
|
|
2562
|
+
@xlsx = 'outline.xlsx'
|
|
2563
|
+
# Create a new workbook and add some worksheets
|
|
2564
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
2565
|
+
worksheet1 = workbook.add_worksheet('Outlined Rows')
|
|
2566
|
+
worksheet2 = workbook.add_worksheet('Collapsed Rows')
|
|
2567
|
+
worksheet3 = workbook.add_worksheet('Outline Columns')
|
|
2568
|
+
worksheet4 = workbook.add_worksheet('Outline levels')
|
|
2569
|
+
|
|
2570
|
+
# Add a general format
|
|
2571
|
+
bold = workbook.add_format(:bold => 1)
|
|
2572
|
+
|
|
2573
|
+
|
|
2574
|
+
###############################################################################
|
|
2575
|
+
#
|
|
2576
|
+
# Example 1: Create a worksheet with outlined rows. It also includes SUBTOTAL()
|
|
2577
|
+
# functions so that it looks like the type of automatic outlines that are
|
|
2578
|
+
# generated when you use the Excel Data.SubTotals menu item.
|
|
2579
|
+
#
|
|
2580
|
+
|
|
2581
|
+
|
|
2582
|
+
# For outlines the important parameters are $hidden and $level. Rows with the
|
|
2583
|
+
# same $level are grouped together. The group will be collapsed if $hidden is
|
|
2584
|
+
# non-zero. $height and $XF are assigned default values if they are nil.
|
|
2585
|
+
#
|
|
2586
|
+
# The syntax is: set_row($row, $height, $XF, $hidden, $level, $collapsed)
|
|
2587
|
+
#
|
|
2588
|
+
worksheet1.set_row(1, nil, nil, 0, 2)
|
|
2589
|
+
worksheet1.set_row(2, nil, nil, 0, 2)
|
|
2590
|
+
worksheet1.set_row(3, nil, nil, 0, 2)
|
|
2591
|
+
worksheet1.set_row(4, nil, nil, 0, 2)
|
|
2592
|
+
worksheet1.set_row(5, nil, nil, 0, 1)
|
|
2593
|
+
|
|
2594
|
+
worksheet1.set_row(6, nil, nil, 0, 2)
|
|
2595
|
+
worksheet1.set_row(7, nil, nil, 0, 2)
|
|
2596
|
+
worksheet1.set_row(8, nil, nil, 0, 2)
|
|
2597
|
+
worksheet1.set_row(9, nil, nil, 0, 2)
|
|
2598
|
+
worksheet1.set_row(10, nil, nil, 0, 1)
|
|
2599
|
+
|
|
2600
|
+
|
|
2601
|
+
# Add a column format for clarity
|
|
2602
|
+
worksheet1.set_column('A:A', 20)
|
|
2603
|
+
|
|
2604
|
+
# Add the data, labels and formulas
|
|
2605
|
+
worksheet1.write('A1', 'Region', bold)
|
|
2606
|
+
worksheet1.write('A2', 'North')
|
|
2607
|
+
worksheet1.write('A3', 'North')
|
|
2608
|
+
worksheet1.write('A4', 'North')
|
|
2609
|
+
worksheet1.write('A5', 'North')
|
|
2610
|
+
worksheet1.write('A6', 'North Total', bold)
|
|
2611
|
+
|
|
2612
|
+
worksheet1.write('B1', 'Sales', bold)
|
|
2613
|
+
worksheet1.write('B2', 1000)
|
|
2614
|
+
worksheet1.write('B3', 1200)
|
|
2615
|
+
worksheet1.write('B4', 900)
|
|
2616
|
+
worksheet1.write('B5', 1200)
|
|
2617
|
+
worksheet1.write('B6', '=SUBTOTAL(9,B2:B5)', bold)
|
|
2618
|
+
|
|
2619
|
+
worksheet1.write('A7', 'South')
|
|
2620
|
+
worksheet1.write('A8', 'South')
|
|
2621
|
+
worksheet1.write('A9', 'South')
|
|
2622
|
+
worksheet1.write('A10', 'South')
|
|
2623
|
+
worksheet1.write('A11', 'South Total', bold)
|
|
2624
|
+
|
|
2625
|
+
worksheet1.write('B7', 400)
|
|
2626
|
+
worksheet1.write('B8', 600)
|
|
2627
|
+
worksheet1.write('B9', 500)
|
|
2628
|
+
worksheet1.write('B10', 600)
|
|
2629
|
+
worksheet1.write('B11', '=SUBTOTAL(9,B7:B10)', bold)
|
|
2630
|
+
|
|
2631
|
+
worksheet1.write('A12', 'Grand Total', bold)
|
|
2632
|
+
worksheet1.write('B12', '=SUBTOTAL(9,B2:B10)', bold)
|
|
2633
|
+
|
|
2634
|
+
|
|
2635
|
+
###############################################################################
|
|
2636
|
+
#
|
|
2637
|
+
# Example 2: Create a worksheet with outlined rows. This is the same as the
|
|
2638
|
+
# previous example except that the rows are collapsed.
|
|
2639
|
+
# Note: We need to indicate the row that contains the collapsed symbol '+'
|
|
2640
|
+
# with the optional parameter, $collapsed.
|
|
2641
|
+
|
|
2642
|
+
# The group will be collapsed if $hidden is non-zero.
|
|
2643
|
+
# The syntax is: set_row($row, $height, $XF, $hidden, $level, $collapsed)
|
|
2644
|
+
#
|
|
2645
|
+
worksheet2.set_row(1, nil, nil, 1, 2)
|
|
2646
|
+
worksheet2.set_row(2, nil, nil, 1, 2)
|
|
2647
|
+
worksheet2.set_row(3, nil, nil, 1, 2)
|
|
2648
|
+
worksheet2.set_row(4, nil, nil, 1, 2)
|
|
2649
|
+
worksheet2.set_row(5, nil, nil, 1, 1)
|
|
2650
|
+
|
|
2651
|
+
worksheet2.set_row(6, nil, nil, 1, 2)
|
|
2652
|
+
worksheet2.set_row(7, nil, nil, 1, 2)
|
|
2653
|
+
worksheet2.set_row(8, nil, nil, 1, 2)
|
|
2654
|
+
worksheet2.set_row(9, nil, nil, 1, 2)
|
|
2655
|
+
worksheet2.set_row(10, nil, nil, 1, 1)
|
|
2656
|
+
worksheet2.set_row(11, nil, nil, 0, 0, 1)
|
|
2657
|
+
|
|
2658
|
+
|
|
2659
|
+
# Add a column format for clarity
|
|
2660
|
+
worksheet2.set_column('A:A', 20)
|
|
2661
|
+
|
|
2662
|
+
# Add the data, labels and formulas
|
|
2663
|
+
worksheet2.write('A1', 'Region', bold)
|
|
2664
|
+
worksheet2.write('A2', 'North')
|
|
2665
|
+
worksheet2.write('A3', 'North')
|
|
2666
|
+
worksheet2.write('A4', 'North')
|
|
2667
|
+
worksheet2.write('A5', 'North')
|
|
2668
|
+
worksheet2.write('A6', 'North Total', bold)
|
|
2669
|
+
|
|
2670
|
+
worksheet2.write('B1', 'Sales', bold)
|
|
2671
|
+
worksheet2.write('B2', 1000)
|
|
2672
|
+
worksheet2.write('B3', 1200)
|
|
2673
|
+
worksheet2.write('B4', 900)
|
|
2674
|
+
worksheet2.write('B5', 1200)
|
|
2675
|
+
worksheet2.write('B6', '=SUBTOTAL(9,B2:B5)', bold)
|
|
2676
|
+
|
|
2677
|
+
worksheet2.write('A7', 'South')
|
|
2678
|
+
worksheet2.write('A8', 'South')
|
|
2679
|
+
worksheet2.write('A9', 'South')
|
|
2680
|
+
worksheet2.write('A10', 'South')
|
|
2681
|
+
worksheet2.write('A11', 'South Total', bold)
|
|
2682
|
+
|
|
2683
|
+
worksheet2.write('B7', 400)
|
|
2684
|
+
worksheet2.write('B8', 600)
|
|
2685
|
+
worksheet2.write('B9', 500)
|
|
2686
|
+
worksheet2.write('B10', 600)
|
|
2687
|
+
worksheet2.write('B11', '=SUBTOTAL(9,B7:B10)', bold)
|
|
2688
|
+
|
|
2689
|
+
worksheet2.write('A12', 'Grand Total', bold)
|
|
2690
|
+
worksheet2.write('B12', '=SUBTOTAL(9,B2:B10)', bold)
|
|
2691
|
+
|
|
1961
2692
|
|
|
1962
2693
|
###############################################################################
|
|
1963
2694
|
#
|
|
1964
|
-
#
|
|
2695
|
+
# Example 3: Create a worksheet with outlined columns.
|
|
1965
2696
|
#
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
)
|
|
2697
|
+
data = [
|
|
2698
|
+
[ 'Month', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', ' Total' ],
|
|
2699
|
+
[ 'North', 50, 20, 15, 25, 65, 80, '=SUM(B2:G2)' ],
|
|
2700
|
+
[ 'South', 10, 20, 30, 50, 50, 50, '=SUM(B3:G3)' ],
|
|
2701
|
+
[ 'East', 45, 75, 50, 15, 75, 100, '=SUM(B4:G4)' ],
|
|
2702
|
+
[ 'West', 15, 15, 55, 35, 20, 50, '=SUM(B5:G5)' ],
|
|
2703
|
+
]
|
|
1974
2704
|
|
|
1975
|
-
|
|
2705
|
+
# Add bold format to the first row
|
|
2706
|
+
worksheet3.set_row(0, nil, bold)
|
|
1976
2707
|
|
|
1977
|
-
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
:valign => 'vcentre',
|
|
1986
|
-
:align => 'centre',
|
|
1987
|
-
:rotation => 90
|
|
1988
|
-
)
|
|
2708
|
+
# Syntax: set_column($col1, $col2, $width, $XF, $hidden, $level, $collapsed)
|
|
2709
|
+
worksheet3.set_column('A:A', 10, bold)
|
|
2710
|
+
worksheet3.set_column('B:G', 5, nil, 0, 1)
|
|
2711
|
+
worksheet3.set_column('H:H', 10)
|
|
2712
|
+
|
|
2713
|
+
# Write the data and a formula
|
|
2714
|
+
worksheet3.write_col('A1', data)
|
|
2715
|
+
worksheet3.write('H6', '=SUM(H2:H5)', bold)
|
|
1989
2716
|
|
|
1990
|
-
worksheet.merge_range( 'D4:D9', 'Rotation 90°', format2 )
|
|
1991
2717
|
|
|
1992
2718
|
###############################################################################
|
|
1993
2719
|
#
|
|
1994
|
-
#
|
|
2720
|
+
# Example 4: Show all possible outline levels.
|
|
1995
2721
|
#
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
:align => 'centre',
|
|
2002
|
-
:rotation => -90
|
|
2003
|
-
)
|
|
2004
|
-
|
|
2005
|
-
worksheet.merge_range( 'F4:F9', 'Rotation -90°', format3 )
|
|
2722
|
+
levels = [
|
|
2723
|
+
"Level 1", "Level 2", "Level 3", "Level 4", "Level 5", "Level 6",
|
|
2724
|
+
"Level 7", "Level 6", "Level 5", "Level 4", "Level 3", "Level 2",
|
|
2725
|
+
"Level 1"
|
|
2726
|
+
]
|
|
2006
2727
|
|
|
2007
|
-
workbook.close
|
|
2008
|
-
compare_xlsx(@expected_dir, @result_dir, xlsx)
|
|
2009
|
-
end
|
|
2010
2728
|
|
|
2011
|
-
|
|
2012
|
-
xlsx = 'merge6.xlsx'
|
|
2013
|
-
# Create a new workbook and add a worksheet
|
|
2014
|
-
workbook = WriteXLSX.new(xlsx)
|
|
2015
|
-
worksheet = workbook.add_worksheet
|
|
2729
|
+
worksheet4.write_col('A1', levels)
|
|
2016
2730
|
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2731
|
+
worksheet4.set_row(0, nil, nil, nil, 1)
|
|
2732
|
+
worksheet4.set_row(1, nil, nil, nil, 2)
|
|
2733
|
+
worksheet4.set_row(2, nil, nil, nil, 3)
|
|
2734
|
+
worksheet4.set_row(3, nil, nil, nil, 4)
|
|
2735
|
+
worksheet4.set_row(4, nil, nil, nil, 5)
|
|
2736
|
+
worksheet4.set_row(5, nil, nil, nil, 6)
|
|
2737
|
+
worksheet4.set_row(6, nil, nil, nil, 7)
|
|
2738
|
+
worksheet4.set_row(7, nil, nil, nil, 6)
|
|
2739
|
+
worksheet4.set_row(8, nil, nil, nil, 5)
|
|
2740
|
+
worksheet4.set_row(9, nil, nil, nil, 4)
|
|
2741
|
+
worksheet4.set_row(10, nil, nil, nil, 3)
|
|
2742
|
+
worksheet4.set_row(11, nil, nil, nil, 2)
|
|
2743
|
+
worksheet4.set_row(12, nil, nil, nil, 1)
|
|
2020
2744
|
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2745
|
+
workbook.close
|
|
2746
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
2747
|
+
end
|
|
2748
|
+
=begin
|
|
2749
|
+
def test_outline_collapsed
|
|
2750
|
+
@xlsx = 'outline_collapsed.xlsx'
|
|
2751
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
2752
|
+
worksheet1 = workbook.add_worksheet('Outlined Rows')
|
|
2753
|
+
worksheet2 = workbook.add_worksheet('Collapsed Rows 1')
|
|
2754
|
+
worksheet3 = workbook.add_worksheet('Collapsed Rows 2')
|
|
2755
|
+
worksheet4 = workbook.add_worksheet('Collapsed Rows 3')
|
|
2756
|
+
worksheet5 = workbook.add_worksheet('Outline Columns')
|
|
2757
|
+
worksheet6 = workbook.add_worksheet('Collapsed Columns')
|
|
2031
2758
|
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
# Write an Ascii string.
|
|
2035
|
-
#
|
|
2036
|
-
worksheet.merge_range('B3:D4', 'ASCII: A simple string', format)
|
|
2759
|
+
# Add a general format
|
|
2760
|
+
bold = workbook.add_format(:bold => 1)
|
|
2037
2761
|
|
|
2038
2762
|
###############################################################################
|
|
2039
2763
|
#
|
|
2040
|
-
#
|
|
2764
|
+
# Example 1: Create a worksheet with outlined rows. It also includes SUBTOTAL()
|
|
2765
|
+
# functions so that it looks like the type of automatic outlines that are
|
|
2766
|
+
# generated when you use the Excel Data->SubTotals menu item.
|
|
2041
2767
|
#
|
|
2042
|
-
smiley = '☺'
|
|
2043
|
-
worksheet.merge_range('B6:D7', "UTF-8: A Unicode smiley #{smiley}", format)
|
|
2044
2768
|
|
|
2045
|
-
|
|
2046
|
-
|
|
2047
|
-
|
|
2048
|
-
|
|
2049
|
-
|
|
2050
|
-
|
|
2051
|
-
workbook = WriteXLSX.new(xlsx)
|
|
2052
|
-
worksheet = workbook.add_worksheet
|
|
2769
|
+
# The syntax is: set_row(row, height, XF, hidden, level, collapsed)
|
|
2770
|
+
worksheet1.set_row(1, nil, nil, 0, 2)
|
|
2771
|
+
worksheet1.set_row(2, nil, nil, 0, 2)
|
|
2772
|
+
worksheet1.set_row(3, nil, nil, 0, 2)
|
|
2773
|
+
worksheet1.set_row(4, nil, nil, 0, 2)
|
|
2774
|
+
worksheet1.set_row(5, nil, nil, 0, 1)
|
|
2053
2775
|
|
|
2054
|
-
|
|
2055
|
-
|
|
2776
|
+
worksheet1.set_row(6, nil, nil, 0, 2)
|
|
2777
|
+
worksheet1.set_row(7, nil, nil, 0, 2)
|
|
2778
|
+
worksheet1.set_row(8, nil, nil, 0, 2)
|
|
2779
|
+
worksheet1.set_row(9, nil, nil, 0, 2)
|
|
2780
|
+
worksheet1.set_row(10, nil, nil, 0, 1)
|
|
2056
2781
|
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
end
|
|
2782
|
+
# Write the sub-total data that is common to the row examples.
|
|
2783
|
+
create_sub_totals(worksheet1, bold)
|
|
2060
2784
|
|
|
2061
|
-
|
|
2062
|
-
|
|
2063
|
-
|
|
2785
|
+
###############################################################################
|
|
2786
|
+
#
|
|
2787
|
+
# Example 2: Create a worksheet with collapsed outlined rows.
|
|
2788
|
+
# This is the same as the example 1 except that the all rows are collapsed.
|
|
2789
|
+
# Note: We need to indicate the row that contains the collapsed symbol '+' with
|
|
2790
|
+
# the optional parameter, collapsed.
|
|
2064
2791
|
|
|
2065
|
-
|
|
2066
|
-
|
|
2067
|
-
worksheet2
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
worksheet5 = workbook.add_worksheet
|
|
2071
|
-
worksheet6 = workbook.add_worksheet
|
|
2072
|
-
worksheet7 = workbook.add_worksheet
|
|
2073
|
-
worksheet8 = workbook.add_worksheet
|
|
2792
|
+
worksheet2.set_row(1, nil, nil, 1, 2)
|
|
2793
|
+
worksheet2.set_row(2, nil, nil, 1, 2)
|
|
2794
|
+
worksheet2.set_row(3, nil, nil, 1, 2)
|
|
2795
|
+
worksheet2.set_row(4, nil, nil, 1, 2)
|
|
2796
|
+
worksheet2.set_row(5, nil, nil, 1, 1)
|
|
2074
2797
|
|
|
2798
|
+
worksheet2.set_row(6, nil, nil, 1, 2)
|
|
2799
|
+
worksheet2.set_row(7, nil, nil, 1, 2)
|
|
2800
|
+
worksheet2.set_row(8, nil, nil, 1, 2)
|
|
2801
|
+
worksheet2.set_row(9, nil, nil, 1, 2)
|
|
2802
|
+
worksheet2.set_row(10, nil, nil, 1, 1)
|
|
2075
2803
|
|
|
2076
|
-
|
|
2077
|
-
cell_text = ''
|
|
2078
|
-
comment = ''
|
|
2804
|
+
worksheet2.set_row(11, nil, nil, 0, 0, 1)
|
|
2079
2805
|
|
|
2806
|
+
# Write the sub-total data that is common to the row examples.
|
|
2807
|
+
create_sub_totals(worksheet2, bold)
|
|
2080
2808
|
|
|
2081
2809
|
###############################################################################
|
|
2082
2810
|
#
|
|
2083
|
-
# Example
|
|
2084
|
-
#
|
|
2085
|
-
#
|
|
2086
|
-
|
|
2087
|
-
# Set up some formatting.
|
|
2088
|
-
worksheet1.set_column( 'C:C', 25 )
|
|
2089
|
-
worksheet1.set_row( 2, 50 )
|
|
2090
|
-
worksheet1.set_row( 5, 50 )
|
|
2811
|
+
# Example 3: Create a worksheet with collapsed outlined rows.
|
|
2812
|
+
# Same as the example 1 except that the two sub-totals are collapsed.
|
|
2091
2813
|
|
|
2814
|
+
worksheet3.set_row(1, nil, nil, 1, 2)
|
|
2815
|
+
worksheet3.set_row(2, nil, nil, 1, 2)
|
|
2816
|
+
worksheet3.set_row(3, nil, nil, 1, 2)
|
|
2817
|
+
worksheet3.set_row(4, nil, nil, 1, 2)
|
|
2818
|
+
worksheet3.set_row(5, nil, nil, 0, 1, 1)
|
|
2092
2819
|
|
|
2093
|
-
|
|
2094
|
-
|
|
2820
|
+
worksheet3.set_row(6, nil, nil, 1, 2)
|
|
2821
|
+
worksheet3.set_row(7, nil, nil, 1, 2)
|
|
2822
|
+
worksheet3.set_row(8, nil, nil, 1, 2)
|
|
2823
|
+
worksheet3.set_row(9, nil, nil, 1, 2)
|
|
2824
|
+
worksheet3.set_row(10, nil, nil, 0, 1, 1)
|
|
2095
2825
|
|
|
2096
|
-
|
|
2826
|
+
# Write the sub-total data that is common to the row examples.
|
|
2827
|
+
create_sub_totals(worksheet3, bold)
|
|
2097
2828
|
|
|
2098
|
-
|
|
2099
|
-
|
|
2829
|
+
###############################################################################
|
|
2830
|
+
#
|
|
2831
|
+
# Example 4: Create a worksheet with outlined rows.
|
|
2832
|
+
# Same as the example 1 except that the two sub-totals are collapsed.
|
|
2100
2833
|
|
|
2101
|
-
|
|
2102
|
-
|
|
2834
|
+
worksheet4.set_row(1, nil, nil, 1, 2)
|
|
2835
|
+
worksheet4.set_row(2, nil, nil, 1, 2)
|
|
2836
|
+
worksheet4.set_row(3, nil, nil, 1, 2)
|
|
2837
|
+
worksheet4.set_row(4, nil, nil, 1, 2)
|
|
2838
|
+
worksheet4.set_row(5, nil, nil, 1, 1, 1)
|
|
2103
2839
|
|
|
2104
|
-
|
|
2105
|
-
|
|
2840
|
+
worksheet4.set_row(6, nil, nil, 1, 2)
|
|
2841
|
+
worksheet4.set_row(7, nil, nil, 1, 2)
|
|
2842
|
+
worksheet4.set_row(8, nil, nil, 1, 2)
|
|
2843
|
+
worksheet4.set_row(9, nil, nil, 1, 2)
|
|
2844
|
+
worksheet4.set_row(10, nil, nil, 1, 1, 1)
|
|
2106
2845
|
|
|
2846
|
+
worksheet4.set_row(11, nil, nil, 0, 0, 1)
|
|
2107
2847
|
|
|
2848
|
+
# Write the sub-total data that is common to the row examples.
|
|
2849
|
+
create_sub_totals(worksheet4, bold)
|
|
2108
2850
|
|
|
2109
2851
|
###############################################################################
|
|
2110
2852
|
#
|
|
2111
|
-
# Example
|
|
2853
|
+
# Example 5: Create a worksheet with outlined columns.
|
|
2112
2854
|
#
|
|
2855
|
+
data = [
|
|
2856
|
+
[ 'Month', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Total' ],
|
|
2857
|
+
[ 'North', 50, 20, 15, 25, 65, 80, '=SUM(B2:G2)' ],
|
|
2858
|
+
[ 'South', 10, 20, 30, 50, 50, 50, '=SUM(B3:G3)' ],
|
|
2859
|
+
[ 'East', 45, 75, 50, 15, 75, 100, '=SUM(B4:G4)' ],
|
|
2860
|
+
[ 'West', 15, 15, 55, 35, 20, 50, '=SUM(B5:G6)' ]
|
|
2861
|
+
]
|
|
2113
2862
|
|
|
2114
|
-
#
|
|
2115
|
-
|
|
2116
|
-
worksheet2.set_row( 2, 50 )
|
|
2117
|
-
worksheet2.set_row( 5, 50 )
|
|
2118
|
-
|
|
2863
|
+
# Add bold format to the first row
|
|
2864
|
+
worksheet5.set_row(0, nil, bold)
|
|
2119
2865
|
|
|
2120
|
-
|
|
2866
|
+
# Syntax: set_column(col1, col2, width, XF, hidden, level, collapsed)
|
|
2867
|
+
worksheet5.set_column('A:A', 10, bold)
|
|
2868
|
+
worksheet5.set_column('B:G', 5, nil, 0, 1)
|
|
2869
|
+
worksheet5.set_column('H:H', 10)
|
|
2121
2870
|
|
|
2122
|
-
|
|
2871
|
+
# Write the data and a formula
|
|
2872
|
+
worksheet5.write_col('A1', data)
|
|
2873
|
+
worksheet5.write('H6', '=SUM(H2:H5)', bold)
|
|
2123
2874
|
|
|
2124
|
-
|
|
2125
|
-
|
|
2875
|
+
###############################################################################
|
|
2876
|
+
#
|
|
2877
|
+
# Example 6: Create a worksheet with collapsed outlined columns.
|
|
2878
|
+
# This is the same as the previous example except collapsed columns.
|
|
2126
2879
|
|
|
2880
|
+
# Add bold format to the first row
|
|
2881
|
+
worksheet6.set_row(0, nil, bold)
|
|
2127
2882
|
|
|
2128
|
-
|
|
2883
|
+
# Syntax: set_column(col1, col2, width, XF, hidden, level, collapsed)
|
|
2884
|
+
worksheet6.set_column('A:A', 10, bold)
|
|
2885
|
+
worksheet6.set_column('B:G', 5, nil, 1, 1)
|
|
2886
|
+
worksheet6.set_column('H:H', 10, nil, 0, 0, 1)
|
|
2129
2887
|
|
|
2130
|
-
|
|
2888
|
+
# Write the data and a formula
|
|
2889
|
+
worksheet6.write_col('A1', data)
|
|
2890
|
+
worksheet6.write('H6', '=SUM(H2:H5)', bold)
|
|
2131
2891
|
|
|
2132
|
-
|
|
2133
|
-
|
|
2892
|
+
workbook.close
|
|
2893
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
2894
|
+
end
|
|
2134
2895
|
|
|
2896
|
+
#
|
|
2897
|
+
# This function will generate the same data and sub-totals on each worksheet.
|
|
2898
|
+
#
|
|
2899
|
+
def create_sub_totals(worksheet, bold)
|
|
2900
|
+
# Add a column format for clarity
|
|
2901
|
+
worksheet.set_column('A:A', 20)
|
|
2135
2902
|
|
|
2136
|
-
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
|
|
2140
|
-
|
|
2903
|
+
# Add the data, labels and formulas
|
|
2904
|
+
worksheet.write('A1', 'Region', bold)
|
|
2905
|
+
worksheet.write('A2', 'North')
|
|
2906
|
+
worksheet.write('A3', 'North')
|
|
2907
|
+
worksheet.write('A4', 'North')
|
|
2908
|
+
worksheet.write('A5', 'North')
|
|
2909
|
+
worksheet.write('A6', 'North Total', bold)
|
|
2910
|
+
|
|
2911
|
+
worksheet.write('B1', 'Sales', bold)
|
|
2912
|
+
worksheet.write('B2', 1000)
|
|
2913
|
+
worksheet.write('B3', 1200)
|
|
2914
|
+
worksheet.write('B4', 900)
|
|
2915
|
+
worksheet.write('B5', 1200)
|
|
2916
|
+
worksheet.write('B6', '=SUBTOTAL(9,B2:B5)', bold)
|
|
2917
|
+
|
|
2918
|
+
worksheet.write('A7', 'South')
|
|
2919
|
+
worksheet.write('A8', 'South')
|
|
2920
|
+
worksheet.write('A9', 'South')
|
|
2921
|
+
worksheet.write('A10', 'South')
|
|
2922
|
+
worksheet.write('A11', 'South Total', bold)
|
|
2923
|
+
|
|
2924
|
+
worksheet.write('B7', 400)
|
|
2925
|
+
worksheet.write('B8', 600)
|
|
2926
|
+
worksheet.write('B9', 500)
|
|
2927
|
+
worksheet.write('B10', 600)
|
|
2928
|
+
worksheet.write('B11', '=SUBTOTAL(9,B7:B10)', bold)
|
|
2929
|
+
|
|
2930
|
+
worksheet.write('A12', 'Grand Total', bold)
|
|
2931
|
+
worksheet.write('B12', '=SUBTOTAL(9,B2:B10)', bold)
|
|
2932
|
+
end
|
|
2933
|
+
=end
|
|
2934
|
+
def test_panes
|
|
2935
|
+
@xlsx = 'panes.xlsx'
|
|
2936
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
2141
2937
|
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
worksheet3.
|
|
2145
|
-
|
|
2146
|
-
worksheet3.set_row( 8, 50 )
|
|
2938
|
+
worksheet1 = workbook.add_worksheet('Panes 1')
|
|
2939
|
+
worksheet2 = workbook.add_worksheet('Panes 2')
|
|
2940
|
+
worksheet3 = workbook.add_worksheet('Panes 3')
|
|
2941
|
+
worksheet4 = workbook.add_worksheet('Panes 4')
|
|
2147
2942
|
|
|
2148
|
-
#
|
|
2149
|
-
|
|
2943
|
+
# Freeze panes
|
|
2944
|
+
worksheet1.freeze_panes(1, 0) # 1 row
|
|
2150
2945
|
|
|
2151
|
-
|
|
2946
|
+
worksheet2.freeze_panes(0, 1) # 1 column
|
|
2947
|
+
worksheet3.freeze_panes(1, 1) # 1 row and column
|
|
2152
2948
|
|
|
2153
|
-
|
|
2949
|
+
# Split panes.
|
|
2950
|
+
# The divisions must be specified in terms of row and column dimensions.
|
|
2951
|
+
# The default row height is 15 and the default column width is 8.43
|
|
2952
|
+
#
|
|
2953
|
+
worksheet4.split_panes(15, 8.43) # 1 row and column
|
|
2154
2954
|
|
|
2155
|
-
|
|
2156
|
-
|
|
2955
|
+
#######################################################################
|
|
2956
|
+
#
|
|
2957
|
+
# Set up some formatting and text to highlight the panes
|
|
2958
|
+
#
|
|
2157
2959
|
|
|
2960
|
+
header = workbook.add_format(
|
|
2961
|
+
:align => 'center',
|
|
2962
|
+
:valign => 'vcenter',
|
|
2963
|
+
:fg_color => 0x2A
|
|
2964
|
+
)
|
|
2158
2965
|
|
|
2159
|
-
|
|
2160
|
-
'This cell comment is also visible because we used show_comments().'
|
|
2966
|
+
center = workbook.add_format(:align => 'center')
|
|
2161
2967
|
|
|
2162
|
-
|
|
2968
|
+
#######################################################################
|
|
2969
|
+
#
|
|
2970
|
+
# Sheet 1
|
|
2971
|
+
#
|
|
2163
2972
|
|
|
2164
|
-
|
|
2165
|
-
|
|
2973
|
+
worksheet1.set_column('A:I', 16)
|
|
2974
|
+
worksheet1.set_row(0, 20)
|
|
2975
|
+
worksheet1.set_selection('C3')
|
|
2166
2976
|
|
|
2977
|
+
(0..8).each { |i| worksheet1.write(0, i, 'Scroll down', header) }
|
|
2978
|
+
(1..100).each do |i|
|
|
2979
|
+
(0..8).each {|j| worksheet1.write(i, j, i + 1, center)}
|
|
2980
|
+
end
|
|
2167
2981
|
|
|
2168
|
-
|
|
2982
|
+
#######################################################################
|
|
2983
|
+
#
|
|
2984
|
+
# Sheet 2
|
|
2985
|
+
#
|
|
2169
2986
|
|
|
2170
|
-
|
|
2987
|
+
worksheet2.set_column('A:A', 16)
|
|
2988
|
+
worksheet2.set_selection('C3')
|
|
2171
2989
|
|
|
2172
|
-
|
|
2173
|
-
|
|
2990
|
+
(0..49).each do |i|
|
|
2991
|
+
worksheet2.set_row(i, 15)
|
|
2992
|
+
worksheet2.write(i, 0, 'Scroll right', header)
|
|
2993
|
+
end
|
|
2174
2994
|
|
|
2995
|
+
(0..49).each do |i|
|
|
2996
|
+
(1..25).each {|j| worksheet2.write(i, j, j, center)}
|
|
2997
|
+
end
|
|
2175
2998
|
|
|
2176
|
-
|
|
2999
|
+
#######################################################################
|
|
2177
3000
|
#
|
|
2178
|
-
#
|
|
3001
|
+
# Sheet 3
|
|
2179
3002
|
#
|
|
2180
3003
|
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
worksheet4.set_row( 2, 50 )
|
|
2184
|
-
worksheet4.set_row( 5, 50 )
|
|
2185
|
-
worksheet4.set_row( 8, 50 )
|
|
2186
|
-
worksheet4.set_row( 15, 50 )
|
|
2187
|
-
|
|
2188
|
-
worksheet4.show_comments
|
|
2189
|
-
|
|
2190
|
-
cell_text = 'This cell comment is default size.'
|
|
3004
|
+
worksheet3.set_column('A:Z', 16)
|
|
3005
|
+
worksheet3.set_selection('C3')
|
|
2191
3006
|
|
|
2192
|
-
|
|
3007
|
+
worksheet3.write(0, 0, '', header)
|
|
2193
3008
|
|
|
2194
|
-
|
|
2195
|
-
|
|
3009
|
+
(1..25).each {|i| worksheet3.write(0, i, 'Scroll down', header)}
|
|
3010
|
+
(1..49).each {|i| worksheet3.write(i, 0, 'Scroll right', header)}
|
|
3011
|
+
(1..49).each do |i|
|
|
3012
|
+
(1..25).each {|j| worksheet3.write(i, j, j, center)}
|
|
3013
|
+
end
|
|
2196
3014
|
|
|
3015
|
+
#######################################################################
|
|
3016
|
+
#
|
|
3017
|
+
# Sheet 4
|
|
3018
|
+
#
|
|
2197
3019
|
|
|
2198
|
-
|
|
3020
|
+
worksheet4.set_selection('C3')
|
|
2199
3021
|
|
|
2200
|
-
|
|
3022
|
+
(1..25).each {|i| worksheet4.write(0, i, 'Scroll', center)}
|
|
3023
|
+
(1..49).each {|i| worksheet4.write(i, 0, 'Scroll', center)}
|
|
3024
|
+
(1..49).each do |i|
|
|
3025
|
+
(1..25).each {|j| worksheet4.write(i, j, j, center)}
|
|
3026
|
+
end
|
|
2201
3027
|
|
|
2202
|
-
|
|
2203
|
-
|
|
3028
|
+
workbook.close
|
|
3029
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
3030
|
+
end
|
|
2204
3031
|
|
|
3032
|
+
def test_print_scale
|
|
3033
|
+
@xlsx = 'print_scale.xlsx'
|
|
3034
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
3035
|
+
worksheet1 = workbook.add_worksheet
|
|
3036
|
+
worksheet2 = workbook.add_worksheet
|
|
3037
|
+
worksheet3 = workbook.add_worksheet
|
|
2205
3038
|
|
|
2206
|
-
|
|
3039
|
+
worksheet1.write(0, 0, "print_scale(100)")
|
|
3040
|
+
worksheet1.print_scale = 100
|
|
2207
3041
|
|
|
2208
|
-
|
|
3042
|
+
worksheet2.write(0, 0, "print_scale(50)")
|
|
3043
|
+
worksheet2.print_scale = 50
|
|
2209
3044
|
|
|
2210
|
-
|
|
2211
|
-
|
|
3045
|
+
worksheet3.write(0, 0, "print_scale(200)")
|
|
3046
|
+
worksheet3.print_scale = 200
|
|
2212
3047
|
|
|
3048
|
+
workbook.close
|
|
3049
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
3050
|
+
end
|
|
2213
3051
|
|
|
2214
|
-
|
|
3052
|
+
def test_properties
|
|
3053
|
+
@xlsx = 'properties.xlsx'
|
|
3054
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
3055
|
+
worksheet = workbook.add_worksheet
|
|
2215
3056
|
|
|
2216
|
-
|
|
3057
|
+
workbook.set_properties(
|
|
3058
|
+
:title => 'This is an example spreadsheet',
|
|
3059
|
+
:subject => 'With document properties',
|
|
3060
|
+
:author => 'John McNamara',
|
|
3061
|
+
:manager => 'Dr. Heinz Doofenshmirtz',
|
|
3062
|
+
:company => 'of Wolves',
|
|
3063
|
+
:category => 'Example spreadsheets',
|
|
3064
|
+
:keywords => 'Sample, Example, Properties',
|
|
3065
|
+
:comments => 'Created with Perl and Excel::Writer::XLSX',
|
|
3066
|
+
:status => 'Quo'
|
|
3067
|
+
)
|
|
2217
3068
|
|
|
2218
|
-
|
|
2219
|
-
|
|
3069
|
+
worksheet.set_column('A:A', 70)
|
|
3070
|
+
worksheet.write('A1', "Select 'Office Button -> Prepare -> Properties' to see the file properties.")
|
|
2220
3071
|
|
|
3072
|
+
workbook.close
|
|
3073
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
3074
|
+
end
|
|
2221
3075
|
|
|
2222
|
-
|
|
3076
|
+
def test_protection
|
|
3077
|
+
@xlsx = 'protection.xlsx'
|
|
3078
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
3079
|
+
worksheet = workbook.add_worksheet
|
|
2223
3080
|
|
|
2224
|
-
|
|
3081
|
+
# Create some format objects
|
|
3082
|
+
unlocked = workbook.add_format(:locked => 0)
|
|
3083
|
+
hidden = workbook.add_format(:hidden => 1)
|
|
2225
3084
|
|
|
2226
|
-
|
|
2227
|
-
|
|
3085
|
+
# Format the columns
|
|
3086
|
+
worksheet.set_column('A:A', 45)
|
|
3087
|
+
worksheet.set_selection('B3')
|
|
2228
3088
|
|
|
3089
|
+
# Protect the worksheet
|
|
3090
|
+
worksheet.protect
|
|
2229
3091
|
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
|
|
2233
|
-
#
|
|
3092
|
+
# Examples of cell locking and hiding.
|
|
3093
|
+
worksheet.write('A1', 'Cell B1 is locked. It cannot be edited.')
|
|
3094
|
+
worksheet.write_formula('B1', '=1+2', nil, 3) # Locked by default.
|
|
2234
3095
|
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
worksheet5.set_row( 5, 50 )
|
|
2238
|
-
worksheet5.set_row( 8, 50 )
|
|
2239
|
-
worksheet5.set_row( 11, 50 )
|
|
3096
|
+
worksheet.write('A2', 'Cell B2 is unlocked. It can be edited.')
|
|
3097
|
+
worksheet.write_formula('B2', '=1+2', unlocked, 3)
|
|
2240
3098
|
|
|
2241
|
-
|
|
3099
|
+
worksheet.write('A3', "Cell B3 is hidden. The formula isn't visible.")
|
|
3100
|
+
worksheet.write_formula('B3', '=1+2', hidden, 3)
|
|
2242
3101
|
|
|
2243
|
-
|
|
3102
|
+
worksheet.write('A5', 'Use Menu->Tools->Protection->Unprotect Sheet')
|
|
3103
|
+
worksheet.write('A6', 'to remove the worksheet protection.')
|
|
2244
3104
|
|
|
2245
|
-
|
|
3105
|
+
workbook.close
|
|
3106
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
3107
|
+
end
|
|
2246
3108
|
|
|
2247
|
-
|
|
2248
|
-
|
|
3109
|
+
def test_regions
|
|
3110
|
+
@xlsx = 'regions.xlsx'
|
|
3111
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
2249
3112
|
|
|
3113
|
+
# Add some worksheets
|
|
3114
|
+
north = workbook.add_worksheet('North')
|
|
3115
|
+
south = workbook.add_worksheet('South')
|
|
3116
|
+
east = workbook.add_worksheet('East')
|
|
3117
|
+
west = workbook.add_worksheet('West')
|
|
2250
3118
|
|
|
2251
|
-
|
|
3119
|
+
# Add a Format
|
|
3120
|
+
format = workbook.add_format
|
|
3121
|
+
format.set_bold
|
|
3122
|
+
format.set_color('blue')
|
|
2252
3123
|
|
|
2253
|
-
|
|
3124
|
+
# Add a caption to each worksheet
|
|
3125
|
+
workbook.sheets.each do |worksheet|
|
|
3126
|
+
worksheet.write(0, 0, 'Sales', format)
|
|
3127
|
+
end
|
|
2254
3128
|
|
|
2255
|
-
|
|
2256
|
-
|
|
3129
|
+
# Write some data
|
|
3130
|
+
north.write(0, 1, 200000)
|
|
3131
|
+
south.write(0, 1, 100000)
|
|
3132
|
+
east.write(0, 1, 150000)
|
|
3133
|
+
west.write(0, 1, 100000)
|
|
2257
3134
|
|
|
3135
|
+
# Set the active worksheet
|
|
3136
|
+
south.activate
|
|
2258
3137
|
|
|
2259
|
-
|
|
3138
|
+
# Set the width of the first column
|
|
3139
|
+
south.set_column(0, 0, 20)
|
|
2260
3140
|
|
|
2261
|
-
|
|
3141
|
+
# Set the active cell
|
|
3142
|
+
south.set_selection(0, 1)
|
|
2262
3143
|
|
|
2263
|
-
|
|
2264
|
-
|
|
3144
|
+
workbook.close
|
|
3145
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
3146
|
+
end
|
|
2265
3147
|
|
|
3148
|
+
def test_rich_strings
|
|
3149
|
+
@xlsx = 'rich_strings.xlsx'
|
|
3150
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
3151
|
+
worksheet = workbook.add_worksheet
|
|
2266
3152
|
|
|
2267
|
-
|
|
3153
|
+
worksheet.set_column('A:A', 30)
|
|
2268
3154
|
|
|
2269
|
-
|
|
3155
|
+
# Set some formats to use.
|
|
3156
|
+
bold = workbook.add_format(:bold => 1)
|
|
3157
|
+
italic = workbook.add_format(:italic => 1)
|
|
3158
|
+
red = workbook.add_format(:color => 'red')
|
|
3159
|
+
blue = workbook.add_format(:color => 'blue')
|
|
3160
|
+
center = workbook.add_format(:align => 'center')
|
|
3161
|
+
superc = workbook.add_format(:font_script => 1)
|
|
2270
3162
|
|
|
2271
|
-
|
|
2272
|
-
|
|
3163
|
+
# Write some strings with multiple formats.
|
|
3164
|
+
worksheet.write_rich_string('A1',
|
|
3165
|
+
'This is ', bold, 'bold', ' and this is ', italic, 'italic')
|
|
2273
3166
|
|
|
3167
|
+
worksheet.write_rich_string('A3',
|
|
3168
|
+
'This is ', red, 'red', ' and this is ', blue, 'blue')
|
|
2274
3169
|
|
|
2275
|
-
|
|
2276
|
-
|
|
2277
|
-
# Example 6. Demonstrates changes to the comment background colour.
|
|
2278
|
-
#
|
|
3170
|
+
worksheet.write_rich_string('A5',
|
|
3171
|
+
'Some ', bold, 'bold text', ' centered', center)
|
|
2279
3172
|
|
|
2280
|
-
|
|
2281
|
-
|
|
2282
|
-
worksheet6.set_row( 5, 50 )
|
|
2283
|
-
worksheet6.set_row( 8, 50 )
|
|
3173
|
+
worksheet.write_rich_string('A7',
|
|
3174
|
+
italic, 'j = k', superc, '(n-1)', center)
|
|
2284
3175
|
|
|
2285
|
-
|
|
3176
|
+
workbook.close
|
|
3177
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
3178
|
+
end
|
|
2286
3179
|
|
|
2287
|
-
|
|
3180
|
+
def test_right_to_left
|
|
3181
|
+
@xlsx = 'right_to_left.xlsx'
|
|
3182
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
3183
|
+
worksheet1 = workbook.add_worksheet
|
|
3184
|
+
worksheet2 = workbook.add_worksheet
|
|
2288
3185
|
|
|
2289
|
-
|
|
3186
|
+
worksheet2.right_to_left
|
|
2290
3187
|
|
|
2291
|
-
|
|
2292
|
-
|
|
3188
|
+
worksheet1.write(0, 0, 'Hello') # A1, B1, C1, ...
|
|
3189
|
+
worksheet2.write(0, 0, 'Hello') # ..., C1, B1, A1
|
|
3190
|
+
workbook.close
|
|
3191
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
3192
|
+
end
|
|
2293
3193
|
|
|
3194
|
+
def test_shape1
|
|
3195
|
+
@xlsx = 'shape1.xlsx'
|
|
3196
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
3197
|
+
worksheet = workbook.add_worksheet
|
|
2294
3198
|
|
|
2295
|
-
|
|
3199
|
+
# Add a circle, with centered text.
|
|
3200
|
+
ellipse = workbook.add_shape(
|
|
3201
|
+
:type => 'ellipse',
|
|
3202
|
+
:text => "Hello\nWorld",
|
|
3203
|
+
:width => 60,
|
|
3204
|
+
:height => 60
|
|
3205
|
+
)
|
|
2296
3206
|
|
|
2297
|
-
|
|
3207
|
+
worksheet.insert_shape('A1', ellipse, 50, 50)
|
|
2298
3208
|
|
|
2299
|
-
|
|
2300
|
-
|
|
3209
|
+
# Add a plus sign.
|
|
3210
|
+
plus = workbook.add_shape(:type => 'plus', :width => 20, :height => 20)
|
|
3211
|
+
worksheet.insert_shape('D8', plus)
|
|
2301
3212
|
|
|
3213
|
+
workbook.close
|
|
3214
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
3215
|
+
end
|
|
2302
3216
|
|
|
2303
|
-
|
|
3217
|
+
def test_shape2
|
|
3218
|
+
@xlsx = 'shape2.xlsx'
|
|
3219
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
3220
|
+
worksheet = workbook.add_worksheet
|
|
2304
3221
|
|
|
2305
|
-
|
|
3222
|
+
worksheet.hide_gridlines(2)
|
|
2306
3223
|
|
|
2307
|
-
|
|
2308
|
-
|
|
3224
|
+
plain = workbook.add_shape(
|
|
3225
|
+
:type => 'smileyFace',
|
|
3226
|
+
:text => "Plain",
|
|
3227
|
+
:width => 100,
|
|
3228
|
+
:height => 100
|
|
3229
|
+
)
|
|
2309
3230
|
|
|
3231
|
+
bbformat = workbook.add_format(
|
|
3232
|
+
:color => 'red',
|
|
3233
|
+
:font => 'Lucida Calligraphy'
|
|
3234
|
+
)
|
|
3235
|
+
|
|
3236
|
+
bbformat.set_bold
|
|
3237
|
+
bbformat.set_underline
|
|
3238
|
+
bbformat.set_italic
|
|
3239
|
+
|
|
3240
|
+
decor = workbook.add_shape(
|
|
3241
|
+
:type => 'smileyFace',
|
|
3242
|
+
:text => 'Decorated',
|
|
3243
|
+
:rotation => 45,
|
|
3244
|
+
:width => 200,
|
|
3245
|
+
:height => 100,
|
|
3246
|
+
:format => bbformat,
|
|
3247
|
+
:line_type => 'sysDot',
|
|
3248
|
+
:line_weight => 3,
|
|
3249
|
+
:fill => 'FFFF00',
|
|
3250
|
+
:line => '3366FF'
|
|
3251
|
+
)
|
|
3252
|
+
|
|
3253
|
+
worksheet.insert_shape('A1', plain, 50, 50)
|
|
3254
|
+
worksheet.insert_shape('A1', decor, 250, 50)
|
|
2310
3255
|
|
|
2311
|
-
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
#
|
|
3256
|
+
workbook.close
|
|
3257
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
3258
|
+
end
|
|
2315
3259
|
|
|
2316
|
-
|
|
2317
|
-
|
|
2318
|
-
|
|
2319
|
-
|
|
3260
|
+
def test_shape3
|
|
3261
|
+
@xlsx = 'shape3.xlsx'
|
|
3262
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
3263
|
+
worksheet = workbook.add_worksheet
|
|
2320
3264
|
|
|
2321
|
-
|
|
2322
|
-
|
|
3265
|
+
normal = workbook.add_shape(
|
|
3266
|
+
:name => 'chip',
|
|
3267
|
+
:type => 'diamond',
|
|
3268
|
+
:text => 'Normal',
|
|
3269
|
+
:width => 100,
|
|
3270
|
+
:height => 100
|
|
3271
|
+
)
|
|
2323
3272
|
|
|
2324
|
-
|
|
2325
|
-
|
|
3273
|
+
worksheet.insert_shape('A1', normal, 50, 50)
|
|
3274
|
+
normal[:text] = 'Scaled 3w x 2h'
|
|
3275
|
+
normal[:name] = 'Hope'
|
|
3276
|
+
worksheet.insert_shape('A1', normal, 250, 50, 3, 2)
|
|
2326
3277
|
|
|
2327
|
-
|
|
3278
|
+
workbook.close
|
|
3279
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
3280
|
+
end
|
|
2328
3281
|
|
|
2329
|
-
|
|
2330
|
-
|
|
3282
|
+
def test_shape4
|
|
3283
|
+
@xlsx = 'shape4.xlsx'
|
|
3284
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
3285
|
+
worksheet = workbook.add_worksheet
|
|
3286
|
+
worksheet.hide_gridlines(2)
|
|
2331
3287
|
|
|
3288
|
+
type = 'rect'
|
|
3289
|
+
shape = workbook.add_shape(
|
|
3290
|
+
:type => type,
|
|
3291
|
+
:width => 90,
|
|
3292
|
+
:height => 90
|
|
3293
|
+
)
|
|
2332
3294
|
|
|
2333
|
-
|
|
2334
|
-
|
|
2335
|
-
|
|
2336
|
-
|
|
3295
|
+
(1..10).each do |n|
|
|
3296
|
+
# Change the last 5 rectangles to stars. Previously
|
|
3297
|
+
# inserted shapes stay as rectangles.
|
|
3298
|
+
type = 'star5' if n == 6
|
|
3299
|
+
shape[:type] = type
|
|
3300
|
+
shape[:text] = "#{type} #{n}"
|
|
3301
|
+
worksheet.insert_shape('A1', shape, n * 100, 50)
|
|
3302
|
+
end
|
|
2337
3303
|
|
|
2338
|
-
|
|
3304
|
+
stencil = workbook.add_shape(
|
|
3305
|
+
:stencil => 1, # The default.
|
|
3306
|
+
:width => 90,
|
|
3307
|
+
:height => 90,
|
|
3308
|
+
:text => 'started as a box'
|
|
3309
|
+
)
|
|
3310
|
+
worksheet.insert_shape('A1', stencil, 100, 150)
|
|
2339
3311
|
|
|
2340
|
-
|
|
2341
|
-
|
|
3312
|
+
stencil[:stencil] = 0
|
|
3313
|
+
worksheet.insert_shape('A1', stencil, 200, 150)
|
|
3314
|
+
worksheet.insert_shape('A1', stencil, 300, 150)
|
|
2342
3315
|
|
|
3316
|
+
# Ooopa! Changed my mind.
|
|
3317
|
+
# Change the rectangle to an ellipse (circle),
|
|
3318
|
+
# for the last two shapes.
|
|
3319
|
+
stencil[:type] = 'ellipse'
|
|
3320
|
+
stencil[:text] = 'Now its a circle'
|
|
2343
3321
|
|
|
2344
|
-
|
|
2345
|
-
|
|
2346
|
-
|
|
2347
|
-
"by #{author}' in the status bar at the bottom"
|
|
2348
|
-
comment = 'Hello.'
|
|
3322
|
+
workbook.close
|
|
3323
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
3324
|
+
end
|
|
2349
3325
|
|
|
2350
|
-
|
|
2351
|
-
|
|
3326
|
+
def test_shape5
|
|
3327
|
+
@xlsx = 'shape5.xlsx'
|
|
3328
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
3329
|
+
worksheet = workbook.add_worksheet
|
|
2352
3330
|
|
|
3331
|
+
s1 = workbook.add_shape(
|
|
3332
|
+
:type => 'ellipse',
|
|
3333
|
+
:width => 60,
|
|
3334
|
+
:height => 60
|
|
3335
|
+
)
|
|
3336
|
+
worksheet.insert_shape('A1', s1, 50, 50)
|
|
2353
3337
|
|
|
3338
|
+
s2 = workbook.add_shape(
|
|
3339
|
+
:type => 'plus',
|
|
3340
|
+
:width => 20,
|
|
3341
|
+
:height => 20
|
|
3342
|
+
)
|
|
3343
|
+
worksheet.insert_shape('A1', s2, 250, 200)
|
|
2354
3344
|
|
|
3345
|
+
# Create a connector to link the two shapes.
|
|
3346
|
+
cxn_shape = workbook.add_shape(:type => 'bentConnector3')
|
|
2355
3347
|
|
|
2356
|
-
|
|
2357
|
-
|
|
2358
|
-
|
|
2359
|
-
#
|
|
3348
|
+
# Link the start of the connector to the right side.
|
|
3349
|
+
cxn_shape[:start] = s1[:id]
|
|
3350
|
+
cxn_shape[:start_index] = 4 # 4th connection pt, clockwise from top(0).
|
|
3351
|
+
cxn_shape[:start_side] = 'b' # r)ight or b)ottom.
|
|
2360
3352
|
|
|
2361
|
-
#
|
|
2362
|
-
|
|
2363
|
-
|
|
3353
|
+
# Link the end of the connector to the left side.
|
|
3354
|
+
cxn_shape[:end] = s2[:id]
|
|
3355
|
+
cxn_shape[:end_index] = 0 # clockwise from top(0).
|
|
3356
|
+
cxn_shape[:end_side] = 't' # t)op.
|
|
2364
3357
|
|
|
2365
|
-
|
|
3358
|
+
worksheet.insert_shape('A1', cxn_shape, 0, 0)
|
|
2366
3359
|
|
|
3360
|
+
workbook.close
|
|
3361
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
3362
|
+
end
|
|
2367
3363
|
|
|
2368
|
-
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
|
|
3364
|
+
def test_shape6
|
|
3365
|
+
@xlsx = 'shape6.xlsx'
|
|
3366
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
3367
|
+
worksheet = workbook.add_worksheet
|
|
2372
3368
|
|
|
2373
|
-
|
|
3369
|
+
s1 = workbook.add_shape(
|
|
3370
|
+
:type => 'chevron',
|
|
3371
|
+
:width => 60,
|
|
3372
|
+
:height => 60
|
|
3373
|
+
)
|
|
3374
|
+
worksheet.insert_shape('A1', s1, 50, 50)
|
|
2374
3375
|
|
|
2375
|
-
|
|
2376
|
-
|
|
3376
|
+
s2 = workbook.add_shape(
|
|
3377
|
+
:type => 'pentagon',
|
|
3378
|
+
:width => 20,
|
|
3379
|
+
:height => 20
|
|
3380
|
+
)
|
|
3381
|
+
worksheet.insert_shape('A1', s2, 250, 200)
|
|
2377
3382
|
|
|
3383
|
+
# Create a connector to link the two shapes.
|
|
3384
|
+
cxn_shape = workbook.add_shape(:type => 'curvedConnector3')
|
|
2378
3385
|
|
|
2379
|
-
|
|
2380
|
-
|
|
2381
|
-
|
|
2382
|
-
|
|
2383
|
-
"run time and thus the comment box is stretched as well.\n\n" +
|
|
2384
|
-
'Use set_row() to specify the row height explicitly to avoid ' +
|
|
2385
|
-
'this problem.'
|
|
3386
|
+
# Link the start of the connector to the right side.
|
|
3387
|
+
cxn_shape[:start] = s1[:id]
|
|
3388
|
+
cxn_shape[:start_index] = 2 # 2nd connection pt, clockwise from top(0).
|
|
3389
|
+
cxn_shape[:start_side] = 'r' # r)ight or b)ottom.
|
|
2386
3390
|
|
|
2387
|
-
|
|
3391
|
+
# Link the end of the connector to the left side.
|
|
3392
|
+
cxn_shape[:end] = s2[:id]
|
|
3393
|
+
cxn_shape[:end_index] = 4 # 4th connection pt, clockwise from top(0).
|
|
3394
|
+
cxn_shape[:end_side] = 'l' # l)eft or t)op.
|
|
2388
3395
|
|
|
2389
|
-
|
|
2390
|
-
worksheet8.write_comment( 'C6', comment )
|
|
3396
|
+
worksheet.insert_shape('A1', cxn_shape, 0, 0)
|
|
2391
3397
|
|
|
2392
3398
|
workbook.close
|
|
2393
|
-
compare_xlsx(@
|
|
3399
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
2394
3400
|
end
|
|
2395
3401
|
|
|
2396
|
-
def
|
|
2397
|
-
xlsx = '
|
|
2398
|
-
workbook = WriteXLSX.new(xlsx)
|
|
2399
|
-
|
|
2400
|
-
worksheet2 = workbook.add_worksheet
|
|
2401
|
-
worksheet3 = workbook.add_worksheet
|
|
3402
|
+
def test_shape7
|
|
3403
|
+
@xlsx = 'shape7.xlsx'
|
|
3404
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
3405
|
+
worksheet = workbook.add_worksheet
|
|
2402
3406
|
|
|
2403
|
-
|
|
2404
|
-
|
|
3407
|
+
# Add a circle, with centered text. c is for circle, not center.
|
|
3408
|
+
cw = 60
|
|
3409
|
+
ch = 60
|
|
3410
|
+
cx = 210
|
|
3411
|
+
cy = 190
|
|
3412
|
+
|
|
3413
|
+
ellipse = workbook.add_shape(
|
|
3414
|
+
:type => 'ellipse',
|
|
3415
|
+
:id => 2,
|
|
3416
|
+
:text => "Hello\nWorld",
|
|
3417
|
+
:width => cw,
|
|
3418
|
+
:height => ch
|
|
3419
|
+
)
|
|
3420
|
+
worksheet.insert_shape('A1', ellipse, cx, cy)
|
|
3421
|
+
|
|
3422
|
+
# Add a plus sign at 4 different positions around the circle.
|
|
3423
|
+
pw = 20
|
|
3424
|
+
ph = 20
|
|
3425
|
+
px = 120
|
|
3426
|
+
py = 250
|
|
3427
|
+
|
|
3428
|
+
plus = workbook.add_shape(
|
|
3429
|
+
:type => 'plus',
|
|
3430
|
+
:id => 3,
|
|
3431
|
+
:width => pw,
|
|
3432
|
+
:height => ph
|
|
3433
|
+
)
|
|
2405
3434
|
|
|
2406
|
-
|
|
2407
|
-
|
|
3435
|
+
p1 = worksheet.insert_shape('A1', plus, 350, 350)
|
|
3436
|
+
p2 = worksheet.insert_shape('A1', plus, 150, 350)
|
|
3437
|
+
p3 = worksheet.insert_shape('A1', plus, 350, 150)
|
|
3438
|
+
plus[:adjustments] = 35 # change shape of plus symbol.
|
|
3439
|
+
p4 = worksheet.insert_shape('A1', plus, 150, 150)
|
|
2408
3440
|
|
|
2409
|
-
|
|
2410
|
-
worksheet3.print_scale = 200
|
|
3441
|
+
cxn_shape = workbook.add_shape(:type => 'bentConnector3', :fill => 0)
|
|
2411
3442
|
|
|
2412
|
-
|
|
2413
|
-
|
|
2414
|
-
|
|
3443
|
+
cxn_shape[:start] = ellipse[:id]
|
|
3444
|
+
cxn_shape[:start_index] = 4 # 4th connection pt, clockwise from top(0).
|
|
3445
|
+
cxn_shape[:start_side] = 'b' # r)ight or b)ottom.
|
|
2415
3446
|
|
|
2416
|
-
|
|
2417
|
-
|
|
2418
|
-
|
|
2419
|
-
worksheet
|
|
3447
|
+
cxn_shape[:end] = p1[:id]
|
|
3448
|
+
cxn_shape[:end_index] = 0
|
|
3449
|
+
cxn_shape[:end_side] = 't' # l)eft or t)op.
|
|
3450
|
+
worksheet.insert_shape('A1', cxn_shape, 0, 0)
|
|
2420
3451
|
|
|
2421
|
-
|
|
2422
|
-
|
|
2423
|
-
:subject => 'With document properties',
|
|
2424
|
-
:author => 'John McNamara',
|
|
2425
|
-
:manager => 'Dr. Heinz Doofenshmirtz',
|
|
2426
|
-
:company => 'of Wolves',
|
|
2427
|
-
:category => 'Example spreadsheets',
|
|
2428
|
-
:keywords => 'Sample, Example, Properties',
|
|
2429
|
-
:comments => 'Created with Perl and Excel::Writer::XLSX',
|
|
2430
|
-
:status => 'Quo'
|
|
2431
|
-
)
|
|
3452
|
+
cxn_shape[:end] = p2[:id]
|
|
3453
|
+
worksheet.insert_shape('A1', cxn_shape, 0, 0)
|
|
2432
3454
|
|
|
2433
|
-
|
|
2434
|
-
worksheet.
|
|
3455
|
+
cxn_shape[:end] = p3[:id]
|
|
3456
|
+
worksheet.insert_shape('A1', cxn_shape, 0, 0)
|
|
3457
|
+
|
|
3458
|
+
cxn_shape[:end] = p4[:id]
|
|
3459
|
+
cxn_shape[:adjustments] = [-50, 45, 120]
|
|
3460
|
+
worksheet.insert_shape('A1', cxn_shape, 0, 0)
|
|
2435
3461
|
|
|
2436
3462
|
workbook.close
|
|
2437
|
-
compare_xlsx(@
|
|
3463
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
2438
3464
|
end
|
|
2439
3465
|
|
|
2440
|
-
def
|
|
2441
|
-
xlsx = '
|
|
2442
|
-
workbook = WriteXLSX.new(xlsx)
|
|
3466
|
+
def test_shape8
|
|
3467
|
+
@xlsx = 'shape8.xlsx'
|
|
3468
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
2443
3469
|
worksheet = workbook.add_worksheet
|
|
2444
3470
|
|
|
2445
|
-
#
|
|
2446
|
-
|
|
2447
|
-
|
|
3471
|
+
# Add a circle, with centered text. c is for circle, not center.
|
|
3472
|
+
cw = 60
|
|
3473
|
+
ch = 60
|
|
3474
|
+
cx = 210
|
|
3475
|
+
cy = 190
|
|
3476
|
+
|
|
3477
|
+
ellipse = workbook.add_shape(
|
|
3478
|
+
:type => 'ellipse',
|
|
3479
|
+
:id => 2,
|
|
3480
|
+
:text => "Hello\nWorld",
|
|
3481
|
+
:width => cw,
|
|
3482
|
+
:height => ch
|
|
3483
|
+
)
|
|
3484
|
+
worksheet.insert_shape('A1', ellipse, cx, cy)
|
|
3485
|
+
|
|
3486
|
+
# Add a plus sign at 4 different positionos around the circle.
|
|
3487
|
+
pw = 20
|
|
3488
|
+
ph = 20
|
|
3489
|
+
px = 120
|
|
3490
|
+
py = 250
|
|
3491
|
+
|
|
3492
|
+
plus = workbook.add_shape(
|
|
3493
|
+
:type => 'plus',
|
|
3494
|
+
:id => 3,
|
|
3495
|
+
:width => pw,
|
|
3496
|
+
:height => ph
|
|
3497
|
+
)
|
|
2448
3498
|
|
|
2449
|
-
|
|
2450
|
-
worksheet.
|
|
2451
|
-
worksheet.
|
|
3499
|
+
p1 = worksheet.insert_shape('A1', plus, 350, 150)
|
|
3500
|
+
p2 = worksheet.insert_shape('A1', plus, 350, 350)
|
|
3501
|
+
p3 = worksheet.insert_shape('A1', plus, 150, 350)
|
|
3502
|
+
p4 = worksheet.insert_shape('A1', plus, 150, 150)
|
|
2452
3503
|
|
|
2453
|
-
|
|
2454
|
-
worksheet.protect
|
|
3504
|
+
cxn_shape = workbook.add_shape(:type => 'bentConnector3', :fill => 0)
|
|
2455
3505
|
|
|
2456
|
-
|
|
2457
|
-
|
|
2458
|
-
|
|
3506
|
+
cxn_shape[:start] = ellipse[:id]
|
|
3507
|
+
cxn_shape[:start_index] = 2 # 2nd connection pt, clockwise from top(0).
|
|
3508
|
+
cxn_shape[:start_side] = 'r' # r)ight or b)ottom.
|
|
2459
3509
|
|
|
2460
|
-
|
|
2461
|
-
|
|
3510
|
+
cxn_shape[:end] = p1[:id]
|
|
3511
|
+
cxn_shape[:end_index] = 3 # 3rd connection point on plus, right side
|
|
3512
|
+
cxn_shape[:end_side] = 'l' # l)eft or t)op.
|
|
3513
|
+
worksheet.insert_shape('A1', cxn_shape, 0, 0)
|
|
2462
3514
|
|
|
2463
|
-
|
|
2464
|
-
worksheet.
|
|
3515
|
+
cxn_shape[:end] = p2[:id]
|
|
3516
|
+
worksheet.insert_shape('A1', cxn_shape, 0, 0)
|
|
2465
3517
|
|
|
2466
|
-
|
|
2467
|
-
worksheet.
|
|
3518
|
+
cxn_shape[:end] = p3[:id]
|
|
3519
|
+
worksheet.insert_shape('A1', cxn_shape, 0, 0)
|
|
3520
|
+
|
|
3521
|
+
cxn_shape[:end] = p4[:id]
|
|
3522
|
+
cxn_shape[:adjustments] = [-50, 45, 120]
|
|
3523
|
+
worksheet.insert_shape('A1', cxn_shape, 0, 0)
|
|
2468
3524
|
|
|
2469
3525
|
workbook.close
|
|
2470
|
-
compare_xlsx(@
|
|
3526
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
2471
3527
|
end
|
|
2472
3528
|
|
|
2473
|
-
def
|
|
2474
|
-
xlsx = '
|
|
2475
|
-
workbook
|
|
2476
|
-
worksheet
|
|
3529
|
+
def test_shape_all
|
|
3530
|
+
@xlsx = 'shape_all.xlsx'
|
|
3531
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
3532
|
+
worksheet = nil
|
|
3533
|
+
last_sheet = ''
|
|
3534
|
+
row = 0
|
|
3535
|
+
|
|
3536
|
+
shapes_list.each_line do |line|
|
|
3537
|
+
line = line.chomp
|
|
3538
|
+
next unless line =~ /^\w/ # Skip blank lines and comments.
|
|
3539
|
+
|
|
3540
|
+
sheet, name = line.split(/\t/)
|
|
3541
|
+
if last_sheet != sheet
|
|
3542
|
+
worksheet = workbook.add_worksheet(sheet)
|
|
3543
|
+
row = 2
|
|
3544
|
+
end
|
|
3545
|
+
last_sheet = sheet
|
|
3546
|
+
shape = workbook.add_shape(
|
|
3547
|
+
:type => name,
|
|
3548
|
+
:text => name,
|
|
3549
|
+
:width => 90,
|
|
3550
|
+
:height => 90
|
|
3551
|
+
)
|
|
2477
3552
|
|
|
2478
|
-
|
|
3553
|
+
# Connectors can not have labels, so write the connector name in the cell
|
|
3554
|
+
# to the left.
|
|
3555
|
+
worksheet.write(row, 0, name ) if sheet == 'Connector'
|
|
3556
|
+
worksheet.insert_shape(row, 2, shape, 0, 0)
|
|
3557
|
+
row += 5
|
|
3558
|
+
end
|
|
2479
3559
|
|
|
2480
|
-
|
|
2481
|
-
|
|
2482
|
-
|
|
2483
|
-
red = workbook.add_format(:color => 'red')
|
|
2484
|
-
blue = workbook.add_format(:color => 'blue')
|
|
2485
|
-
center = workbook.add_format(:align => 'center')
|
|
2486
|
-
superc = workbook.add_format(:font_script => 1)
|
|
3560
|
+
workbook.close
|
|
3561
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
3562
|
+
end
|
|
2487
3563
|
|
|
2488
|
-
|
|
2489
|
-
|
|
2490
|
-
|
|
3564
|
+
def shapes_list
|
|
3565
|
+
<<EOS
|
|
3566
|
+
Action actionButtonBackPrevious
|
|
3567
|
+
Action actionButtonBeginning
|
|
3568
|
+
Action actionButtonBlank
|
|
3569
|
+
Action actionButtonDocument
|
|
3570
|
+
Action actionButtonEnd
|
|
3571
|
+
Action actionButtonForwardNext
|
|
3572
|
+
Action actionButtonHelp
|
|
3573
|
+
Action actionButtonHome
|
|
3574
|
+
Action actionButtonInformation
|
|
3575
|
+
Action actionButtonMovie
|
|
3576
|
+
Action actionButtonReturn
|
|
3577
|
+
Action actionButtonSound
|
|
3578
|
+
Arrow bentArrow
|
|
3579
|
+
Arrow bentUpArrow
|
|
3580
|
+
Arrow circularArrow
|
|
3581
|
+
Arrow curvedDownArrow
|
|
3582
|
+
Arrow curvedLeftArrow
|
|
3583
|
+
Arrow curvedRightArrow
|
|
3584
|
+
Arrow curvedUpArrow
|
|
3585
|
+
Arrow downArrow
|
|
3586
|
+
Arrow leftArrow
|
|
3587
|
+
Arrow leftCircularArrow
|
|
3588
|
+
Arrow leftRightArrow
|
|
3589
|
+
Arrow leftRightCircularArrow
|
|
3590
|
+
Arrow leftRightUpArrow
|
|
3591
|
+
Arrow leftUpArrow
|
|
3592
|
+
Arrow notchedRightArrow
|
|
3593
|
+
Arrow quadArrow
|
|
3594
|
+
Arrow rightArrow
|
|
3595
|
+
Arrow stripedRightArrow
|
|
3596
|
+
Arrow swooshArrow
|
|
3597
|
+
Arrow upArrow
|
|
3598
|
+
Arrow upDownArrow
|
|
3599
|
+
Arrow uturnArrow
|
|
3600
|
+
Basic blockArc
|
|
3601
|
+
Basic can
|
|
3602
|
+
Basic chevron
|
|
3603
|
+
Basic cube
|
|
3604
|
+
Basic decagon
|
|
3605
|
+
Basic diamond
|
|
3606
|
+
Basic dodecagon
|
|
3607
|
+
Basic donut
|
|
3608
|
+
Basic ellipse
|
|
3609
|
+
Basic funnel
|
|
3610
|
+
Basic gear6
|
|
3611
|
+
Basic gear9
|
|
3612
|
+
Basic heart
|
|
3613
|
+
Basic heptagon
|
|
3614
|
+
Basic hexagon
|
|
3615
|
+
Basic homePlate
|
|
3616
|
+
Basic lightningBolt
|
|
3617
|
+
Basic line
|
|
3618
|
+
Basic lineInv
|
|
3619
|
+
Basic moon
|
|
3620
|
+
Basic nonIsoscelesTrapezoid
|
|
3621
|
+
Basic noSmoking
|
|
3622
|
+
Basic octagon
|
|
3623
|
+
Basic parallelogram
|
|
3624
|
+
Basic pentagon
|
|
3625
|
+
Basic pie
|
|
3626
|
+
Basic pieWedge
|
|
3627
|
+
Basic plaque
|
|
3628
|
+
Basic rect
|
|
3629
|
+
Basic round1Rect
|
|
3630
|
+
Basic round2DiagRect
|
|
3631
|
+
Basic round2SameRect
|
|
3632
|
+
Basic roundRect
|
|
3633
|
+
Basic rtTriangle
|
|
3634
|
+
Basic smileyFace
|
|
3635
|
+
Basic snip1Rect
|
|
3636
|
+
Basic snip2DiagRect
|
|
3637
|
+
Basic snip2SameRect
|
|
3638
|
+
Basic snipRoundRect
|
|
3639
|
+
Basic star10
|
|
3640
|
+
Basic star12
|
|
3641
|
+
Basic star16
|
|
3642
|
+
Basic star24
|
|
3643
|
+
Basic star32
|
|
3644
|
+
Basic star4
|
|
3645
|
+
Basic star5
|
|
3646
|
+
Basic star6
|
|
3647
|
+
Basic star7
|
|
3648
|
+
Basic star8
|
|
3649
|
+
Basic sun
|
|
3650
|
+
Basic teardrop
|
|
3651
|
+
Basic trapezoid
|
|
3652
|
+
Basic triangle
|
|
3653
|
+
Callout accentBorderCallout1
|
|
3654
|
+
Callout accentBorderCallout2
|
|
3655
|
+
Callout accentBorderCallout3
|
|
3656
|
+
Callout accentCallout1
|
|
3657
|
+
Callout accentCallout2
|
|
3658
|
+
Callout accentCallout3
|
|
3659
|
+
Callout borderCallout1
|
|
3660
|
+
Callout borderCallout2
|
|
3661
|
+
Callout borderCallout3
|
|
3662
|
+
Callout callout1
|
|
3663
|
+
Callout callout2
|
|
3664
|
+
Callout callout3
|
|
3665
|
+
Callout cloudCallout
|
|
3666
|
+
Callout downArrowCallout
|
|
3667
|
+
Callout leftArrowCallout
|
|
3668
|
+
Callout leftRightArrowCallout
|
|
3669
|
+
Callout quadArrowCallout
|
|
3670
|
+
Callout rightArrowCallout
|
|
3671
|
+
Callout upArrowCallout
|
|
3672
|
+
Callout upDownArrowCallout
|
|
3673
|
+
Callout wedgeEllipseCallout
|
|
3674
|
+
Callout wedgeRectCallout
|
|
3675
|
+
Callout wedgeRoundRectCallout
|
|
3676
|
+
Chart chartPlus
|
|
3677
|
+
Chart chartStar
|
|
3678
|
+
Chart chartX
|
|
3679
|
+
Connector bentConnector2
|
|
3680
|
+
Connector bentConnector3
|
|
3681
|
+
Connector bentConnector4
|
|
3682
|
+
Connector bentConnector5
|
|
3683
|
+
Connector curvedConnector2
|
|
3684
|
+
Connector curvedConnector3
|
|
3685
|
+
Connector curvedConnector4
|
|
3686
|
+
Connector curvedConnector5
|
|
3687
|
+
Connector straightConnector1
|
|
3688
|
+
FlowChart flowChartAlternateProcess
|
|
3689
|
+
FlowChart flowChartCollate
|
|
3690
|
+
FlowChart flowChartConnector
|
|
3691
|
+
FlowChart flowChartDecision
|
|
3692
|
+
FlowChart flowChartDelay
|
|
3693
|
+
FlowChart flowChartDisplay
|
|
3694
|
+
FlowChart flowChartDocument
|
|
3695
|
+
FlowChart flowChartExtract
|
|
3696
|
+
FlowChart flowChartInputOutput
|
|
3697
|
+
FlowChart flowChartInternalStorage
|
|
3698
|
+
FlowChart flowChartMagneticDisk
|
|
3699
|
+
FlowChart flowChartMagneticDrum
|
|
3700
|
+
FlowChart flowChartMagneticTape
|
|
3701
|
+
FlowChart flowChartManualInput
|
|
3702
|
+
FlowChart flowChartManualOperation
|
|
3703
|
+
FlowChart flowChartMerge
|
|
3704
|
+
FlowChart flowChartMultidocument
|
|
3705
|
+
FlowChart flowChartOfflineStorage
|
|
3706
|
+
FlowChart flowChartOffpageConnector
|
|
3707
|
+
FlowChart flowChartOnlineStorage
|
|
3708
|
+
FlowChart flowChartOr
|
|
3709
|
+
FlowChart flowChartPredefinedProcess
|
|
3710
|
+
FlowChart flowChartPreparation
|
|
3711
|
+
FlowChart flowChartProcess
|
|
3712
|
+
FlowChart flowChartPunchedCard
|
|
3713
|
+
FlowChart flowChartPunchedTape
|
|
3714
|
+
FlowChart flowChartSort
|
|
3715
|
+
FlowChart flowChartSummingJunction
|
|
3716
|
+
FlowChart flowChartTerminator
|
|
3717
|
+
Math mathDivide
|
|
3718
|
+
Math mathEqual
|
|
3719
|
+
Math mathMinus
|
|
3720
|
+
Math mathMultiply
|
|
3721
|
+
Math mathNotEqual
|
|
3722
|
+
Math mathPlus
|
|
3723
|
+
Star_Banner arc
|
|
3724
|
+
Star_Banner bevel
|
|
3725
|
+
Star_Banner bracePair
|
|
3726
|
+
Star_Banner bracketPair
|
|
3727
|
+
Star_Banner chord
|
|
3728
|
+
Star_Banner cloud
|
|
3729
|
+
Star_Banner corner
|
|
3730
|
+
Star_Banner diagStripe
|
|
3731
|
+
Star_Banner doubleWave
|
|
3732
|
+
Star_Banner ellipseRibbon
|
|
3733
|
+
Star_Banner ellipseRibbon2
|
|
3734
|
+
Star_Banner foldedCorner
|
|
3735
|
+
Star_Banner frame
|
|
3736
|
+
Star_Banner halfFrame
|
|
3737
|
+
Star_Banner horizontalScroll
|
|
3738
|
+
Star_Banner irregularSeal1
|
|
3739
|
+
Star_Banner irregularSeal2
|
|
3740
|
+
Star_Banner leftBrace
|
|
3741
|
+
Star_Banner leftBracket
|
|
3742
|
+
Star_Banner leftRightRibbon
|
|
3743
|
+
Star_Banner plus
|
|
3744
|
+
Star_Banner ribbon
|
|
3745
|
+
Star_Banner ribbon2
|
|
3746
|
+
Star_Banner rightBrace
|
|
3747
|
+
Star_Banner rightBracket
|
|
3748
|
+
Star_Banner verticalScroll
|
|
3749
|
+
Star_Banner wave
|
|
3750
|
+
Tabs cornerTabs
|
|
3751
|
+
Tabs plaqueTabs
|
|
3752
|
+
Tabs squareTabs
|
|
3753
|
+
EOS
|
|
3754
|
+
end
|
|
2491
3755
|
|
|
2492
|
-
|
|
2493
|
-
|
|
3756
|
+
def test_stats
|
|
3757
|
+
@xlsx = 'stats.xlsx'
|
|
3758
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
3759
|
+
worksheet = workbook.add_worksheet('Test data')
|
|
3760
|
+
|
|
3761
|
+
# Set the column width for column 1
|
|
3762
|
+
worksheet.set_column(0, 0, 20)
|
|
3763
|
+
|
|
3764
|
+
# Create a format for the headings
|
|
3765
|
+
format = workbook.add_format
|
|
3766
|
+
format.set_bold
|
|
3767
|
+
|
|
3768
|
+
# Write the sample data
|
|
3769
|
+
worksheet.write(0, 0, 'Sample', format)
|
|
3770
|
+
worksheet.write(0, 1, 1)
|
|
3771
|
+
worksheet.write(0, 2, 2)
|
|
3772
|
+
worksheet.write(0, 3, 3)
|
|
3773
|
+
worksheet.write(0, 4, 4)
|
|
3774
|
+
worksheet.write(0, 5, 5)
|
|
3775
|
+
worksheet.write(0, 6, 6)
|
|
3776
|
+
worksheet.write(0, 7, 7)
|
|
3777
|
+
worksheet.write(0, 8, 8)
|
|
3778
|
+
|
|
3779
|
+
worksheet.write(1, 0, 'Length', format)
|
|
3780
|
+
worksheet.write(1, 1, 25.4)
|
|
3781
|
+
worksheet.write(1, 2, 25.4)
|
|
3782
|
+
worksheet.write(1, 3, 24.8)
|
|
3783
|
+
worksheet.write(1, 4, 25.0)
|
|
3784
|
+
worksheet.write(1, 5, 25.3)
|
|
3785
|
+
worksheet.write(1, 6, 24.9)
|
|
3786
|
+
worksheet.write(1, 7, 25.2)
|
|
3787
|
+
worksheet.write(1, 8, 24.8)
|
|
3788
|
+
|
|
3789
|
+
# Write some statistical functions
|
|
3790
|
+
worksheet.write(4, 0, 'Count', format)
|
|
3791
|
+
worksheet.write(4, 1, '=COUNT(B1:I1)')
|
|
3792
|
+
|
|
3793
|
+
worksheet.write(5, 0, 'Sum', format)
|
|
3794
|
+
worksheet.write(5, 1, '=SUM(B2:I2)')
|
|
3795
|
+
|
|
3796
|
+
worksheet.write(6, 0, 'Average', format)
|
|
3797
|
+
worksheet.write(6, 1, '=AVERAGE(B2:I2)')
|
|
3798
|
+
|
|
3799
|
+
worksheet.write(7, 0, 'Min', format)
|
|
3800
|
+
worksheet.write(7, 1, '=MIN(B2:I2)')
|
|
3801
|
+
|
|
3802
|
+
worksheet.write(8, 0, 'Max', format)
|
|
3803
|
+
worksheet.write(8, 1, '=MAX(B2:I2)')
|
|
3804
|
+
|
|
3805
|
+
worksheet.write(9, 0, 'Standard Deviation', format)
|
|
3806
|
+
worksheet.write(9, 1, '=STDEV(B2:I2)')
|
|
3807
|
+
|
|
3808
|
+
worksheet.write(10, 0, 'Kurtosis', format)
|
|
3809
|
+
worksheet.write(10, 1, '=KURT(B2:I2)')
|
|
2494
3810
|
|
|
2495
|
-
|
|
2496
|
-
|
|
3811
|
+
workbook.close
|
|
3812
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
3813
|
+
end
|
|
2497
3814
|
|
|
2498
|
-
|
|
2499
|
-
|
|
3815
|
+
def test_stats_ext
|
|
3816
|
+
@xlsx = 'stats_ext.xlsx'
|
|
3817
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
3818
|
+
worksheet1 = workbook.add_worksheet('Test results')
|
|
3819
|
+
worksheet2 = workbook.add_worksheet('Data')
|
|
3820
|
+
|
|
3821
|
+
# Set the column width for column 1
|
|
3822
|
+
worksheet1.set_column(0, 0, 20)
|
|
3823
|
+
|
|
3824
|
+
# Create a format for the headings
|
|
3825
|
+
headings = workbook.add_format
|
|
3826
|
+
headings.set_bold
|
|
3827
|
+
|
|
3828
|
+
# Create a numerical format
|
|
3829
|
+
numformat = workbook.add_format
|
|
3830
|
+
numformat.set_num_format('0.00')
|
|
3831
|
+
|
|
3832
|
+
# Write some statistical functions
|
|
3833
|
+
worksheet1.write(0, 0, 'Count', headings)
|
|
3834
|
+
worksheet1.write(0, 1, '=COUNT(Data!B2:B9)')
|
|
3835
|
+
|
|
3836
|
+
worksheet1.write(1, 0, 'Sum', headings)
|
|
3837
|
+
worksheet1.write(1, 1, '=SUM(Data!B2:B9)')
|
|
3838
|
+
|
|
3839
|
+
worksheet1.write(2, 0, 'Average', headings)
|
|
3840
|
+
worksheet1.write(2, 1, '=AVERAGE(Data!B2:B9)')
|
|
3841
|
+
|
|
3842
|
+
worksheet1.write(3, 0, 'Min', headings)
|
|
3843
|
+
worksheet1.write(3, 1, '=MIN(Data!B2:B9)')
|
|
3844
|
+
|
|
3845
|
+
worksheet1.write(4, 0, 'Max', headings)
|
|
3846
|
+
worksheet1.write(4, 1, '=MAX(Data!B2:B9)')
|
|
3847
|
+
|
|
3848
|
+
worksheet1.write(5, 0, 'Standard Deviation', headings)
|
|
3849
|
+
worksheet1.write(5, 1, '=STDEV(Data!B2:B9)')
|
|
3850
|
+
|
|
3851
|
+
worksheet1.write(6, 0, 'Kurtosis', headings)
|
|
3852
|
+
worksheet1.write(6, 1, '=KURT(Data!B2:B9)')
|
|
3853
|
+
|
|
3854
|
+
# Write the sample data
|
|
3855
|
+
worksheet2.write(0, 0, 'Sample', headings)
|
|
3856
|
+
worksheet2.write(1, 0, 1)
|
|
3857
|
+
worksheet2.write(2, 0, 2)
|
|
3858
|
+
worksheet2.write(3, 0, 3)
|
|
3859
|
+
worksheet2.write(4, 0, 4)
|
|
3860
|
+
worksheet2.write(5, 0, 5)
|
|
3861
|
+
worksheet2.write(6, 0, 6)
|
|
3862
|
+
worksheet2.write(7, 0, 7)
|
|
3863
|
+
worksheet2.write(8, 0, 8)
|
|
3864
|
+
|
|
3865
|
+
worksheet2.write(0, 1, 'Length', headings)
|
|
3866
|
+
worksheet2.write(1, 1, 25.4, numformat)
|
|
3867
|
+
worksheet2.write(2, 1, 25.4, numformat)
|
|
3868
|
+
worksheet2.write(3, 1, 24.8, numformat)
|
|
3869
|
+
worksheet2.write(4, 1, 25.0, numformat)
|
|
3870
|
+
worksheet2.write(5, 1, 25.3, numformat)
|
|
3871
|
+
worksheet2.write(6, 1, 24.9, numformat)
|
|
3872
|
+
worksheet2.write(7, 1, 25.2, numformat)
|
|
3873
|
+
worksheet2.write(8, 1, 24.8, numformat)
|
|
2500
3874
|
|
|
2501
3875
|
workbook.close
|
|
2502
|
-
compare_xlsx(@
|
|
3876
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
2503
3877
|
end
|
|
2504
3878
|
|
|
2505
|
-
def
|
|
2506
|
-
xlsx = '
|
|
2507
|
-
workbook
|
|
2508
|
-
|
|
2509
|
-
worksheet2 = workbook.add_worksheet
|
|
3879
|
+
def test_stocks
|
|
3880
|
+
@xlsx = 'stocks.xlsx'
|
|
3881
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
3882
|
+
worksheet = workbook.add_worksheet
|
|
2510
3883
|
|
|
2511
|
-
|
|
3884
|
+
# Set the column width for columns 1, 2, 3 and 4
|
|
3885
|
+
worksheet.set_column(0, 3, 15)
|
|
3886
|
+
|
|
3887
|
+
# Create a format for the column headings
|
|
3888
|
+
header = workbook.add_format
|
|
3889
|
+
header.set_bold
|
|
3890
|
+
header.set_size(12)
|
|
3891
|
+
header.set_color('blue')
|
|
3892
|
+
|
|
3893
|
+
# Create a format for the stock price
|
|
3894
|
+
f_price = workbook.add_format
|
|
3895
|
+
f_price.set_align('left')
|
|
3896
|
+
f_price.set_num_format('$0.00')
|
|
3897
|
+
|
|
3898
|
+
# Create a format for the stock volume
|
|
3899
|
+
f_volume = workbook.add_format
|
|
3900
|
+
f_volume.set_align('left')
|
|
3901
|
+
f_volume.set_num_format('#,##0')
|
|
3902
|
+
|
|
3903
|
+
# Create a format for the price change. This is an example of a conditional
|
|
3904
|
+
# format. The number is formatted as a percentage. If it is positive it is
|
|
3905
|
+
# formatted in green, if it is negative it is formatted in red and if it is
|
|
3906
|
+
# zero it is formatted as the default font colour (in this case black).
|
|
3907
|
+
# Note: the [Green] format produces an unappealing lime green. Try
|
|
3908
|
+
# [Color 10] instead for a dark green.
|
|
3909
|
+
#
|
|
3910
|
+
f_change = workbook.add_format
|
|
3911
|
+
f_change.set_align('left')
|
|
3912
|
+
f_change.set_num_format('[Green]0.0%;[Red]-0.0%;0.0%')
|
|
3913
|
+
|
|
3914
|
+
# Write out the data
|
|
3915
|
+
worksheet.write(0, 0, 'Company', header)
|
|
3916
|
+
worksheet.write(0, 1, 'Price', header)
|
|
3917
|
+
worksheet.write(0, 2, 'Volume', header)
|
|
3918
|
+
worksheet.write(0, 3, 'Change', header)
|
|
3919
|
+
|
|
3920
|
+
worksheet.write(1, 0, 'Damage Inc.')
|
|
3921
|
+
worksheet.write(1, 1, 30.25, f_price) # $30.25
|
|
3922
|
+
worksheet.write(1, 2, 1234567, f_volume) # 1,234,567
|
|
3923
|
+
worksheet.write(1, 3, 0.085, f_change) # 8.5% in green
|
|
3924
|
+
|
|
3925
|
+
worksheet.write(2, 0, 'Dump Corp.')
|
|
3926
|
+
worksheet.write(2, 1, 1.56, f_price) # $1.56
|
|
3927
|
+
worksheet.write(2, 2, 7564, f_volume) # 7,564
|
|
3928
|
+
worksheet.write(2, 3, -0.015, f_change) # -1.5% in red
|
|
3929
|
+
|
|
3930
|
+
worksheet.write(3, 0, 'Rev Ltd.')
|
|
3931
|
+
worksheet.write(3, 1, 0.13, f_price) # $0.13
|
|
3932
|
+
worksheet.write(3, 2, 321, f_volume) # 321
|
|
3933
|
+
worksheet.write(3, 3, 0, f_change) # 0 in the font color (black)
|
|
2512
3934
|
|
|
2513
|
-
worksheet1.write(0, 0, 'Hello') # A1, B1, C1, ...
|
|
2514
|
-
worksheet2.write(0, 0, 'Hello') # ..., C1, B1, A1
|
|
2515
3935
|
workbook.close
|
|
2516
|
-
compare_xlsx(@
|
|
3936
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
2517
3937
|
end
|
|
2518
3938
|
|
|
2519
3939
|
def test_tab_colors
|
|
2520
|
-
xlsx = 'tab_colors.xlsx'
|
|
2521
|
-
workbook = WriteXLSX.new(xlsx)
|
|
3940
|
+
@xlsx = 'tab_colors.xlsx'
|
|
3941
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
2522
3942
|
|
|
2523
3943
|
worksheet1 = workbook.add_worksheet
|
|
2524
3944
|
worksheet2 = workbook.add_worksheet
|
|
@@ -2531,270 +3951,347 @@ def test_tab_colors
|
|
|
2531
3951
|
worksheet4.set_tab_color(0x35) # Orange
|
|
2532
3952
|
|
|
2533
3953
|
workbook.close
|
|
2534
|
-
compare_xlsx(@
|
|
3954
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
2535
3955
|
end
|
|
2536
3956
|
|
|
2537
|
-
def
|
|
2538
|
-
xlsx = '
|
|
2539
|
-
workbook
|
|
2540
|
-
|
|
2541
|
-
|
|
2542
|
-
|
|
2543
|
-
|
|
2544
|
-
|
|
2545
|
-
|
|
2546
|
-
|
|
2547
|
-
|
|
2548
|
-
|
|
2549
|
-
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
|
|
2553
|
-
|
|
2554
|
-
|
|
2555
|
-
|
|
2556
|
-
#
|
|
2557
|
-
|
|
2558
|
-
|
|
2559
|
-
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
|
|
3957
|
+
def test_tables
|
|
3958
|
+
@xlsx = 'tables.xlsx'
|
|
3959
|
+
workbook = WriteXLSX.new(@xlsx)
|
|
3960
|
+
worksheet1 = workbook.add_worksheet
|
|
3961
|
+
worksheet2 = workbook.add_worksheet
|
|
3962
|
+
worksheet3 = workbook.add_worksheet
|
|
3963
|
+
worksheet4 = workbook.add_worksheet
|
|
3964
|
+
worksheet5 = workbook.add_worksheet
|
|
3965
|
+
worksheet6 = workbook.add_worksheet
|
|
3966
|
+
worksheet7 = workbook.add_worksheet
|
|
3967
|
+
worksheet8 = workbook.add_worksheet
|
|
3968
|
+
worksheet9 = workbook.add_worksheet
|
|
3969
|
+
worksheet10 = workbook.add_worksheet
|
|
3970
|
+
worksheet11 = workbook.add_worksheet
|
|
3971
|
+
worksheet12 = workbook.add_worksheet
|
|
3972
|
+
|
|
3973
|
+
currency_format = workbook.add_format(:num_format => '$#,##0')
|
|
3974
|
+
|
|
3975
|
+
|
|
3976
|
+
# Some sample data for the table.
|
|
3977
|
+
data = [
|
|
3978
|
+
[ 'Apples', 10000, 5000, 8000, 6000 ],
|
|
3979
|
+
[ 'Pears', 2000, 3000, 4000, 5000 ],
|
|
3980
|
+
[ 'Bananas', 6000, 6000, 6500, 6000 ],
|
|
3981
|
+
[ 'Oranges', 500, 300, 200, 700 ]
|
|
3982
|
+
]
|
|
2563
3983
|
|
|
2564
3984
|
###############################################################################
|
|
2565
3985
|
#
|
|
2566
|
-
# Example 1.
|
|
3986
|
+
# Example 1.
|
|
2567
3987
|
#
|
|
3988
|
+
caption = 'Default table with no data.'
|
|
2568
3989
|
|
|
2569
|
-
|
|
2570
|
-
worksheet1.
|
|
2571
|
-
|
|
2572
|
-
###############################################################################
|
|
2573
|
-
#
|
|
2574
|
-
#
|
|
2575
|
-
# Example 2. Autofilter with a filter condition in the first column.
|
|
2576
|
-
#
|
|
3990
|
+
# Set the columns widths.
|
|
3991
|
+
worksheet1.set_column('B:G', 12)
|
|
2577
3992
|
|
|
2578
|
-
#
|
|
2579
|
-
|
|
3993
|
+
# Write the caption.
|
|
3994
|
+
worksheet1.write('B1', caption)
|
|
2580
3995
|
|
|
2581
|
-
#
|
|
2582
|
-
|
|
2583
|
-
#
|
|
2584
|
-
worksheet2.filter_column( 0, 'Region eq East' )
|
|
3996
|
+
# Add a table to the worksheet.
|
|
3997
|
+
worksheet1.add_table('B3:F7')
|
|
2585
3998
|
|
|
3999
|
+
###############################################################################
|
|
2586
4000
|
#
|
|
2587
|
-
#
|
|
4001
|
+
# Example 2.
|
|
2588
4002
|
#
|
|
2589
|
-
|
|
4003
|
+
caption = 'Default table with data.';
|
|
2590
4004
|
|
|
2591
|
-
|
|
2592
|
-
|
|
4005
|
+
# Set the columns widths.
|
|
4006
|
+
worksheet2.set_column('B:G', 12)
|
|
2593
4007
|
|
|
2594
|
-
|
|
2595
|
-
|
|
2596
|
-
|
|
2597
|
-
|
|
4008
|
+
# Write the caption.
|
|
4009
|
+
worksheet2.write('B1', caption)
|
|
4010
|
+
|
|
4011
|
+
# Add a table to the worksheet.
|
|
4012
|
+
worksheet2.add_table('B3:F7', { :data => data })
|
|
2598
4013
|
|
|
2599
4014
|
###############################################################################
|
|
2600
4015
|
#
|
|
4016
|
+
# Example 3.
|
|
2601
4017
|
#
|
|
2602
|
-
|
|
2603
|
-
#
|
|
2604
|
-
|
|
2605
|
-
worksheet3.autofilter( 'A1:D51' )
|
|
4018
|
+
caption = 'Table without default autofilter.'
|
|
2606
4019
|
|
|
2607
|
-
|
|
2608
|
-
|
|
2609
|
-
#
|
|
2610
|
-
# Hide the rows that don't match the filter criteria.
|
|
2611
|
-
#
|
|
2612
|
-
row = 1
|
|
4020
|
+
# Set the columns widths.
|
|
4021
|
+
worksheet3.set_column('B:G', 12)
|
|
2613
4022
|
|
|
2614
|
-
|
|
2615
|
-
|
|
4023
|
+
# Write the caption.
|
|
4024
|
+
worksheet3.write('B1', caption)
|
|
2616
4025
|
|
|
2617
|
-
|
|
2618
|
-
|
|
2619
|
-
row += 1
|
|
2620
|
-
end
|
|
4026
|
+
# Add a table to the worksheet.
|
|
4027
|
+
worksheet3.add_table('B3:F7', { :autofilter => 0 })
|
|
2621
4028
|
|
|
4029
|
+
# Table data can also be written separately, as an array or individual cells.
|
|
4030
|
+
worksheet3.write_col('B4', data)
|
|
2622
4031
|
|
|
2623
4032
|
###############################################################################
|
|
2624
4033
|
#
|
|
4034
|
+
# Example 4.
|
|
2625
4035
|
#
|
|
2626
|
-
|
|
2627
|
-
#
|
|
2628
|
-
|
|
2629
|
-
worksheet4.autofilter('A1:D51')
|
|
2630
|
-
|
|
2631
|
-
worksheet4.filter_column('A', 'x eq East')
|
|
2632
|
-
worksheet4.filter_column('C', 'x > 3000 and x < 8000')
|
|
2633
|
-
|
|
2634
|
-
#
|
|
2635
|
-
# Hide the rows that don't match the filter criteria.
|
|
2636
|
-
#
|
|
2637
|
-
row = 1
|
|
4036
|
+
caption = 'Table without default header row.'
|
|
2638
4037
|
|
|
2639
|
-
|
|
2640
|
-
|
|
2641
|
-
volume = row_data[2]
|
|
4038
|
+
# Set the columns widths.
|
|
4039
|
+
worksheet4.set_column('B:G', 12)
|
|
2642
4040
|
|
|
2643
|
-
|
|
2644
|
-
|
|
2645
|
-
worksheet4.set_row(row, nil, nil, 1)
|
|
2646
|
-
end
|
|
4041
|
+
# Write the caption.
|
|
4042
|
+
worksheet4.write('B1', caption)
|
|
2647
4043
|
|
|
2648
|
-
|
|
2649
|
-
|
|
2650
|
-
end
|
|
4044
|
+
# Add a table to the worksheet.
|
|
4045
|
+
worksheet4.add_table('B4:F7', { :header_row => 0 })
|
|
2651
4046
|
|
|
4047
|
+
# Table data can also be written separately, as an array or individual cells.
|
|
4048
|
+
worksheet4.write_col('B4', data)
|
|
2652
4049
|
|
|
2653
4050
|
###############################################################################
|
|
2654
4051
|
#
|
|
4052
|
+
# Example 5.
|
|
2655
4053
|
#
|
|
2656
|
-
|
|
2657
|
-
#
|
|
4054
|
+
caption = 'Default table with "First Column" and "Last Column" options.'
|
|
2658
4055
|
|
|
2659
|
-
#
|
|
2660
|
-
|
|
4056
|
+
# Set the columns widths.
|
|
4057
|
+
worksheet5.set_column('B:G', 12)
|
|
2661
4058
|
|
|
2662
|
-
|
|
2663
|
-
worksheet5.
|
|
4059
|
+
# Write the caption.
|
|
4060
|
+
worksheet5.write('B1', caption)
|
|
4061
|
+
|
|
4062
|
+
# Add a table to the worksheet.
|
|
4063
|
+
worksheet5.add_table('B3:F7', { :first_column => 1, :last_column => 1 })
|
|
2664
4064
|
|
|
4065
|
+
# Table data can also be written separately, as an array or individual cells.
|
|
4066
|
+
worksheet5.write_col('B4', data)
|
|
4067
|
+
|
|
4068
|
+
###############################################################################
|
|
2665
4069
|
#
|
|
2666
|
-
#
|
|
4070
|
+
# Example 6.
|
|
2667
4071
|
#
|
|
2668
|
-
|
|
4072
|
+
caption = 'Table with banded columns but without default banded rows.';
|
|
2669
4073
|
|
|
2670
|
-
|
|
2671
|
-
|
|
4074
|
+
# Set the columns widths.
|
|
4075
|
+
worksheet6.set_column('B:G', 12)
|
|
2672
4076
|
|
|
2673
|
-
|
|
4077
|
+
# Write the caption.
|
|
4078
|
+
worksheet6.write('B1', caption)
|
|
2674
4079
|
|
|
2675
|
-
|
|
2676
|
-
|
|
2677
|
-
end
|
|
4080
|
+
# Add a table to the worksheet.
|
|
4081
|
+
worksheet6.add_table('B3:F7', { :banded_rows => 0, :banded_columns => 1 })
|
|
2678
4082
|
|
|
4083
|
+
# Table data can also be written separately, as an array or individual cells.
|
|
4084
|
+
worksheet6.write_col('B4', data)
|
|
2679
4085
|
|
|
2680
4086
|
###############################################################################
|
|
2681
4087
|
#
|
|
4088
|
+
# Example 7.
|
|
2682
4089
|
#
|
|
2683
|
-
|
|
2684
|
-
#
|
|
4090
|
+
caption = 'Table with user defined column headers';
|
|
2685
4091
|
|
|
4092
|
+
# Set the columns widths.
|
|
4093
|
+
worksheet7.set_column('B:G', 12)
|
|
2686
4094
|
|
|
2687
|
-
|
|
2688
|
-
|
|
4095
|
+
# Write the caption.
|
|
4096
|
+
worksheet7.write('B1', caption)
|
|
2689
4097
|
|
|
4098
|
+
# Add a table to the worksheet.
|
|
4099
|
+
worksheet7.add_table(
|
|
4100
|
+
'B3:F7',
|
|
4101
|
+
{
|
|
4102
|
+
:data => data,
|
|
4103
|
+
:columns => [
|
|
4104
|
+
{ :header => 'Product' },
|
|
4105
|
+
{ :header => 'Quarter 1' },
|
|
4106
|
+
{ :header => 'Quarter 2' },
|
|
4107
|
+
{ :header => 'Quarter 3' },
|
|
4108
|
+
{ :header => 'Quarter 4' }
|
|
4109
|
+
]
|
|
4110
|
+
}
|
|
4111
|
+
)
|
|
4112
|
+
|
|
4113
|
+
###############################################################################
|
|
2690
4114
|
#
|
|
2691
|
-
#
|
|
4115
|
+
# Example 8.
|
|
2692
4116
|
#
|
|
2693
|
-
|
|
4117
|
+
caption = 'Table with user defined column headers';
|
|
2694
4118
|
|
|
2695
|
-
|
|
2696
|
-
|
|
2697
|
-
|
|
2698
|
-
worksheet6.set_row(row, nil, nil, 1) unless region != ''
|
|
2699
|
-
|
|
2700
|
-
worksheet6.write(row, 0, row_data)
|
|
2701
|
-
row += 1
|
|
2702
|
-
end
|
|
2703
|
-
|
|
2704
|
-
workbook.close
|
|
2705
|
-
compare_xlsx(@expected_dir, @result_dir, xlsx)
|
|
2706
|
-
end
|
|
2707
|
-
|
|
2708
|
-
def test_chart_scatter06
|
|
2709
|
-
xlsx = 'chart_scatter06.xlsx'
|
|
2710
|
-
workbook = WriteXLSX.new(xlsx)
|
|
2711
|
-
worksheet = workbook.add_worksheet
|
|
2712
|
-
chart = workbook.add_chart(:type => 'scatter', :embedded => 1)
|
|
2713
|
-
|
|
2714
|
-
# For testing, copy the randomly generated axis ids in the target xlsx file.
|
|
2715
|
-
chart.instance_variable_set(:@axis_ids, [57708544, 44297600])
|
|
4119
|
+
# Set the columns widths.
|
|
4120
|
+
worksheet8.set_column('B:G', 12)
|
|
2716
4121
|
|
|
2717
|
-
|
|
2718
|
-
|
|
2719
|
-
[ 2, 4, 6, 8, 10 ],
|
|
2720
|
-
[ 3, 6, 9, 12, 15 ],
|
|
4122
|
+
# Write the caption.
|
|
4123
|
+
worksheet8.write('B1', caption)
|
|
2721
4124
|
|
|
2722
|
-
|
|
4125
|
+
# Add a table to the worksheet.
|
|
4126
|
+
worksheet8.add_table(
|
|
4127
|
+
'B3:G7',
|
|
4128
|
+
{
|
|
4129
|
+
:data => data,
|
|
4130
|
+
:columns => [
|
|
4131
|
+
{ :header => 'Product' },
|
|
4132
|
+
{ :header => 'Quarter 1' },
|
|
4133
|
+
{ :header => 'Quarter 2' },
|
|
4134
|
+
{ :header => 'Quarter 3' },
|
|
4135
|
+
{ :header => 'Quarter 4' },
|
|
4136
|
+
{
|
|
4137
|
+
:header => 'Year',
|
|
4138
|
+
:formula => '=SUM(Table8[@[Quarter 1]:[Quarter 4]])'
|
|
4139
|
+
}
|
|
4140
|
+
]
|
|
4141
|
+
}
|
|
4142
|
+
)
|
|
2723
4143
|
|
|
2724
|
-
worksheet.write('A1', data)
|
|
2725
4144
|
|
|
2726
|
-
|
|
2727
|
-
|
|
2728
|
-
|
|
2729
|
-
|
|
4145
|
+
###############################################################################
|
|
4146
|
+
#
|
|
4147
|
+
# Example 9.
|
|
4148
|
+
#
|
|
4149
|
+
caption = 'Table with totals row (but no caption or totals).';
|
|
4150
|
+
|
|
4151
|
+
# Set the columns widths.
|
|
4152
|
+
worksheet9.set_column('B:G', 12)
|
|
4153
|
+
|
|
4154
|
+
# Write the caption.
|
|
4155
|
+
worksheet9.write('B1', caption)
|
|
4156
|
+
|
|
4157
|
+
# Add a table to the worksheet.
|
|
4158
|
+
worksheet9.add_table(
|
|
4159
|
+
'B3:G8',
|
|
4160
|
+
{
|
|
4161
|
+
:data => data,
|
|
4162
|
+
:total_row => 1,
|
|
4163
|
+
:columns => [
|
|
4164
|
+
{ :header => 'Product' },
|
|
4165
|
+
{ :header => 'Quarter 1' },
|
|
4166
|
+
{ :header => 'Quarter 2' },
|
|
4167
|
+
{ :header => 'Quarter 3' },
|
|
4168
|
+
{ :header => 'Quarter 4' },
|
|
4169
|
+
{
|
|
4170
|
+
:header => 'Year',
|
|
4171
|
+
:formula => '=SUM(Table8[@[Quarter 1]:[Quarter 4]])'
|
|
4172
|
+
}
|
|
4173
|
+
]
|
|
4174
|
+
}
|
|
4175
|
+
)
|
|
2730
4176
|
|
|
2731
|
-
|
|
2732
|
-
|
|
2733
|
-
|
|
2734
|
-
|
|
4177
|
+
###############################################################################
|
|
4178
|
+
#
|
|
4179
|
+
# Example 10.
|
|
4180
|
+
#
|
|
4181
|
+
caption = 'Table with totals row with user captions and functions.';
|
|
4182
|
+
|
|
4183
|
+
# Set the columns widths.
|
|
4184
|
+
worksheet10.set_column('B:G', 12)
|
|
4185
|
+
|
|
4186
|
+
# Write the caption.
|
|
4187
|
+
worksheet10.write('B1', caption)
|
|
4188
|
+
|
|
4189
|
+
# Add a table to the worksheet.
|
|
4190
|
+
worksheet10.add_table(
|
|
4191
|
+
'B3:G8',
|
|
4192
|
+
{
|
|
4193
|
+
:data => data,
|
|
4194
|
+
:total_row => 1,
|
|
4195
|
+
:columns => [
|
|
4196
|
+
{ :header => 'Product', :total_string => 'Totals' },
|
|
4197
|
+
{ :header => 'Quarter 1', :total_function => 'sum' },
|
|
4198
|
+
{ :header => 'Quarter 2', :total_function => 'sum' },
|
|
4199
|
+
{ :header => 'Quarter 3', :total_function => 'sum' },
|
|
4200
|
+
{ :header => 'Quarter 4', :total_function => 'sum' },
|
|
4201
|
+
{
|
|
4202
|
+
:header => 'Year',
|
|
4203
|
+
:formula => '=SUM(Table8[@[Quarter 1]:[Quarter 4]])',
|
|
4204
|
+
:total_function => 'sum'
|
|
4205
|
+
}
|
|
4206
|
+
]
|
|
4207
|
+
}
|
|
4208
|
+
)
|
|
2735
4209
|
|
|
2736
|
-
|
|
2737
|
-
|
|
4210
|
+
###############################################################################
|
|
4211
|
+
#
|
|
4212
|
+
# Example 11.
|
|
4213
|
+
#
|
|
4214
|
+
caption = 'Table with alternative Excel style.';
|
|
4215
|
+
|
|
4216
|
+
# Set the columns widths.
|
|
4217
|
+
worksheet11.set_column('B:G', 12)
|
|
4218
|
+
|
|
4219
|
+
# Write the caption.
|
|
4220
|
+
worksheet11.write('B1', caption)
|
|
4221
|
+
|
|
4222
|
+
# Add a table to the worksheet.
|
|
4223
|
+
worksheet11.add_table(
|
|
4224
|
+
'B3:G8',
|
|
4225
|
+
{
|
|
4226
|
+
:data => data,
|
|
4227
|
+
:style => 'Table Style Light 11',
|
|
4228
|
+
:total_row => 1,
|
|
4229
|
+
:columns => [
|
|
4230
|
+
{ :header => 'Product', :total_string => 'Totals' },
|
|
4231
|
+
{ :header => 'Quarter 1', :total_function => 'sum' },
|
|
4232
|
+
{ :header => 'Quarter 2', :total_function => 'sum' },
|
|
4233
|
+
{ :header => 'Quarter 3', :total_function => 'sum' },
|
|
4234
|
+
{ :header => 'Quarter 4', :total_function => 'sum' },
|
|
4235
|
+
{
|
|
4236
|
+
:header => 'Year',
|
|
4237
|
+
:formula => '=SUM(Table8[@[Quarter 1]:[Quarter 4]])',
|
|
4238
|
+
:total_function => 'sum'
|
|
4239
|
+
}
|
|
4240
|
+
]
|
|
4241
|
+
}
|
|
4242
|
+
)
|
|
2738
4243
|
|
|
2739
|
-
|
|
4244
|
+
###############################################################################
|
|
4245
|
+
#
|
|
4246
|
+
# Example 12.
|
|
4247
|
+
#
|
|
4248
|
+
caption = 'Table with column formats.';
|
|
4249
|
+
|
|
4250
|
+
# Set the columns widths.
|
|
4251
|
+
worksheet12.set_column('B:G', 12)
|
|
4252
|
+
|
|
4253
|
+
# Write the caption.
|
|
4254
|
+
worksheet12.write('B1', caption)
|
|
4255
|
+
|
|
4256
|
+
# Add a table to the worksheet.
|
|
4257
|
+
worksheet12.add_table(
|
|
4258
|
+
'B3:G8',
|
|
4259
|
+
{
|
|
4260
|
+
:data => data,
|
|
4261
|
+
:total_row => 1,
|
|
4262
|
+
:columns => [
|
|
4263
|
+
{ :header => 'Product', :total_string => 'Totals' },
|
|
4264
|
+
{
|
|
4265
|
+
:header => 'Quarter 1',
|
|
4266
|
+
:total_function => 'sum',
|
|
4267
|
+
:format => currency_format,
|
|
4268
|
+
},
|
|
4269
|
+
{
|
|
4270
|
+
:header => 'Quarter 2',
|
|
4271
|
+
:total_function => 'sum',
|
|
4272
|
+
:format => currency_format,
|
|
4273
|
+
},
|
|
4274
|
+
{
|
|
4275
|
+
:header => 'Quarter 3',
|
|
4276
|
+
:total_function => 'sum',
|
|
4277
|
+
:format => currency_format,
|
|
4278
|
+
},
|
|
4279
|
+
{
|
|
4280
|
+
:header => 'Quarter 4',
|
|
4281
|
+
:total_function => 'sum',
|
|
4282
|
+
:format => currency_format,
|
|
4283
|
+
},
|
|
4284
|
+
{
|
|
4285
|
+
:header => 'Year',
|
|
4286
|
+
:formula => '=SUM(Table8[@[Quarter 1]:[Quarter 4]])',
|
|
4287
|
+
:total_function => 'sum',
|
|
4288
|
+
:format => currency_format,
|
|
4289
|
+
}
|
|
4290
|
+
]
|
|
4291
|
+
}
|
|
4292
|
+
)
|
|
2740
4293
|
|
|
2741
4294
|
workbook.close
|
|
2742
|
-
compare_xlsx(@
|
|
2743
|
-
end
|
|
2744
|
-
|
|
2745
|
-
def autofilter_data
|
|
2746
|
-
<<EOS
|
|
2747
|
-
Region Item Volume Month
|
|
2748
|
-
East Apple 9000 July
|
|
2749
|
-
East Apple 5000 July
|
|
2750
|
-
South Orange 9000 September
|
|
2751
|
-
North Apple 2000 November
|
|
2752
|
-
West Apple 9000 November
|
|
2753
|
-
South Pear 7000 October
|
|
2754
|
-
North Pear 9000 August
|
|
2755
|
-
West Orange 1000 December
|
|
2756
|
-
West Grape 1000 November
|
|
2757
|
-
South Pear 10000 April
|
|
2758
|
-
West Grape 6000 January
|
|
2759
|
-
South Orange 3000 May
|
|
2760
|
-
North Apple 3000 December
|
|
2761
|
-
South Apple 7000 February
|
|
2762
|
-
West Grape 1000 December
|
|
2763
|
-
East Grape 8000 February
|
|
2764
|
-
South Grape 10000 June
|
|
2765
|
-
West Pear 7000 December
|
|
2766
|
-
South Apple 2000 October
|
|
2767
|
-
East Grape 7000 December
|
|
2768
|
-
North Grape 6000 April
|
|
2769
|
-
East Pear 8000 February
|
|
2770
|
-
North Apple 7000 August
|
|
2771
|
-
North Orange 7000 July
|
|
2772
|
-
North Apple 6000 June
|
|
2773
|
-
South Grape 8000 September
|
|
2774
|
-
West Apple 3000 October
|
|
2775
|
-
South Orange 10000 November
|
|
2776
|
-
West Grape 4000 July
|
|
2777
|
-
North Orange 5000 August
|
|
2778
|
-
East Orange 1000 November
|
|
2779
|
-
East Orange 4000 October
|
|
2780
|
-
North Grape 5000 August
|
|
2781
|
-
East Apple 1000 December
|
|
2782
|
-
South Apple 10000 March
|
|
2783
|
-
East Grape 7000 October
|
|
2784
|
-
West Grape 1000 September
|
|
2785
|
-
East Grape 10000 October
|
|
2786
|
-
South Orange 8000 March
|
|
2787
|
-
North Apple 4000 July
|
|
2788
|
-
South Orange 5000 July
|
|
2789
|
-
West Apple 4000 June
|
|
2790
|
-
East Apple 5000 April
|
|
2791
|
-
North Pear 3000 August
|
|
2792
|
-
East Grape 9000 November
|
|
2793
|
-
North Orange 8000 October
|
|
2794
|
-
East Apple 10000 June
|
|
2795
|
-
South Pear 1000 December
|
|
2796
|
-
North Grape 10000 July
|
|
2797
|
-
East Grape 6000 February
|
|
2798
|
-
EOS
|
|
4295
|
+
compare_xlsx(File.join(@perl_output, @xlsx), @xlsx)
|
|
2799
4296
|
end
|
|
2800
4297
|
end
|