write_xlsx 0.0.4 → 0.51.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
@@ -15,14 +15,16 @@ module Writexlsx
|
|
15
15
|
class Chartsheet < Worksheet
|
16
16
|
include Writexlsx::Utility
|
17
17
|
|
18
|
+
attr_writer :chart
|
19
|
+
|
18
20
|
def initialize(workbook, index, name)
|
19
21
|
super
|
20
|
-
@drawing
|
22
|
+
@drawing = Drawing.new
|
21
23
|
@is_chartsheet = true
|
22
24
|
@chart = nil
|
23
25
|
@charts = [1]
|
24
26
|
@zoom_scale_normal = 0
|
25
|
-
@
|
27
|
+
@print_style.orientation = false
|
26
28
|
end
|
27
29
|
|
28
30
|
#
|
@@ -30,7 +32,7 @@ def initialize(workbook, index, name)
|
|
30
32
|
#
|
31
33
|
def assemble_xml_file # :nodoc:
|
32
34
|
return unless @writer
|
33
|
-
|
35
|
+
@writer.xml_decl
|
34
36
|
|
35
37
|
# Write the root chartsheet element.
|
36
38
|
write_chartsheet
|
@@ -64,7 +66,7 @@ def assemble_xml_file # :nodoc:
|
|
64
66
|
|
65
67
|
# Close the XML writer object and filehandle.
|
66
68
|
@writer.crlf
|
67
|
-
@writer.
|
69
|
+
@writer.close
|
68
70
|
end
|
69
71
|
|
70
72
|
def protect(password = '', options = {})
|
@@ -96,6 +98,14 @@ def set_y_axis(*args)
|
|
96
98
|
@chart.set_y_axis(*args)
|
97
99
|
end
|
98
100
|
|
101
|
+
def set_x2_axis(*args)
|
102
|
+
@chart.set_x2_axis(*args)
|
103
|
+
end
|
104
|
+
|
105
|
+
def set_y2_axis(*args)
|
106
|
+
@chart.set_y2_axis(*args)
|
107
|
+
end
|
108
|
+
|
99
109
|
def set_title(*args)
|
100
110
|
@chart.set_title(*args)
|
101
111
|
end
|
@@ -116,7 +126,13 @@ def set_style(*args)
|
|
116
126
|
@chart.set_style(*args)
|
117
127
|
end
|
118
128
|
|
119
|
-
|
129
|
+
def show_blanks_as(*args)
|
130
|
+
@chart.show_blanks_as(*args)
|
131
|
+
end
|
132
|
+
|
133
|
+
def show_hidden_data(*args)
|
134
|
+
@chart.show_hidden_data(*args)
|
135
|
+
end
|
120
136
|
|
121
137
|
#
|
122
138
|
# Set up chart/drawings.
|
@@ -124,13 +140,15 @@ def set_style(*args)
|
|
124
140
|
def prepare_chart(index, chart_id, drawing_id) # :nodoc:
|
125
141
|
drawing = Drawing.new
|
126
142
|
@drawing = drawing
|
127
|
-
@drawing.orientation = @orientation
|
143
|
+
@drawing.orientation = @print_style.orientation
|
128
144
|
|
129
|
-
@external_drawing_links << [ '/drawing',
|
145
|
+
@external_drawing_links << [ '/drawing', "../drawings/drawing#{drawing_id}.xml" ]
|
130
146
|
|
131
|
-
@drawing_links << [ '/chart',
|
147
|
+
@drawing_links << [ '/chart', "../charts/chart#{chart_id}.xml"]
|
132
148
|
end
|
133
149
|
|
150
|
+
private
|
151
|
+
|
134
152
|
#
|
135
153
|
# Write the <chartsheet> element. This is the root element of Chartsheet.
|
136
154
|
#
|
@@ -154,13 +172,13 @@ def write_chartsheet # :nodoc:
|
|
154
172
|
#
|
155
173
|
# Write the <sheetPr> element for Sheet level properties.
|
156
174
|
#
|
157
|
-
def
|
175
|
+
def write_sheet_pr # :nodoc:
|
158
176
|
|
159
177
|
attributes = []
|
160
178
|
|
161
|
-
attributes << {'filterMode' => 1} if @filter_on
|
179
|
+
attributes << {'filterMode' => 1} if ptrue?(@filter_on)
|
162
180
|
|
163
|
-
if @fit_page || @tab_color
|
181
|
+
if ptrue?(@fit_page) || ptrue?(@tab_color)
|
164
182
|
@writer.tag_elements('sheetPr', attributes) do
|
165
183
|
write_tab_color
|
166
184
|
write_page_set_up_pr
|
data/lib/write_xlsx/drawing.rb
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
-
require 'write_xlsx/package/xml_writer_simple
|
2
|
+
require 'write_xlsx/package/xml_writer_simple'
|
3
|
+
require 'write_xlsx/utility'
|
3
4
|
|
4
5
|
module Writexlsx
|
5
6
|
class Drawing
|
6
|
-
|
7
|
+
include Writexlsx::Utility
|
8
|
+
|
9
|
+
attr_writer :embedded, :orientation
|
7
10
|
|
8
11
|
def initialize
|
9
12
|
@writer = Package::XMLWriterSimple.new
|
@@ -30,13 +33,13 @@ def assemble_xml_file
|
|
30
33
|
write_drawing_workspace
|
31
34
|
|
32
35
|
if @embedded
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
36
|
+
index = 0
|
37
|
+
@drawings.each do |dimensions|
|
38
|
+
# Write the xdr:twoCellAnchor element.
|
39
|
+
index += 1
|
37
40
|
|
38
|
-
|
39
|
-
|
41
|
+
write_two_cell_anchor(index, *(dimensions.flatten))
|
42
|
+
end
|
40
43
|
else
|
41
44
|
index = 0
|
42
45
|
|
@@ -51,10 +54,10 @@ def assemble_xml_file
|
|
51
54
|
end
|
52
55
|
|
53
56
|
#
|
54
|
-
# Add a chart or
|
57
|
+
# Add a chart, image or shape sub object to the drawing.
|
55
58
|
#
|
56
59
|
def add_drawing_object(*args)
|
57
|
-
@drawings << args
|
60
|
+
@drawings << args.flatten
|
58
61
|
end
|
59
62
|
|
60
63
|
private
|
@@ -64,12 +67,9 @@ def add_drawing_object(*args)
|
|
64
67
|
#
|
65
68
|
def write_drawing_workspace
|
66
69
|
schema = 'http://schemas.openxmlformats.org/drawingml/'
|
67
|
-
xmlns_xdr = "#{schema}2006/spreadsheetDrawing"
|
68
|
-
xmlns_a = "#{schema}2006/main"
|
69
|
-
|
70
70
|
attributes = [
|
71
|
-
'xmlns:xdr',
|
72
|
-
'xmlns:a',
|
71
|
+
'xmlns:xdr', "#{schema}2006/spreadsheetDrawing",
|
72
|
+
'xmlns:a', "#{schema}2006/main"
|
73
73
|
]
|
74
74
|
|
75
75
|
@writer.start_tag('xdr:wsDr', attributes)
|
@@ -81,13 +81,16 @@ def write_drawing_workspace
|
|
81
81
|
def write_two_cell_anchor(*args)
|
82
82
|
index, type, col_from, row_from, col_from_offset, row_from_offset,
|
83
83
|
col_to, row_to, col_to_offset, row_to_offset, col_absolute, row_absolute,
|
84
|
-
width, height, description = args
|
84
|
+
width, height, description, shape = args
|
85
85
|
|
86
86
|
attributes = []
|
87
87
|
|
88
88
|
# Add attribute for images.
|
89
89
|
attributes << :editAs << 'oneCell' if type == 2
|
90
90
|
|
91
|
+
# Add attribute for shapes.
|
92
|
+
attributes << :editAs << shape[:edit_as] if shape && !shape[:edit_as].nil?
|
93
|
+
|
91
94
|
@writer.tag_elements('xdr:twoCellAnchor', attributes) do
|
92
95
|
# Write the xdr:from element.
|
93
96
|
write_from(col_from, row_from, col_from_offset, row_from_offset)
|
@@ -95,11 +98,16 @@ def write_two_cell_anchor(*args)
|
|
95
98
|
write_to(col_to, row_to, col_to_offset, row_to_offset)
|
96
99
|
|
97
100
|
if type == 1
|
101
|
+
# Graphic frame.
|
102
|
+
|
98
103
|
# Write the xdr:graphicFrame element for charts.
|
99
|
-
write_graphic_frame(index)
|
100
|
-
|
104
|
+
write_graphic_frame(index, description)
|
105
|
+
elsif type == 2
|
101
106
|
# Write the xdr:pic element.
|
102
107
|
write_pic(index, col_absolute, row_absolute, width, height, description)
|
108
|
+
else
|
109
|
+
# Write the xdr:sp element for shapes.
|
110
|
+
write_sp(index, col_absolute, row_absolute, width, height, shape)
|
103
111
|
end
|
104
112
|
|
105
113
|
# Write the xdr:clientData element.
|
@@ -108,6 +116,37 @@ def write_two_cell_anchor(*args)
|
|
108
116
|
end
|
109
117
|
|
110
118
|
#
|
119
|
+
# Write the <xdr:absoluteAnchor> element.
|
120
|
+
#
|
121
|
+
def write_absolute_anchor(index)
|
122
|
+
@writer.start_tag('xdr:absoluteAnchor')
|
123
|
+
|
124
|
+
# Different co-ordinates for horizonatal (= 0) and vertical (= 1).
|
125
|
+
if !ptrue?(@orientation)
|
126
|
+
|
127
|
+
# Write the xdr:pos element.
|
128
|
+
write_pos(0, 0)
|
129
|
+
|
130
|
+
# Write the xdr:ext element.
|
131
|
+
write_ext(9308969, 6078325)
|
132
|
+
else
|
133
|
+
# Write the xdr:pos element.
|
134
|
+
write_pos(0, -47625)
|
135
|
+
|
136
|
+
# Write the xdr:ext element.
|
137
|
+
write_ext(6162675, 6124575)
|
138
|
+
end
|
139
|
+
|
140
|
+
# Write the xdr:graphicFrame element.
|
141
|
+
write_graphic_frame(index)
|
142
|
+
|
143
|
+
# Write the xdr:clientData element.
|
144
|
+
write_client_data
|
145
|
+
|
146
|
+
@writer.end_tag('xdr:absoluteAnchor')
|
147
|
+
end
|
148
|
+
|
149
|
+
#
|
111
150
|
# Write the <xdr:from> element.
|
112
151
|
#
|
113
152
|
def write_from(col, row, col_offset, row_offset)
|
@@ -169,17 +208,41 @@ def write_row_off(data)
|
|
169
208
|
@writer.data_element('xdr:rowOff', data)
|
170
209
|
end
|
171
210
|
|
211
|
+
#
|
212
|
+
# Write the <xdr:pos> element.
|
213
|
+
#
|
214
|
+
def write_pos(x, y)
|
215
|
+
attributes = [
|
216
|
+
'x', x,
|
217
|
+
'y', y
|
218
|
+
]
|
219
|
+
|
220
|
+
@writer.empty_tag('xdr:pos', attributes)
|
221
|
+
end
|
222
|
+
|
223
|
+
#
|
224
|
+
# Write the <xdr:ext> element.
|
225
|
+
#
|
226
|
+
def write_ext(cx, cy)
|
227
|
+
attributes = [
|
228
|
+
'cx', cx,
|
229
|
+
'cy', cy
|
230
|
+
]
|
231
|
+
|
232
|
+
@writer.empty_tag('xdr:ext', attributes)
|
233
|
+
end
|
234
|
+
|
172
235
|
#
|
173
236
|
# Write the <xdr:graphicFrame> element.
|
174
237
|
#
|
175
|
-
def write_graphic_frame(index)
|
238
|
+
def write_graphic_frame(index, name = nil)
|
176
239
|
macro = ''
|
177
240
|
|
178
241
|
attributes = ['macro', macro]
|
179
242
|
|
180
243
|
@writer.tag_elements('xdr:graphicFrame', attributes) do
|
181
244
|
# Write the xdr:nvGraphicFramePr element.
|
182
|
-
write_nv_graphic_frame_pr(index)
|
245
|
+
write_nv_graphic_frame_pr(index, name)
|
183
246
|
# Write the xdr:xfrm element.
|
184
247
|
write_xfrm
|
185
248
|
# Write the a:graphic element.
|
@@ -190,10 +253,12 @@ def write_graphic_frame(index)
|
|
190
253
|
#
|
191
254
|
# Write the <xdr:nvGraphicFramePr> element.
|
192
255
|
#
|
193
|
-
def write_nv_graphic_frame_pr(index)
|
256
|
+
def write_nv_graphic_frame_pr(index, name = nil)
|
257
|
+
name = "Chart #{index}" if name.nil? || name.empty?
|
258
|
+
|
194
259
|
@writer.tag_elements('xdr:nvGraphicFramePr') do
|
195
260
|
# Write the xdr:cNvPr element.
|
196
|
-
write_c_nv_pr( index + 1,
|
261
|
+
write_c_nv_pr( index + 1, name)
|
197
262
|
# Write the xdr:cNvGraphicFramePr element.
|
198
263
|
write_c_nv_graphic_frame_pr
|
199
264
|
end
|
@@ -331,6 +396,83 @@ def write_client_data
|
|
331
396
|
@writer.empty_tag('xdr:clientData')
|
332
397
|
end
|
333
398
|
|
399
|
+
#
|
400
|
+
# Write the <xdr:sp> element.
|
401
|
+
#
|
402
|
+
def write_sp(index, col_absolute, row_absolute, width, height, shape)
|
403
|
+
if shape[:connect] != 0
|
404
|
+
attributes = [:macro, '']
|
405
|
+
@writer.tag_elements('xdr:cxnSp', attributes) do
|
406
|
+
|
407
|
+
# Write the xdr:nvCxnSpPr element.
|
408
|
+
write_nv_cxn_sp_pr(index, shape)
|
409
|
+
|
410
|
+
# Write the xdr:spPr element.
|
411
|
+
write_xdr_sp_pr(index, col_absolute, row_absolute, width, height, shape)
|
412
|
+
end
|
413
|
+
else
|
414
|
+
# Add attribute for shapes.
|
415
|
+
attributes = [:macro, '', :textlink, '']
|
416
|
+
@writer.tag_elements('xdr:sp', attributes) do
|
417
|
+
|
418
|
+
# Write the xdr:nvSpPr element.
|
419
|
+
write_nv_sp_pr(index, shape)
|
420
|
+
|
421
|
+
# Write the xdr:spPr element.
|
422
|
+
write_xdr_sp_pr(index, col_absolute, row_absolute, width, height, shape)
|
423
|
+
|
424
|
+
# Write the xdr:txBody element.
|
425
|
+
if shape[:text] != 0
|
426
|
+
write_txBody(col_absolute, row_absolute, width, height, shape)
|
427
|
+
end
|
428
|
+
end
|
429
|
+
end
|
430
|
+
end
|
431
|
+
|
432
|
+
#
|
433
|
+
# Write the <xdr:nvCxnSpPr> element.
|
434
|
+
#
|
435
|
+
def write_nv_cxn_sp_pr(index, shape)
|
436
|
+
@writer.tag_elements('xdr:nvCxnSpPr') do
|
437
|
+
|
438
|
+
shape[:name] = [shape[:type], index].join(' ') unless shape[:name]
|
439
|
+
write_c_nv_pr(shape[:id], shape[:name])
|
440
|
+
|
441
|
+
@writer.tag_elements('xdr:cNvCxnSpPr') do
|
442
|
+
|
443
|
+
attributes = [:noChangeShapeType, '1']
|
444
|
+
@writer.empty_tag('a:cxnSpLocks', attributes)
|
445
|
+
|
446
|
+
if shape[:start]
|
447
|
+
attributes = ['id', shape[:start], 'idx', shape[:start_index]]
|
448
|
+
@writer.empty_tag('a:stCxn', attributes)
|
449
|
+
end
|
450
|
+
|
451
|
+
if shape[:end]
|
452
|
+
attributes = ['id', shape[:end], 'idx', shape[:end_index]]
|
453
|
+
@writer.empty_tag('a:endCxn', attributes)
|
454
|
+
end
|
455
|
+
end
|
456
|
+
end
|
457
|
+
end
|
458
|
+
|
459
|
+
#
|
460
|
+
# Write the <xdr:NvSpPr> element.
|
461
|
+
#
|
462
|
+
def write_nv_sp_pr(index, shape)
|
463
|
+
attributes = []
|
464
|
+
|
465
|
+
@writer.tag_elements('xdr:nvSpPr') do
|
466
|
+
shape_name = "#{shape[:type]} #{index}"
|
467
|
+
write_c_nv_pr(shape[:id], shape_name)
|
468
|
+
attributes = ['txBox', 1] if shape[:tx_box] != 0
|
469
|
+
@writer.tag_elements('xdr:cNvSpPr', attributes) do
|
470
|
+
attributes = [:noChangeArrowheads, '1']
|
471
|
+
@writer.empty_tag('a:spLocks', attributes)
|
472
|
+
end
|
473
|
+
end
|
474
|
+
end
|
475
|
+
|
334
476
|
#
|
335
477
|
# Write the <xdr:pic> element.
|
336
478
|
#
|
@@ -340,8 +482,13 @@ def write_pic(index, col_absolute, row_absolute, width, height, description)
|
|
340
482
|
write_nv_pic_pr(index, description)
|
341
483
|
# Write the xdr:blipFill element.
|
342
484
|
write_blip_fill(index)
|
485
|
+
|
486
|
+
# Pictures are rectangle shapes by default.
|
487
|
+
shape = Shape.new
|
488
|
+
shape[:type] = 'rect'
|
489
|
+
|
343
490
|
# Write the xdr:spPr element.
|
344
|
-
write_sp_pr(col_absolute, row_absolute, width, height)
|
491
|
+
write_sp_pr(col_absolute, row_absolute, width, height, shape)
|
345
492
|
end
|
346
493
|
end
|
347
494
|
|
@@ -424,22 +571,57 @@ def write_a_fill_rect
|
|
424
571
|
end
|
425
572
|
|
426
573
|
#
|
427
|
-
# Write the <xdr:spPr> element.
|
574
|
+
# Write the <xdr:spPr> element, for charts.
|
428
575
|
#
|
429
|
-
def write_sp_pr(col_absolute, row_absolute, width, height)
|
576
|
+
def write_sp_pr(col_absolute, row_absolute, width, height, shape = {})
|
430
577
|
@writer.tag_elements('xdr:spPr') do
|
431
578
|
# Write the a:xfrm element.
|
432
579
|
write_a_xfrm(col_absolute, row_absolute, width, height)
|
433
580
|
# Write the a:prstGeom element.
|
434
|
-
write_a_prst_geom
|
581
|
+
write_a_prst_geom(shape)
|
582
|
+
end
|
583
|
+
end
|
584
|
+
|
585
|
+
#
|
586
|
+
# Write the <xdr:spPr> element for shapes.
|
587
|
+
#
|
588
|
+
def write_xdr_sp_pr(index, col_absolute, row_absolute, width, height, shape)
|
589
|
+
attributes = ['bwMode', 'auto']
|
590
|
+
|
591
|
+
@writer.tag_elements('xdr:spPr', attributes) do
|
592
|
+
|
593
|
+
# Write the a:xfrm element.
|
594
|
+
write_a_xfrm(col_absolute, row_absolute, width, height, shape)
|
595
|
+
|
596
|
+
# Write the a:prstGeom element.
|
597
|
+
write_a_prst_geom(shape)
|
598
|
+
|
599
|
+
if shape[:fill].to_s.bytesize > 1
|
600
|
+
# Write the a:solidFill element.
|
601
|
+
write_a_solid_fill(shape[:fill])
|
602
|
+
else
|
603
|
+
@writer.empty_tag('a:noFill')
|
604
|
+
end
|
605
|
+
|
606
|
+
# Write the a:ln element.
|
607
|
+
write_a_ln(shape)
|
435
608
|
end
|
436
609
|
end
|
437
610
|
|
438
611
|
#
|
439
612
|
# Write the <a:xfrm> element.
|
440
613
|
#
|
441
|
-
def write_a_xfrm(col_absolute, row_absolute, width, height)
|
442
|
-
|
614
|
+
def write_a_xfrm(col_absolute, row_absolute, width, height, shape = {})
|
615
|
+
attributes = []
|
616
|
+
|
617
|
+
rotation = shape[:rotation] || 0
|
618
|
+
rotation *= 60000
|
619
|
+
|
620
|
+
attributes << 'rot' << rotation if rotation != 0
|
621
|
+
attributes << 'flipH' << 1 if ptrue?(shape[:flip_h])
|
622
|
+
attributes << 'flipV' << 1 if ptrue?(shape[:flip_v])
|
623
|
+
|
624
|
+
@writer.tag_elements('a:xfrm', attributes) do
|
443
625
|
# Write the a:off element.
|
444
626
|
write_a_off( col_absolute, row_absolute )
|
445
627
|
# Write the a:ext element.
|
@@ -475,22 +657,159 @@ def write_a_ext(cx, cy)
|
|
475
657
|
#
|
476
658
|
# Write the <a:prstGeom> element.
|
477
659
|
#
|
478
|
-
def write_a_prst_geom
|
479
|
-
|
480
|
-
|
481
|
-
attributes = ['prst', prst]
|
660
|
+
def write_a_prst_geom(shape = {})
|
661
|
+
attributes = []
|
662
|
+
attributes << 'prst' << shape[:type] if shape[:type]
|
482
663
|
|
483
664
|
@writer.tag_elements('a:prstGeom', attributes) do
|
484
665
|
# Write the a:avLst element.
|
485
|
-
write_a_av_lst
|
666
|
+
write_a_av_lst(shape)
|
486
667
|
end
|
487
668
|
end
|
488
669
|
|
489
670
|
#
|
490
671
|
# Write the <a:avLst> element.
|
491
672
|
#
|
492
|
-
def write_a_av_lst
|
493
|
-
|
673
|
+
def write_a_av_lst(shape = {})
|
674
|
+
if shape[:adjustments].respond_to?(:empty?)
|
675
|
+
adjustments = shape[:adjustments]
|
676
|
+
elsif shape[:adjustments].respond_to?(:coerce)
|
677
|
+
adjustments = [shape[:adjustments]]
|
678
|
+
elsif !shape[:adjustments]
|
679
|
+
adjustments = []
|
680
|
+
end
|
681
|
+
|
682
|
+
if adjustments.respond_to?(:empty?) && !adjustments.empty?
|
683
|
+
@writer.tag_elements('a:avLst') do
|
684
|
+
i = 0
|
685
|
+
adjustments.each do |adj|
|
686
|
+
i += 1
|
687
|
+
# Only connectors have multiple adjustments.
|
688
|
+
suffix = shape[:connect] != 0 ? i : ''
|
689
|
+
|
690
|
+
# Scale Adjustments: 100,000 = 100%.
|
691
|
+
adj_int = (adj * 1000).to_i
|
692
|
+
|
693
|
+
attributes = [:name, "adj#{suffix}", :fmla, "val #{adj_int}"]
|
694
|
+
@writer.empty_tag('a:gd', attributes)
|
695
|
+
end
|
696
|
+
end
|
697
|
+
else
|
698
|
+
@writer.empty_tag('a:avLst')
|
699
|
+
end
|
700
|
+
end
|
701
|
+
|
702
|
+
#
|
703
|
+
# Write the <a:solidFill> element.
|
704
|
+
#
|
705
|
+
def write_a_solid_fill(rgb = '000000')
|
706
|
+
attributes = ['val', rgb]
|
707
|
+
|
708
|
+
@writer.tag_elements('a:solidFill') do
|
709
|
+
@writer.empty_tag('a:srgbClr', attributes)
|
710
|
+
end
|
711
|
+
end
|
712
|
+
|
713
|
+
#
|
714
|
+
# Write the <a:ln> elements.
|
715
|
+
#
|
716
|
+
def write_a_ln(shape = {})
|
717
|
+
weight = shape[:line_weight] || 0
|
718
|
+
attributes = ['w', weight * 9525]
|
719
|
+
@writer.tag_elements('a:ln', attributes) do
|
720
|
+
line = shape[:line] || 0
|
721
|
+
if line.to_s.bytesize > 1
|
722
|
+
# Write the a:solidFill element.
|
723
|
+
write_a_solid_fill(line)
|
724
|
+
else
|
725
|
+
@writer.empty_tag('a:noFill')
|
726
|
+
end
|
727
|
+
|
728
|
+
if shape[:line_type] != ''
|
729
|
+
attributes = ['val', shape[:line_type]]
|
730
|
+
@writer.empty_tag('a:prstDash', attributes)
|
731
|
+
end
|
732
|
+
|
733
|
+
if shape[:connect] != 0
|
734
|
+
@writer.empty_tag('a:round')
|
735
|
+
else
|
736
|
+
attributes = ['lim', 800000]
|
737
|
+
@writer.empty_tag('a:miter', attributes)
|
738
|
+
end
|
739
|
+
|
740
|
+
@writer.empty_tag('a:headEnd')
|
741
|
+
@writer.empty_tag('a:tailEnd')
|
742
|
+
end
|
743
|
+
end
|
744
|
+
|
745
|
+
#
|
746
|
+
# Write the <xdr:txBody> element.
|
747
|
+
#
|
748
|
+
def write_txBody(col_absolute, row_absolute, width, height, shape)
|
749
|
+
attributes = [
|
750
|
+
:vertOverflow, "clip",
|
751
|
+
:wrap, "square",
|
752
|
+
:lIns, "27432",
|
753
|
+
:tIns, "22860",
|
754
|
+
:rIns, "27432",
|
755
|
+
:bIns, "22860",
|
756
|
+
:anchor, shape[:valign],
|
757
|
+
:upright, "1"
|
758
|
+
]
|
759
|
+
@writer.tag_elements('xdr:txBody') do
|
760
|
+
@writer.empty_tag('a:bodyPr', attributes)
|
761
|
+
@writer.empty_tag('a:lstStyle')
|
762
|
+
|
763
|
+
@writer.tag_elements('a:p') do
|
764
|
+
rotation = shape[:format][:rotation] || 0
|
765
|
+
rotation *= 60000
|
766
|
+
|
767
|
+
attributes = [:algn, shape[:align], :rtl, rotation]
|
768
|
+
@writer.tag_elements('a:pPr', attributes) do
|
769
|
+
attributes = [:sz, "1000"]
|
770
|
+
@writer.empty_tag('a:defRPr', attributes)
|
771
|
+
end
|
772
|
+
|
773
|
+
@writer.tag_elements('a:r') do
|
774
|
+
size = shape[:format][:size] || 8
|
775
|
+
size *= 100
|
776
|
+
|
777
|
+
bold = shape[:format][:bold] || 0
|
778
|
+
italic = shape[:format][:italic] || 0
|
779
|
+
underline = ptrue?(shape[:format][:underline]) ? 'sng' : 'none'
|
780
|
+
strike = ptrue?(shape[:format][:font_strikeout]) ? 'Strike' : 'noStrike'
|
781
|
+
|
782
|
+
attributes = [
|
783
|
+
:lang, "en-US",
|
784
|
+
:sz, size,
|
785
|
+
:b, bold,
|
786
|
+
:i, italic,
|
787
|
+
:u, underline,
|
788
|
+
:strike, strike,
|
789
|
+
:baseline, 0
|
790
|
+
]
|
791
|
+
@writer.tag_elements('a:rPr', attributes) do
|
792
|
+
color = shape[:format][:color]
|
793
|
+
if color
|
794
|
+
color = shape.get_palette_color(color)
|
795
|
+
color = color.sub(/^FF/, '') # Remove leading FF from rgb for shape color.
|
796
|
+
else
|
797
|
+
color = '000000'
|
798
|
+
end
|
799
|
+
|
800
|
+
write_a_solid_fill(color)
|
801
|
+
|
802
|
+
font = shape[:format][:font] || 'Calibri'
|
803
|
+
attributes = [:typeface, font]
|
804
|
+
@writer.empty_tag('a:latin', attributes)
|
805
|
+
@writer.empty_tag('a:cs', attributes)
|
806
|
+
end
|
807
|
+
@writer.tag_elements('a:t') do
|
808
|
+
@writer.characters(shape[:text])
|
809
|
+
end
|
810
|
+
end
|
811
|
+
end
|
812
|
+
end
|
494
813
|
end
|
495
814
|
end
|
496
815
|
end
|