write_xlsx 1.09.4 → 1.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +109 -0
- data/.rubocop_todo.yml +445 -0
- data/Changes +8 -0
- data/Gemfile +2 -0
- data/LICENSE.txt +1 -1
- data/Rakefile +14 -8
- data/examples/array_formula.rb +2 -2
- data/examples/autofilter.rb +50 -26
- data/examples/chart_area.rb +10 -10
- data/examples/chart_bar.rb +10 -10
- data/examples/chart_column.rb +10 -10
- data/examples/chart_combined.rb +2 -3
- data/examples/chart_data_labels.rb +23 -35
- data/examples/chart_data_table.rb +16 -16
- data/examples/chart_data_tools.rb +36 -42
- data/examples/chart_doughnut.rb +21 -25
- data/examples/chart_gauge.rb +17 -17
- data/examples/chart_line.rb +25 -26
- data/examples/chart_pareto.rb +3 -3
- data/examples/chart_pie.rb +15 -15
- data/examples/chart_radar.rb +30 -30
- data/examples/chart_scatter.rb +10 -10
- data/examples/chart_secondary_axis.rb +9 -9
- data/examples/chart_stock.rb +10 -11
- data/examples/chart_styles.rb +6 -7
- data/examples/colors.rb +26 -29
- data/examples/comments1.rb +1 -0
- data/examples/comments2.rb +85 -114
- data/examples/conditional_format.rb +159 -150
- data/examples/data_validate.rb +135 -122
- data/examples/date_time.rb +29 -29
- data/examples/defined_name.rb +5 -5
- data/examples/demo.rb +10 -12
- data/examples/diag_border.rb +4 -5
- data/examples/dynamic_arrays.rb +247 -0
- data/examples/formats.rb +93 -105
- data/examples/headers.rb +2 -7
- data/examples/hyperlink1.rb +5 -6
- data/examples/ignore_errors.rb +1 -1
- data/examples/lambda.rb +43 -0
- data/examples/macros.rb +6 -6
- data/examples/merge1.rb +0 -3
- data/examples/merge2.rb +9 -12
- data/examples/merge3.rb +6 -7
- data/examples/merge4.rb +2 -4
- data/examples/merge5.rb +6 -6
- data/examples/merge6.rb +1 -1
- data/examples/outline.rb +8 -16
- data/examples/outline_collapsed.rb +6 -6
- data/examples/panes.rb +15 -15
- data/examples/properties.rb +9 -9
- data/examples/rich_strings.rb +19 -11
- data/examples/shape1.rb +9 -9
- data/examples/shape2.rb +19 -19
- data/examples/shape3.rb +6 -6
- data/examples/shape4.rb +9 -9
- data/examples/shape5.rb +8 -8
- data/examples/shape6.rb +8 -8
- data/examples/shape7.rb +14 -14
- data/examples/shape8.rb +14 -14
- data/examples/shape_all.rb +6 -6
- data/examples/sparklines1.rb +23 -24
- data/examples/sparklines2.rb +151 -151
- data/examples/tables.rb +86 -94
- data/examples/update_range_format_with_params.rb +4 -4
- data/examples/watermark.png +0 -0
- data/examples/watermark.rb +26 -0
- data/lib/write_xlsx/chart/area.rb +8 -9
- data/lib/write_xlsx/chart/axis.rb +12 -24
- data/lib/write_xlsx/chart/bar.rb +4 -8
- data/lib/write_xlsx/chart/column.rb +3 -4
- data/lib/write_xlsx/chart/doughnut.rb +3 -2
- data/lib/write_xlsx/chart/line.rb +16 -17
- data/lib/write_xlsx/chart/pie.rb +13 -13
- data/lib/write_xlsx/chart/radar.rb +8 -9
- data/lib/write_xlsx/chart/scatter.rb +20 -23
- data/lib/write_xlsx/chart/series.rb +32 -45
- data/lib/write_xlsx/chart/stock.rb +29 -24
- data/lib/write_xlsx/chart.rb +184 -217
- data/lib/write_xlsx/chartsheet.rb +23 -31
- data/lib/write_xlsx/col_name.rb +3 -1
- data/lib/write_xlsx/colors.rb +2 -1
- data/lib/write_xlsx/compatibility.rb +15 -15
- data/lib/write_xlsx/drawing.rb +72 -63
- data/lib/write_xlsx/format.rb +57 -59
- data/lib/write_xlsx/formats.rb +2 -0
- data/lib/write_xlsx/gradient.rb +7 -9
- data/lib/write_xlsx/package/app.rb +13 -16
- data/lib/write_xlsx/package/button.rb +9 -5
- data/lib/write_xlsx/package/comments.rb +34 -37
- data/lib/write_xlsx/package/conditional_format.rb +91 -110
- data/lib/write_xlsx/package/content_types.rb +21 -21
- data/lib/write_xlsx/package/core.rb +6 -4
- data/lib/write_xlsx/package/custom.rb +8 -7
- data/lib/write_xlsx/package/metadata.rb +7 -5
- data/lib/write_xlsx/package/packager.rb +37 -22
- data/lib/write_xlsx/package/relationships.rb +2 -1
- data/lib/write_xlsx/package/shared_strings.rb +12 -12
- data/lib/write_xlsx/package/styles.rb +55 -68
- data/lib/write_xlsx/package/table.rb +78 -95
- data/lib/write_xlsx/package/theme.rb +4 -3
- data/lib/write_xlsx/package/vml.rb +25 -31
- data/lib/write_xlsx/package/xml_writer_simple.rb +40 -22
- data/lib/write_xlsx/shape.rb +21 -31
- data/lib/write_xlsx/sheets.rb +38 -46
- data/lib/write_xlsx/sparkline.rb +12 -20
- data/lib/write_xlsx/utility.rb +131 -145
- data/lib/write_xlsx/version.rb +3 -1
- data/lib/write_xlsx/workbook.rb +248 -299
- data/lib/write_xlsx/worksheet/cell_data.rb +78 -64
- data/lib/write_xlsx/worksheet/data_validation.rb +66 -73
- data/lib/write_xlsx/worksheet/hyperlink.rb +12 -17
- data/lib/write_xlsx/worksheet/page_setup.rb +10 -11
- data/lib/write_xlsx/worksheet.rb +688 -580
- data/lib/write_xlsx/zip_file_utils.rb +31 -32
- data/lib/write_xlsx.rb +2 -3
- data/write_xlsx.gemspec +24 -18
- metadata +56 -3883
- data/.gitattributes +0 -1
- data/.gitignore +0 -45
- data/.travis.yml +0 -75
- data/bin/extract_vba.rb +0 -34
- data/test/chart/test_add_series.rb +0 -190
- data/test/chart/test_process_names.rb +0 -27
- data/test/chart/test_write_a_latin.rb +0 -22
- data/test/chart/test_write_auto.rb +0 -15
- data/test/chart/test_write_ax_id.rb +0 -15
- data/test/chart/test_write_ax_pos.rb +0 -15
- data/test/chart/test_write_cross_ax.rb +0 -15
- data/test/chart/test_write_crosses.rb +0 -15
- data/test/chart/test_write_d_lbls.rb +0 -292
- data/test/chart/test_write_format_code.rb +0 -16
- data/test/chart/test_write_idx.rb +0 -15
- data/test/chart/test_write_label_align.rb +0 -15
- data/test/chart/test_write_label_offset.rb +0 -15
- data/test/chart/test_write_lang.rb +0 -15
- data/test/chart/test_write_layout.rb +0 -15
- data/test/chart/test_write_legend.rb +0 -16
- data/test/chart/test_write_legend_pos.rb +0 -23
- data/test/chart/test_write_major_gridlines.rb +0 -15
- data/test/chart/test_write_marker.rb +0 -17
- data/test/chart/test_write_marker_size.rb +0 -15
- data/test/chart/test_write_marker_value.rb +0 -16
- data/test/chart/test_write_num_cache.rb +0 -16
- data/test/chart/test_write_number_format.rb +0 -48
- data/test/chart/test_write_order.rb +0 -15
- data/test/chart/test_write_orientation.rb +0 -15
- data/test/chart/test_write_page_margins.rb +0 -15
- data/test/chart/test_write_page_setup.rb +0 -15
- data/test/chart/test_write_plot_vis_only.rb +0 -15
- data/test/chart/test_write_pt.rb +0 -16
- data/test/chart/test_write_pt_count.rb +0 -16
- data/test/chart/test_write_series_formula.rb +0 -16
- data/test/chart/test_write_style.rb +0 -41
- data/test/chart/test_write_symbol.rb +0 -16
- data/test/chart/test_write_tick_lbl_pos.rb +0 -16
- data/test/chart/test_write_v.rb +0 -16
- data/test/chartsheet/test_chartsheet01.rb +0 -31
- data/test/chartsheet/test_write_sheet_protection.rb +0 -91
- data/test/drawing/test_drawing_chart_01.rb +0 -54
- data/test/drawing/test_drawing_image_01.rb +0 -68
- data/test/drawing/test_drawing_shape_01.rb +0 -71
- data/test/drawing/test_drawing_shape_02.rb +0 -80
- data/test/drawing/test_drawing_shape_03.rb +0 -41
- data/test/drawing/test_drawing_shape_04.rb +0 -105
- data/test/drawing/test_drawing_shape_05.rb +0 -48
- data/test/drawing/test_drawing_shape_06.rb +0 -47
- data/test/drawing/test_drawing_shape_07.rb +0 -52
- data/test/drawing/test_write_a_graphic_frame_locks.rb +0 -18
- data/test/drawing/test_write_c_chart.rb +0 -18
- data/test/drawing/test_write_c_nv_graphic_frame_pr.rb +0 -28
- data/test/drawing/test_write_c_nv_pr.rb +0 -18
- data/test/drawing/test_write_col.rb +0 -18
- data/test/drawing/test_write_col_off.rb +0 -18
- data/test/drawing/test_write_pos.rb +0 -18
- data/test/drawing/test_write_row.rb +0 -18
- data/test/drawing/test_write_row_off.rb +0 -18
- data/test/drawing/test_write_xdr_ext.rb +0 -18
- data/test/drawing/test_write_xfrm_extension.rb +0 -18
- data/test/drawing/test_write_xfrm_offset.rb +0 -18
- data/test/helper.rb +0 -206
- data/test/package/app/test_app01.rb +0 -44
- data/test/package/app/test_app02.rb +0 -46
- data/test/package/app/test_app03.rb +0 -53
- data/test/package/comments/test_comments_01.rb +0 -54
- data/test/package/comments/test_comments_02.rb +0 -54
- data/test/package/content_types/test_content_types.rb +0 -35
- data/test/package/content_types/test_write_default.rb +0 -13
- data/test/package/content_types/test_write_override.rb +0 -13
- data/test/package/core/test_core01.rb +0 -28
- data/test/package/core/test_core02.rb +0 -42
- data/test/package/relationships/test_relationships.rb +0 -28
- data/test/package/relationships/test_sheet_rels.rb +0 -22
- data/test/package/shared_strings/test_shared_strings01.rb +0 -30
- data/test/package/shared_strings/test_shared_strings02.rb +0 -30
- data/test/package/shared_strings/test_write_si.rb +0 -16
- data/test/package/styles/test_styles_01.rb +0 -60
- data/test/package/styles/test_styles_02.rb +0 -95
- data/test/package/styles/test_styles_03.rb +0 -81
- data/test/package/styles/test_styles_04.rb +0 -207
- data/test/package/styles/test_styles_05.rb +0 -141
- data/test/package/styles/test_styles_06.rb +0 -95
- data/test/package/styles/test_styles_07.rb +0 -95
- data/test/package/styles/test_styles_08.rb +0 -100
- data/test/package/styles/test_styles_09.rb +0 -86
- data/test/package/table/test_table01.rb +0 -42
- data/test/package/table/test_table02.rb +0 -44
- data/test/package/table/test_table03.rb +0 -48
- data/test/package/table/test_table04.rb +0 -46
- data/test/package/table/test_table05.rb +0 -46
- data/test/package/table/test_table06.rb +0 -52
- data/test/package/table/test_table07.rb +0 -47
- data/test/package/table/test_table08.rb +0 -53
- data/test/package/table/test_table09.rb +0 -65
- data/test/package/table/test_table10.rb +0 -45
- data/test/package/table/test_table11.rb +0 -60
- data/test/package/table/test_table12.rb +0 -60
- data/test/package/table/test_table13.rb +0 -69
- data/test/package/table/test_write_auto_filter.rb +0 -23
- data/test/package/table/test_write_table_column.rb +0 -22
- data/test/package/table/test_write_table_style_info.rb +0 -26
- data/test/package/vml/test_write_auto_fill.rb +0 -14
- data/test/package/vml/test_write_div.rb +0 -14
- data/test/package/vml/test_write_idmap.rb +0 -14
- data/test/package/vml/test_write_path.rb +0 -30
- data/test/package/vml/test_write_shapelayout.rb +0 -14
- data/test/package/vml/test_write_shapetype.rb +0 -22
- data/test/package/vml/test_write_stroke.rb +0 -14
- data/test/perl_output/a_simple.xlsx +0 -0
- data/test/perl_output/add_vba_project.xlsm +0 -0
- data/test/perl_output/array_formula.xlsx +0 -0
- data/test/perl_output/autofilter.xlsx +0 -0
- data/test/perl_output/background.xlsx +0 -0
- data/test/perl_output/chart_area.xlsx +0 -0
- data/test/perl_output/chart_bar.xlsx +0 -0
- data/test/perl_output/chart_column.xlsx +0 -0
- data/test/perl_output/chart_combined.xlsx +0 -0
- data/test/perl_output/chart_data_labels.xlsx +0 -0
- data/test/perl_output/chart_data_table.xlsx +0 -0
- data/test/perl_output/chart_data_tools.xlsx +0 -0
- data/test/perl_output/chart_doughnut.xlsx +0 -0
- data/test/perl_output/chart_gauge.xlsx +0 -0
- data/test/perl_output/chart_line.xlsx +0 -0
- data/test/perl_output/chart_pareto.xlsx +0 -0
- data/test/perl_output/chart_pie.xlsx +0 -0
- data/test/perl_output/chart_radar.xlsx +0 -0
- data/test/perl_output/chart_scatter.xlsx +0 -0
- data/test/perl_output/chart_scatter06.xlsx +0 -0
- data/test/perl_output/chart_secondary_axis.xlsx +0 -0
- data/test/perl_output/chart_stock.xlsx +0 -0
- data/test/perl_output/comments1.xlsx +0 -0
- data/test/perl_output/comments2.xlsx +0 -0
- data/test/perl_output/conditional_format.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/defined_name.xlsx +0 -0
- data/test/perl_output/demo.xlsx +0 -0
- data/test/perl_output/diag_border.xlsx +0 -0
- data/test/perl_output/fit_to_pages.xlsx +0 -0
- data/test/perl_output/formats.xlsx +0 -0
- data/test/perl_output/headers.xlsx +0 -0
- data/test/perl_output/hide_first_sheet.xlsx +0 -0
- data/test/perl_output/hide_row_col.xlsx +0 -0
- data/test/perl_output/hide_sheet.xlsx +0 -0
- data/test/perl_output/hyperlink.xlsx +0 -0
- data/test/perl_output/ignore_errors.xlsx +0 -0
- data/test/perl_output/indent.xlsx +0 -0
- data/test/perl_output/keep_leading_zeros.xlsx +0 -0
- data/test/perl_output/merge1.xlsx +0 -0
- data/test/perl_output/merge2.xlsx +0 -0
- data/test/perl_output/merge3.xlsx +0 -0
- data/test/perl_output/merge4.xlsx +0 -0
- data/test/perl_output/merge5.xlsx +0 -0
- data/test/perl_output/merge6.xlsx +0 -0
- data/test/perl_output/multi_line.xlsx +0 -0
- data/test/perl_output/outline.xlsx +0 -0
- data/test/perl_output/outline_collapsed.xlsx +0 -0
- data/test/perl_output/panes.xlsx +0 -0
- data/test/perl_output/print_scale.xlsx +0 -0
- data/test/perl_output/properties.xlsx +0 -0
- data/test/perl_output/protection.xlsx +0 -0
- data/test/perl_output/regions.xlsx +0 -0
- data/test/perl_output/rich_strings.xlsx +0 -0
- data/test/perl_output/right_to_left.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/sparklines1.xlsx +0 -0
- data/test/perl_output/sparklines2.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/tab_colors.xlsx +0 -0
- data/test/perl_output/tables.xlsx +0 -0
- data/test/regression/_test_hyperlink31.rb +0 -26
- data/test/regression/disabled_test_vml04.rb +0 -41
- data/test/regression/images/black_150.jpg +0 -0
- data/test/regression/images/black_150.png +0 -0
- data/test/regression/images/black_150e.png +0 -0
- data/test/regression/images/black_300.jpg +0 -0
- data/test/regression/images/black_300.png +0 -0
- data/test/regression/images/black_300e.png +0 -0
- data/test/regression/images/black_72.jpg +0 -0
- data/test/regression/images/black_72.png +0 -0
- data/test/regression/images/black_72e.png +0 -0
- data/test/regression/images/black_96.jpg +0 -0
- data/test/regression/images/black_96.png +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/happy.jpg +0 -0
- data/test/regression/images/issue32.png +0 -0
- data/test/regression/images/logo.gif +0 -0
- data/test/regression/images/logo.jpg +0 -0
- data/test/regression/images/logo.png +0 -0
- data/test/regression/images/mylogo.png +0 -0
- data/test/regression/images/red.bmp +0 -0
- data/test/regression/images/red.gif +0 -0
- data/test/regression/images/red.jpg +0 -0
- data/test/regression/images/red.png +0 -0
- data/test/regression/images/red2.png +0 -0
- data/test/regression/images/red_208.png +0 -0
- data/test/regression/images/red_64x20.png +0 -0
- data/test/regression/images/train.jpg +0 -0
- data/test/regression/images/yellow.jpg +0 -0
- data/test/regression/images/yellow.png +0 -0
- data/test/regression/images/zero_dpi.jpg +0 -0
- data/test/regression/klt.csv +0 -4
- data/test/regression/test_array_formula01.rb +0 -31
- data/test/regression/test_array_formula02.rb +0 -32
- data/test/regression/test_array_formula03.rb +0 -36
- data/test/regression/test_array_formula04.rb +0 -31
- data/test/regression/test_autofilter00.rb +0 -84
- data/test/regression/test_autofilter01.rb +0 -86
- data/test/regression/test_autofilter02.rb +0 -104
- data/test/regression/test_autofilter03.rb +0 -104
- data/test/regression/test_autofilter04.rb +0 -107
- data/test/regression/test_autofilter05.rb +0 -108
- data/test/regression/test_autofilter06.rb +0 -108
- data/test/regression/test_autofilter07.rb +0 -107
- data/test/regression/test_autofilter08.rb +0 -110
- data/test/regression/test_autofilter09.rb +0 -110
- data/test/regression/test_autofilter10.rb +0 -110
- data/test/regression/test_background01.rb +0 -23
- data/test/regression/test_background02.rb +0 -23
- data/test/regression/test_background03.rb +0 -24
- data/test/regression/test_background04.rb +0 -25
- data/test/regression/test_background05.rb +0 -25
- data/test/regression/test_background06.rb +0 -31
- data/test/regression/test_background07.rb +0 -37
- data/test/regression/test_button01.rb +0 -23
- data/test/regression/test_button02.rb +0 -29
- data/test/regression/test_button03.rb +0 -24
- data/test/regression/test_button04.rb +0 -25
- data/test/regression/test_button05.rb +0 -28
- data/test/regression/test_button06.rb +0 -28
- data/test/regression/test_button07.rb +0 -35
- data/test/regression/test_button08.rb +0 -28
- data/test/regression/test_button13.rb +0 -30
- data/test/regression/test_button14.rb +0 -31
- data/test/regression/test_chart_area01.rb +0 -45
- data/test/regression/test_chart_area02.rb +0 -45
- data/test/regression/test_chart_area03.rb +0 -45
- data/test/regression/test_chart_area04.rb +0 -44
- data/test/regression/test_chart_axis01.rb +0 -45
- data/test/regression/test_chart_axis02.rb +0 -45
- data/test/regression/test_chart_axis03.rb +0 -67
- data/test/regression/test_chart_axis04.rb +0 -52
- data/test/regression/test_chart_axis05.rb +0 -47
- data/test/regression/test_chart_axis06.rb +0 -49
- data/test/regression/test_chart_axis07.rb +0 -53
- data/test/regression/test_chart_axis08.rb +0 -52
- data/test/regression/test_chart_axis09.rb +0 -46
- data/test/regression/test_chart_axis10.rb +0 -52
- data/test/regression/test_chart_axis11.rb +0 -46
- data/test/regression/test_chart_axis12.rb +0 -46
- data/test/regression/test_chart_axis13.rb +0 -52
- data/test/regression/test_chart_axis14.rb +0 -66
- data/test/regression/test_chart_axis15.rb +0 -47
- data/test/regression/test_chart_axis16.rb +0 -69
- data/test/regression/test_chart_axis17.rb +0 -45
- data/test/regression/test_chart_axis18.rb +0 -43
- data/test/regression/test_chart_axis19.rb +0 -45
- data/test/regression/test_chart_axis20.rb +0 -45
- data/test/regression/test_chart_axis21.rb +0 -49
- data/test/regression/test_chart_axis22.rb +0 -44
- data/test/regression/test_chart_axis23.rb +0 -45
- data/test/regression/test_chart_axis24.rb +0 -45
- data/test/regression/test_chart_axis25.rb +0 -44
- data/test/regression/test_chart_axis26.rb +0 -46
- data/test/regression/test_chart_axis27.rb +0 -44
- data/test/regression/test_chart_axis28.rb +0 -44
- data/test/regression/test_chart_axis29.rb +0 -43
- data/test/regression/test_chart_axis30.rb +0 -40
- data/test/regression/test_chart_axis31.rb +0 -40
- data/test/regression/test_chart_axis32.rb +0 -40
- data/test/regression/test_chart_axis33.rb +0 -44
- data/test/regression/test_chart_axis34.rb +0 -43
- data/test/regression/test_chart_axis35.rb +0 -43
- data/test/regression/test_chart_axis36.rb +0 -43
- data/test/regression/test_chart_axis37.rb +0 -45
- data/test/regression/test_chart_axis38.rb +0 -43
- data/test/regression/test_chart_axis39.rb +0 -50
- data/test/regression/test_chart_axis40.rb +0 -44
- data/test/regression/test_chart_axis41.rb +0 -48
- data/test/regression/test_chart_axis42.rb +0 -44
- data/test/regression/test_chart_axis43.rb +0 -44
- data/test/regression/test_chart_axis44.rb +0 -54
- data/test/regression/test_chart_axis45.rb +0 -54
- data/test/regression/test_chart_axis46.rb +0 -54
- data/test/regression/test_chart_axis47.rb +0 -52
- data/test/regression/test_chart_axis48.rb +0 -53
- data/test/regression/test_chart_bar01.rb +0 -44
- data/test/regression/test_chart_bar02.rb +0 -54
- data/test/regression/test_chart_bar03.rb +0 -66
- data/test/regression/test_chart_bar04.rb +0 -69
- data/test/regression/test_chart_bar05.rb +0 -39
- data/test/regression/test_chart_bar06.rb +0 -49
- data/test/regression/test_chart_bar07.rb +0 -53
- data/test/regression/test_chart_bar08.rb +0 -43
- data/test/regression/test_chart_bar09.rb +0 -42
- data/test/regression/test_chart_bar10.rb +0 -46
- data/test/regression/test_chart_bar11.rb +0 -72
- data/test/regression/test_chart_bar12.rb +0 -38
- data/test/regression/test_chart_bar13.rb +0 -48
- data/test/regression/test_chart_bar14.rb +0 -64
- data/test/regression/test_chart_bar15.rb +0 -51
- data/test/regression/test_chart_bar16.rb +0 -49
- data/test/regression/test_chart_bar17.rb +0 -45
- data/test/regression/test_chart_bar18.rb +0 -56
- data/test/regression/test_chart_bar19.rb +0 -48
- data/test/regression/test_chart_bar20.rb +0 -45
- data/test/regression/test_chart_bar21.rb +0 -49
- data/test/regression/test_chart_bar22.rb +0 -66
- data/test/regression/test_chart_bar23.rb +0 -60
- data/test/regression/test_chart_bar24.rb +0 -44
- data/test/regression/test_chart_blank01.rb +0 -41
- data/test/regression/test_chart_blank02.rb +0 -41
- data/test/regression/test_chart_blank03.rb +0 -41
- data/test/regression/test_chart_blank04.rb +0 -41
- data/test/regression/test_chart_blank05.rb +0 -44
- data/test/regression/test_chart_blank06.rb +0 -41
- data/test/regression/test_chart_chartarea01.rb +0 -52
- data/test/regression/test_chart_chartarea02.rb +0 -52
- data/test/regression/test_chart_chartarea03.rb +0 -55
- data/test/regression/test_chart_chartarea04.rb +0 -71
- data/test/regression/test_chart_chartarea05.rb +0 -49
- data/test/regression/test_chart_chartarea06.rb +0 -49
- data/test/regression/test_chart_clustered01.rb +0 -65
- data/test/regression/test_chart_column01.rb +0 -39
- data/test/regression/test_chart_column02.rb +0 -44
- data/test/regression/test_chart_column03.rb +0 -44
- data/test/regression/test_chart_column04.rb +0 -44
- data/test/regression/test_chart_column05.rb +0 -39
- data/test/regression/test_chart_column06.rb +0 -45
- data/test/regression/test_chart_column07.rb +0 -40
- data/test/regression/test_chart_column08.rb +0 -42
- data/test/regression/test_chart_column09.rb +0 -39
- data/test/regression/test_chart_column10.rb +0 -39
- data/test/regression/test_chart_column11.rb +0 -41
- data/test/regression/test_chart_column12.rb +0 -37
- data/test/regression/test_chart_combined01.rb +0 -37
- data/test/regression/test_chart_combined02.rb +0 -43
- data/test/regression/test_chart_combined03.rb +0 -45
- data/test/regression/test_chart_combined04.rb +0 -47
- data/test/regression/test_chart_combined05.rb +0 -49
- data/test/regression/test_chart_combined06.rb +0 -49
- data/test/regression/test_chart_combined07.rb +0 -53
- data/test/regression/test_chart_combined08.rb +0 -65
- data/test/regression/test_chart_combined09.rb +0 -50
- data/test/regression/test_chart_combined10.rb +0 -43
- data/test/regression/test_chart_combined11.rb +0 -63
- data/test/regression/test_chart_crossing01.rb +0 -49
- data/test/regression/test_chart_crossing02.rb +0 -47
- data/test/regression/test_chart_crossing03.rb +0 -52
- data/test/regression/test_chart_crossing04.rb +0 -52
- data/test/regression/test_chart_crossing05.rb +0 -46
- data/test/regression/test_chart_crossing06.rb +0 -46
- data/test/regression/test_chart_data_labels01.rb +0 -47
- data/test/regression/test_chart_data_labels02.rb +0 -47
- data/test/regression/test_chart_data_labels03.rb +0 -47
- data/test/regression/test_chart_data_labels04.rb +0 -47
- data/test/regression/test_chart_data_labels05.rb +0 -50
- data/test/regression/test_chart_data_labels06.rb +0 -50
- data/test/regression/test_chart_data_labels07.rb +0 -40
- data/test/regression/test_chart_data_labels08.rb +0 -46
- data/test/regression/test_chart_data_labels09.rb +0 -47
- data/test/regression/test_chart_data_labels10.rb +0 -47
- data/test/regression/test_chart_data_labels11.rb +0 -37
- data/test/regression/test_chart_data_labels12.rb +0 -37
- data/test/regression/test_chart_data_labels13.rb +0 -37
- data/test/regression/test_chart_data_labels14.rb +0 -37
- data/test/regression/test_chart_data_labels15.rb +0 -37
- data/test/regression/test_chart_data_labels16.rb +0 -40
- data/test/regression/test_chart_data_labels17.rb +0 -63
- data/test/regression/test_chart_data_labels18.rb +0 -53
- data/test/regression/test_chart_data_labels19.rb +0 -53
- data/test/regression/test_chart_data_labels20.rb +0 -44
- data/test/regression/test_chart_data_labels21.rb +0 -48
- data/test/regression/test_chart_data_labels22.rb +0 -47
- data/test/regression/test_chart_data_labels23.rb +0 -50
- data/test/regression/test_chart_data_labels24.rb +0 -50
- data/test/regression/test_chart_data_labels25.rb +0 -61
- data/test/regression/test_chart_data_labels26.rb +0 -44
- data/test/regression/test_chart_data_labels27.rb +0 -44
- data/test/regression/test_chart_data_labels28.rb +0 -52
- data/test/regression/test_chart_data_labels29.rb +0 -43
- data/test/regression/test_chart_data_labels30.rb +0 -46
- data/test/regression/test_chart_data_labels31.rb +0 -49
- data/test/regression/test_chart_data_labels32.rb +0 -54
- data/test/regression/test_chart_data_labels33.rb +0 -52
- data/test/regression/test_chart_data_labels34.rb +0 -54
- data/test/regression/test_chart_data_labels35.rb +0 -46
- data/test/regression/test_chart_data_labels36.rb +0 -54
- data/test/regression/test_chart_data_labels37.rb +0 -51
- data/test/regression/test_chart_data_labels38.rb +0 -54
- data/test/regression/test_chart_data_labels39.rb +0 -53
- data/test/regression/test_chart_data_labels40.rb +0 -53
- data/test/regression/test_chart_data_labels41.rb +0 -54
- data/test/regression/test_chart_data_labels42.rb +0 -58
- data/test/regression/test_chart_data_labels43.rb +0 -58
- data/test/regression/test_chart_data_labels44.rb +0 -56
- data/test/regression/test_chart_data_labels45.rb +0 -57
- data/test/regression/test_chart_data_labels46.rb +0 -61
- data/test/regression/test_chart_data_labels47.rb +0 -61
- data/test/regression/test_chart_data_labels48.rb +0 -55
- data/test/regression/test_chart_data_labels49.rb +0 -55
- data/test/regression/test_chart_data_labels50.rb +0 -57
- data/test/regression/test_chart_date01.rb +0 -53
- data/test/regression/test_chart_date02.rb +0 -59
- data/test/regression/test_chart_date03.rb +0 -59
- data/test/regression/test_chart_date04.rb +0 -61
- data/test/regression/test_chart_date05.rb +0 -57
- data/test/regression/test_chart_display_units01.rb +0 -35
- data/test/regression/test_chart_display_units02.rb +0 -36
- data/test/regression/test_chart_display_units03.rb +0 -36
- data/test/regression/test_chart_display_units04.rb +0 -36
- data/test/regression/test_chart_display_units05.rb +0 -36
- data/test/regression/test_chart_display_units06.rb +0 -36
- data/test/regression/test_chart_display_units07.rb +0 -36
- data/test/regression/test_chart_display_units08.rb +0 -36
- data/test/regression/test_chart_display_units09.rb +0 -36
- data/test/regression/test_chart_display_units10.rb +0 -36
- data/test/regression/test_chart_display_units11.rb +0 -36
- data/test/regression/test_chart_display_units12.rb +0 -41
- data/test/regression/test_chart_doughnut01.rb +0 -39
- data/test/regression/test_chart_doughnut02.rb +0 -38
- data/test/regression/test_chart_doughnut03.rb +0 -38
- data/test/regression/test_chart_doughnut04.rb +0 -38
- data/test/regression/test_chart_doughnut05.rb +0 -38
- data/test/regression/test_chart_doughnut06.rb +0 -34
- data/test/regression/test_chart_doughnut07.rb +0 -37
- data/test/regression/test_chart_drop_lines01.rb +0 -46
- data/test/regression/test_chart_drop_lines02.rb +0 -51
- data/test/regression/test_chart_drop_lines03.rb +0 -46
- data/test/regression/test_chart_drop_lines04.rb +0 -64
- data/test/regression/test_chart_errorbars01.rb +0 -46
- data/test/regression/test_chart_errorbars02.rb +0 -56
- data/test/regression/test_chart_errorbars03.rb +0 -52
- data/test/regression/test_chart_errorbars04.rb +0 -47
- data/test/regression/test_chart_errorbars05.rb +0 -46
- data/test/regression/test_chart_errorbars06.rb +0 -46
- data/test/regression/test_chart_errorbars07.rb +0 -65
- data/test/regression/test_chart_errorbars08.rb +0 -50
- data/test/regression/test_chart_errorbars09.rb +0 -50
- data/test/regression/test_chart_errorbars10.rb +0 -52
- data/test/regression/test_chart_font01.rb +0 -54
- data/test/regression/test_chart_font02.rb +0 -56
- data/test/regression/test_chart_font03.rb +0 -59
- data/test/regression/test_chart_font04.rb +0 -57
- data/test/regression/test_chart_font05.rb +0 -54
- data/test/regression/test_chart_font06.rb +0 -84
- data/test/regression/test_chart_font07.rb +0 -44
- data/test/regression/test_chart_font08.rb +0 -44
- data/test/regression/test_chart_font09.rb +0 -40
- data/test/regression/test_chart_format01.rb +0 -44
- data/test/regression/test_chart_format02.rb +0 -45
- data/test/regression/test_chart_format03.rb +0 -46
- data/test/regression/test_chart_format04.rb +0 -45
- data/test/regression/test_chart_format05.rb +0 -45
- data/test/regression/test_chart_format06.rb +0 -50
- data/test/regression/test_chart_format07.rb +0 -55
- data/test/regression/test_chart_format08.rb +0 -50
- data/test/regression/test_chart_format09.rb +0 -54
- data/test/regression/test_chart_format10.rb +0 -57
- data/test/regression/test_chart_format11.rb +0 -61
- data/test/regression/test_chart_format12.rb +0 -58
- data/test/regression/test_chart_format13.rb +0 -50
- data/test/regression/test_chart_format14.rb +0 -54
- data/test/regression/test_chart_format15.rb +0 -52
- data/test/regression/test_chart_format16.rb +0 -55
- data/test/regression/test_chart_format17.rb +0 -39
- data/test/regression/test_chart_format18.rb +0 -43
- data/test/regression/test_chart_format19.rb +0 -46
- data/test/regression/test_chart_format20.rb +0 -54
- data/test/regression/test_chart_format21.rb +0 -47
- data/test/regression/test_chart_format22.rb +0 -47
- data/test/regression/test_chart_format23.rb +0 -47
- data/test/regression/test_chart_format24.rb +0 -52
- data/test/regression/test_chart_format25.rb +0 -46
- data/test/regression/test_chart_format26.rb +0 -48
- data/test/regression/test_chart_format27.rb +0 -58
- data/test/regression/test_chart_format28.rb +0 -52
- data/test/regression/test_chart_format29.rb +0 -59
- data/test/regression/test_chart_format30.rb +0 -53
- data/test/regression/test_chart_format31.rb +0 -60
- data/test/regression/test_chart_gap01.rb +0 -47
- data/test/regression/test_chart_gap02.rb +0 -47
- data/test/regression/test_chart_gap03.rb +0 -47
- data/test/regression/test_chart_gap04.rb +0 -54
- data/test/regression/test_chart_gap05.rb +0 -56
- data/test/regression/test_chart_gradient01.rb +0 -43
- data/test/regression/test_chart_gradient02.rb +0 -43
- data/test/regression/test_chart_gradient03.rb +0 -46
- data/test/regression/test_chart_gradient04.rb +0 -46
- data/test/regression/test_chart_gradient05.rb +0 -46
- data/test/regression/test_chart_gradient06.rb +0 -46
- data/test/regression/test_chart_gradient07.rb +0 -44
- data/test/regression/test_chart_gradient08.rb +0 -43
- data/test/regression/test_chart_gradient09.rb +0 -43
- data/test/regression/test_chart_gradient10.rb +0 -43
- data/test/regression/test_chart_gradient11.rb +0 -43
- data/test/regression/test_chart_gradient12.rb +0 -46
- data/test/regression/test_chart_gradient13.rb +0 -46
- data/test/regression/test_chart_gridlines01.rb +0 -42
- data/test/regression/test_chart_gridlines02.rb +0 -47
- data/test/regression/test_chart_gridlines03.rb +0 -63
- data/test/regression/test_chart_gridlines04.rb +0 -44
- data/test/regression/test_chart_gridlines05.rb +0 -48
- data/test/regression/test_chart_gridlines06.rb +0 -53
- data/test/regression/test_chart_gridlines07.rb +0 -69
- data/test/regression/test_chart_gridlines08.rb +0 -45
- data/test/regression/test_chart_gridlines09.rb +0 -67
- data/test/regression/test_chart_layout01.rb +0 -48
- data/test/regression/test_chart_layout02.rb +0 -48
- data/test/regression/test_chart_layout03.rb +0 -49
- data/test/regression/test_chart_layout04.rb +0 -47
- data/test/regression/test_chart_layout05.rb +0 -64
- data/test/regression/test_chart_layout06.rb +0 -48
- data/test/regression/test_chart_layout07.rb +0 -48
- data/test/regression/test_chart_layout08.rb +0 -49
- data/test/regression/test_chart_legend01.rb +0 -41
- data/test/regression/test_chart_legend02.rb +0 -41
- data/test/regression/test_chart_legend03.rb +0 -41
- data/test/regression/test_chart_legend04.rb +0 -41
- data/test/regression/test_chart_legend05.rb +0 -41
- data/test/regression/test_chart_legend06.rb +0 -41
- data/test/regression/test_chart_legend07.rb +0 -38
- data/test/regression/test_chart_line01.rb +0 -39
- data/test/regression/test_chart_line02.rb +0 -44
- data/test/regression/test_chart_line03.rb +0 -39
- data/test/regression/test_chart_line04.rb +0 -39
- data/test/regression/test_chart_line05.rb +0 -43
- data/test/regression/test_chart_line06.rb +0 -43
- data/test/regression/test_chart_name01.rb +0 -43
- data/test/regression/test_chart_name02.rb +0 -55
- data/test/regression/test_chart_name03.rb +0 -55
- data/test/regression/test_chart_order01.rb +0 -54
- data/test/regression/test_chart_order02.rb +0 -54
- data/test/regression/test_chart_order03.rb +0 -60
- data/test/regression/test_chart_pattern01.rb +0 -49
- data/test/regression/test_chart_pattern02.rb +0 -106
- data/test/regression/test_chart_pattern03.rb +0 -105
- data/test/regression/test_chart_pattern04.rb +0 -105
- data/test/regression/test_chart_pattern05.rb +0 -105
- data/test/regression/test_chart_pattern06.rb +0 -105
- data/test/regression/test_chart_pattern07.rb +0 -105
- data/test/regression/test_chart_pattern08.rb +0 -105
- data/test/regression/test_chart_pattern09.rb +0 -57
- data/test/regression/test_chart_pattern10.rb +0 -57
- data/test/regression/test_chart_pie01.rb +0 -36
- data/test/regression/test_chart_pie02.rb +0 -38
- data/test/regression/test_chart_pie03.rb +0 -38
- data/test/regression/test_chart_pie04.rb +0 -38
- data/test/regression/test_chart_pie05.rb +0 -38
- data/test/regression/test_chart_points01.rb +0 -37
- data/test/regression/test_chart_points02.rb +0 -40
- data/test/regression/test_chart_points03.rb +0 -42
- data/test/regression/test_chart_points04.rb +0 -52
- data/test/regression/test_chart_points05.rb +0 -49
- data/test/regression/test_chart_points06.rb +0 -49
- data/test/regression/test_chart_radar01.rb +0 -39
- data/test/regression/test_chart_radar02.rb +0 -43
- data/test/regression/test_chart_radar03.rb +0 -43
- data/test/regression/test_chart_scatter01.rb +0 -45
- data/test/regression/test_chart_scatter02.rb +0 -49
- data/test/regression/test_chart_scatter03.rb +0 -49
- data/test/regression/test_chart_scatter04.rb +0 -49
- data/test/regression/test_chart_scatter05.rb +0 -49
- data/test/regression/test_chart_scatter06.rb +0 -51
- data/test/regression/test_chart_scatter07.rb +0 -59
- data/test/regression/test_chart_scatter08.rb +0 -57
- data/test/regression/test_chart_scatter09.rb +0 -59
- data/test/regression/test_chart_scatter10.rb +0 -59
- data/test/regression/test_chart_scatter11.rb +0 -59
- data/test/regression/test_chart_scatter12.rb +0 -51
- data/test/regression/test_chart_scatter13.rb +0 -51
- data/test/regression/test_chart_scatter14.rb +0 -52
- data/test/regression/test_chart_scatter15.rb +0 -44
- data/test/regression/test_chart_size01.rb +0 -41
- data/test/regression/test_chart_size02.rb +0 -41
- data/test/regression/test_chart_size03.rb +0 -42
- data/test/regression/test_chart_size04.rb +0 -41
- data/test/regression/test_chart_size05.rb +0 -39
- data/test/regression/test_chart_sparse01.rb +0 -51
- data/test/regression/test_chart_stock01.rb +0 -65
- data/test/regression/test_chart_stock02.rb +0 -71
- data/test/regression/test_chart_str01.rb +0 -43
- data/test/regression/test_chart_str02.rb +0 -47
- data/test/regression/test_chart_table01.rb +0 -42
- data/test/regression/test_chart_table02.rb +0 -47
- data/test/regression/test_chart_table03.rb +0 -56
- data/test/regression/test_chart_title01.rb +0 -39
- data/test/regression/test_chart_title02.rb +0 -39
- data/test/regression/test_chartsheet01.rb +0 -41
- data/test/regression/test_chartsheet02.rb +0 -48
- data/test/regression/test_chartsheet03.rb +0 -46
- data/test/regression/test_chartsheet04.rb +0 -46
- data/test/regression/test_chartsheet05.rb +0 -46
- data/test/regression/test_chartsheet06.rb +0 -42
- data/test/regression/test_chartsheet07.rb +0 -55
- data/test/regression/test_chartsheet08.rb +0 -59
- data/test/regression/test_chartsheet09.rb +0 -50
- data/test/regression/test_comment01.rb +0 -27
- data/test/regression/test_comment02.rb +0 -28
- data/test/regression/test_comment03.rb +0 -31
- data/test/regression/test_comment04.rb +0 -36
- data/test/regression/test_comment06.rb +0 -33
- data/test/regression/test_comment07.rb +0 -35
- data/test/regression/test_comment08.rb +0 -35
- data/test/regression/test_comment09.rb +0 -31
- data/test/regression/test_comment10.rb +0 -30
- data/test/regression/test_comment11.rb +0 -31
- data/test/regression/test_comment12.rb +0 -30
- data/test/regression/test_comment13.rb +0 -36
- data/test/regression/test_comment14.rb +0 -29
- data/test/regression/test_comment15.rb +0 -28
- data/test/regression/test_comment16.rb +0 -34
- data/test/regression/test_cond_format01.rb +0 -45
- data/test/regression/test_cond_format02.rb +0 -40
- data/test/regression/test_cond_format03.rb +0 -51
- data/test/regression/test_cond_format04.rb +0 -50
- data/test/regression/test_cond_format05.rb +0 -40
- data/test/regression/test_cond_format06.rb +0 -44
- data/test/regression/test_cond_format07.rb +0 -61
- data/test/regression/test_cond_format08.rb +0 -45
- data/test/regression/test_cond_format10.rb +0 -42
- data/test/regression/test_cond_format11.rb +0 -46
- data/test/regression/test_cond_format12.rb +0 -46
- data/test/regression/test_cond_format13.rb +0 -52
- data/test/regression/test_cond_format14.rb +0 -42
- data/test/regression/test_cond_format15.rb +0 -53
- data/test/regression/test_cond_format16.rb +0 -53
- data/test/regression/test_cond_format17.rb +0 -37
- data/test/regression/test_cond_format18.rb +0 -136
- data/test/regression/test_cond_format19.rb +0 -64
- data/test/regression/test_cond_format20.rb +0 -43
- data/test/regression/test_custom_colors01.rb +0 -33
- data/test/regression/test_data_validation01.rb +0 -22
- data/test/regression/test_data_validation02.rb +0 -27
- data/test/regression/test_data_validation03.rb +0 -44
- data/test/regression/test_data_validation04.rb +0 -37
- data/test/regression/test_data_validation05.rb +0 -36
- data/test/regression/test_data_validation08.rb +0 -24
- data/test/regression/test_date_1904_01.rb +0 -31
- data/test/regression/test_date_1904_02.rb +0 -34
- data/test/regression/test_date_examples01.rb +0 -48
- data/test/regression/test_default_format01.rb +0 -22
- data/test/regression/test_default_row01.rb +0 -26
- data/test/regression/test_default_row02.rb +0 -28
- data/test/regression/test_default_row03.rb +0 -28
- data/test/regression/test_default_row04.rb +0 -31
- data/test/regression/test_default_row05.rb +0 -32
- data/test/regression/test_defined_name01.rb +0 -45
- data/test/regression/test_defined_name02.rb +0 -30
- data/test/regression/test_defined_name03.rb +0 -30
- data/test/regression/test_defined_name04.rb +0 -50
- data/test/regression/test_dynamic_array01.rb +0 -25
- data/test/regression/test_escapes01.rb +0 -35
- data/test/regression/test_escapes02.rb +0 -32
- data/test/regression/test_escapes03.rb +0 -33
- data/test/regression/test_escapes04.rb +0 -31
- data/test/regression/test_escapes05.rb +0 -32
- data/test/regression/test_escapes06.rb +0 -26
- data/test/regression/test_escapes07.rb +0 -29
- data/test/regression/test_escapes08.rb +0 -30
- data/test/regression/test_excel2003_style01.rb +0 -21
- data/test/regression/test_excel2003_style02.rb +0 -37
- data/test/regression/test_excel2003_style03.rb +0 -40
- data/test/regression/test_excel2003_style04.rb +0 -24
- data/test/regression/test_excel2003_style05.rb +0 -31
- data/test/regression/test_excel2003_style06.rb +0 -31
- data/test/regression/test_excel2003_style07.rb +0 -31
- data/test/regression/test_excel2003_style08.rb +0 -26
- data/test/regression/test_firstsheet01.rb +0 -43
- data/test/regression/test_fit_to_pages01.rb +0 -35
- data/test/regression/test_fit_to_pages02.rb +0 -35
- data/test/regression/test_fit_to_pages03.rb +0 -35
- data/test/regression/test_fit_to_pages04.rb +0 -35
- data/test/regression/test_fit_to_pages05.rb +0 -35
- data/test/regression/test_format01.rb +0 -35
- data/test/regression/test_format02.rb +0 -47
- data/test/regression/test_format03.rb +0 -31
- data/test/regression/test_format04.rb +0 -41
- data/test/regression/test_format05.rb +0 -26
- data/test/regression/test_format11.rb +0 -28
- data/test/regression/test_format12.rb +0 -41
- data/test/regression/test_format13.rb +0 -31
- data/test/regression/test_format14.rb +0 -26
- data/test/regression/test_format15.rb +0 -26
- data/test/regression/test_format16.rb +0 -24
- data/test/regression/test_format17.rb +0 -24
- data/test/regression/test_formula_results01.rb +0 -37
- data/test/regression/test_gridlines01.rb +0 -34
- data/test/regression/test_header01.rb +0 -28
- data/test/regression/test_header02.rb +0 -28
- data/test/regression/test_header03.rb +0 -31
- data/test/regression/test_header04.rb +0 -30
- data/test/regression/test_header_image01.rb +0 -26
- data/test/regression/test_header_image02.rb +0 -33
- data/test/regression/test_header_image03.rb +0 -34
- data/test/regression/test_header_image04.rb +0 -34
- data/test/regression/test_header_image05.rb +0 -28
- data/test/regression/test_header_image06.rb +0 -32
- data/test/regression/test_header_image07.rb +0 -29
- data/test/regression/test_header_image08.rb +0 -33
- data/test/regression/test_header_image09.rb +0 -32
- data/test/regression/test_header_image10.rb +0 -36
- data/test/regression/test_header_image11.rb +0 -28
- data/test/regression/test_header_image12.rb +0 -28
- data/test/regression/test_header_image13.rb +0 -36
- data/test/regression/test_header_image14.rb +0 -36
- data/test/regression/test_header_image15.rb +0 -36
- data/test/regression/test_header_image16.rb +0 -42
- data/test/regression/test_header_image17.rb +0 -46
- data/test/regression/test_header_image18.rb +0 -48
- data/test/regression/test_header_image19.rb +0 -36
- data/test/regression/test_hide01.rb +0 -25
- data/test/regression/test_hyperlink01.rb +0 -26
- data/test/regression/test_hyperlink02.rb +0 -30
- data/test/regression/test_hyperlink03.rb +0 -36
- data/test/regression/test_hyperlink04.rb +0 -34
- data/test/regression/test_hyperlink05.rb +0 -29
- data/test/regression/test_hyperlink06.rb +0 -28
- data/test/regression/test_hyperlink07.rb +0 -23
- data/test/regression/test_hyperlink08.rb +0 -27
- data/test/regression/test_hyperlink09.rb +0 -28
- data/test/regression/test_hyperlink10.rb +0 -27
- data/test/regression/test_hyperlink11.rb +0 -27
- data/test/regression/test_hyperlink12.rb +0 -28
- data/test/regression/test_hyperlink13.rb +0 -27
- data/test/regression/test_hyperlink14.rb +0 -27
- data/test/regression/test_hyperlink15.rb +0 -29
- data/test/regression/test_hyperlink16.rb +0 -29
- data/test/regression/test_hyperlink17.rb +0 -30
- data/test/regression/test_hyperlink18.rb +0 -30
- data/test/regression/test_hyperlink20.rb +0 -32
- data/test/regression/test_hyperlink21.rb +0 -27
- data/test/regression/test_hyperlink22.rb +0 -27
- data/test/regression/test_hyperlink23.rb +0 -27
- data/test/regression/test_hyperlink24.rb +0 -27
- data/test/regression/test_hyperlink25.rb +0 -30
- data/test/regression/test_hyperlink26.rb +0 -30
- data/test/regression/test_hyperlink27.rb +0 -27
- data/test/regression/test_hyperlink28.rb +0 -50
- data/test/regression/test_hyperlink29.rb +0 -27
- data/test/regression/test_hyperlink30.rb +0 -36
- data/test/regression/test_hyperlink32.rb +0 -27
- data/test/regression/test_hyperlink33.rb +0 -28
- data/test/regression/test_hyperlink34.rb +0 -33
- data/test/regression/test_hyperlink35.rb +0 -39
- data/test/regression/test_hyperlink36.rb +0 -34
- data/test/regression/test_hyperlink37.rb +0 -33
- data/test/regression/test_hyperlink38.rb +0 -27
- data/test/regression/test_hyperlink39.rb +0 -27
- data/test/regression/test_hyperlink40.rb +0 -27
- data/test/regression/test_hyperlink41.rb +0 -27
- data/test/regression/test_hyperlink42.rb +0 -27
- data/test/regression/test_hyperlink43.rb +0 -27
- data/test/regression/test_hyperlink44.rb +0 -27
- data/test/regression/test_hyperlink45.rb +0 -27
- data/test/regression/test_hyperlink47.rb +0 -27
- data/test/regression/test_hyperlink48.rb +0 -31
- data/test/regression/test_hyperlink49.rb +0 -29
- data/test/regression/test_hyperlink50.rb +0 -27
- data/test/regression/test_hyperlink51.rb +0 -27
- data/test/regression/test_ignore_error01.rb +0 -23
- data/test/regression/test_ignore_error02.rb +0 -24
- data/test/regression/test_ignore_error03.rb +0 -26
- data/test/regression/test_ignore_error04.rb +0 -26
- data/test/regression/test_ignore_error05.rb +0 -32
- data/test/regression/test_ignore_error06.rb +0 -32
- data/test/regression/test_image01.rb +0 -23
- data/test/regression/test_image02.rb +0 -23
- data/test/regression/test_image03.rb +0 -23
- data/test/regression/test_image04.rb +0 -23
- data/test/regression/test_image05.rb +0 -26
- data/test/regression/test_image06.rb +0 -36
- data/test/regression/test_image07.rb +0 -25
- data/test/regression/test_image08.rb +0 -27
- data/test/regression/test_image09.rb +0 -24
- data/test/regression/test_image10.rb +0 -24
- data/test/regression/test_image11.rb +0 -24
- data/test/regression/test_image12.rb +0 -27
- data/test/regression/test_image13.rb +0 -27
- data/test/regression/test_image14.rb +0 -29
- data/test/regression/test_image15.rb +0 -31
- data/test/regression/test_image16.rb +0 -24
- data/test/regression/test_image17.rb +0 -23
- data/test/regression/test_image18.rb +0 -27
- data/test/regression/test_image19.rb +0 -24
- data/test/regression/test_image22.rb +0 -24
- data/test/regression/test_image23.rb +0 -30
- data/test/regression/test_image24.rb +0 -24
- data/test/regression/test_image25.rb +0 -24
- data/test/regression/test_image26.rb +0 -30
- data/test/regression/test_image27.rb +0 -24
- data/test/regression/test_image28.rb +0 -27
- data/test/regression/test_image29.rb +0 -27
- data/test/regression/test_image30.rb +0 -27
- data/test/regression/test_image31.rb +0 -30
- data/test/regression/test_image32.rb +0 -28
- data/test/regression/test_image33.rb +0 -32
- data/test/regression/test_image35.rb +0 -26
- data/test/regression/test_image36.rb +0 -26
- data/test/regression/test_image44.rb +0 -28
- data/test/regression/test_image45.rb +0 -29
- data/test/regression/test_image46.rb +0 -29
- data/test/regression/test_image47.rb +0 -28
- data/test/regression/test_image48.rb +0 -32
- data/test/regression/test_image49.rb +0 -38
- data/test/regression/test_image50.rb +0 -24
- data/test/regression/test_image51.rb +0 -30
- data/test/regression/test_image52.rb +0 -26
- data/test/regression/test_image53.rb +0 -26
- data/test/regression/test_image54.rb +0 -26
- data/test/regression/test_image55.rb +0 -27
- data/test/regression/test_image56.rb +0 -23
- data/test/regression/test_image57.rb +0 -23
- data/test/regression/test_landscape01.rb +0 -27
- data/test/regression/test_macro01.rb +0 -29
- data/test/regression/test_merge_cells01.rb +0 -25
- data/test/regression/test_merge_range01.rb +0 -24
- data/test/regression/test_merge_range02.rb +0 -24
- data/test/regression/test_merge_range03.rb +0 -26
- data/test/regression/test_merge_range04.rb +0 -24
- data/test/regression/test_merge_range05.rb +0 -24
- data/test/regression/test_object_position01.rb +0 -26
- data/test/regression/test_object_position02.rb +0 -26
- data/test/regression/test_object_position03.rb +0 -26
- data/test/regression/test_object_position04.rb +0 -44
- data/test/regression/test_object_position06.rb +0 -28
- data/test/regression/test_object_position07.rb +0 -28
- data/test/regression/test_object_position08.rb +0 -47
- data/test/regression/test_object_position09.rb +0 -50
- data/test/regression/test_object_position10.rb +0 -28
- data/test/regression/test_object_position12.rb +0 -25
- data/test/regression/test_object_position13.rb +0 -25
- data/test/regression/test_object_position14.rb +0 -25
- data/test/regression/test_object_position15.rb +0 -29
- data/test/regression/test_object_position16.rb +0 -29
- data/test/regression/test_object_position17.rb +0 -29
- data/test/regression/test_object_position18.rb +0 -29
- data/test/regression/test_object_position19.rb +0 -29
- data/test/regression/test_object_position20.rb +0 -29
- data/test/regression/test_outline01.rb +0 -84
- data/test/regression/test_outline02.rb +0 -87
- data/test/regression/test_outline03.rb +0 -57
- data/test/regression/test_outline04.rb +0 -53
- data/test/regression/test_outline05.rb +0 -88
- data/test/regression/test_outline06.rb +0 -87
- data/test/regression/test_page_breaks01.rb +0 -34
- data/test/regression/test_page_breaks02.rb +0 -34
- data/test/regression/test_page_breaks03.rb +0 -34
- data/test/regression/test_page_breaks04.rb +0 -34
- data/test/regression/test_page_breaks05.rb +0 -34
- data/test/regression/test_page_breaks06.rb +0 -35
- data/test/regression/test_page_view01.rb +0 -34
- data/test/regression/test_panes01.rb +0 -61
- data/test/regression/test_print_across01.rb +0 -35
- data/test/regression/test_print_area01.rb +0 -34
- data/test/regression/test_print_area02.rb +0 -34
- data/test/regression/test_print_area03.rb +0 -34
- data/test/regression/test_print_area04.rb +0 -34
- data/test/regression/test_print_area05.rb +0 -34
- data/test/regression/test_print_area06.rb +0 -34
- data/test/regression/test_print_area07.rb +0 -35
- data/test/regression/test_print_options01.rb +0 -34
- data/test/regression/test_print_options02.rb +0 -34
- data/test/regression/test_print_options03.rb +0 -34
- data/test/regression/test_print_options04.rb +0 -34
- data/test/regression/test_print_options05.rb +0 -37
- data/test/regression/test_print_options06.rb +0 -35
- data/test/regression/test_print_options07.rb +0 -31
- data/test/regression/test_print_scale01.rb +0 -35
- data/test/regression/test_print_scale02.rb +0 -35
- data/test/regression/test_properties01.rb +0 -36
- data/test/regression/test_properties02.rb +0 -25
- data/test/regression/test_properties03.rb +0 -26
- data/test/regression/test_properties04.rb +0 -61
- data/test/regression/test_properties05.rb +0 -30
- data/test/regression/test_protect01.rb +0 -28
- data/test/regression/test_protect02.rb +0 -30
- data/test/regression/test_protect03.rb +0 -30
- data/test/regression/test_protect04.rb +0 -32
- data/test/regression/test_protect05.rb +0 -35
- data/test/regression/test_protect06.rb +0 -35
- data/test/regression/test_protect07.rb +0 -23
- data/test/regression/test_quote_name01.rb +0 -48
- data/test/regression/test_quote_name03.rb +0 -41
- data/test/regression/test_quote_name04.rb +0 -40
- data/test/regression/test_repeat01.rb +0 -34
- data/test/regression/test_repeat02.rb +0 -34
- data/test/regression/test_repeat03.rb +0 -35
- data/test/regression/test_repeat04.rb +0 -34
- data/test/regression/test_repeat05.rb +0 -41
- data/test/regression/test_rich_string01.rb +0 -28
- data/test/regression/test_rich_string02.rb +0 -28
- data/test/regression/test_rich_string03.rb +0 -28
- data/test/regression/test_rich_string04.rb +0 -28
- data/test/regression/test_rich_string05.rb +0 -30
- data/test/regression/test_rich_string06.rb +0 -27
- data/test/regression/test_rich_string07.rb +0 -33
- data/test/regression/test_rich_string08.rb +0 -29
- data/test/regression/test_rich_string09.rb +0 -31
- data/test/regression/test_rich_string10.rb +0 -30
- data/test/regression/test_rich_string11.rb +0 -29
- data/test/regression/test_rich_string12.rb +0 -32
- data/test/regression/test_row_col_format01.rb +0 -24
- data/test/regression/test_row_col_format02.rb +0 -25
- data/test/regression/test_row_col_format03.rb +0 -24
- data/test/regression/test_row_col_format04.rb +0 -25
- data/test/regression/test_row_col_format05.rb +0 -26
- data/test/regression/test_row_col_format06.rb +0 -29
- data/test/regression/test_row_col_format07.rb +0 -24
- data/test/regression/test_row_col_format08.rb +0 -34
- data/test/regression/test_row_col_format09.rb +0 -33
- data/test/regression/test_row_col_format10.rb +0 -24
- data/test/regression/test_row_col_format11.rb +0 -23
- data/test/regression/test_row_col_format12.rb +0 -23
- data/test/regression/test_row_col_format13.rb +0 -28
- data/test/regression/test_row_col_format14.rb +0 -28
- data/test/regression/test_selection01.rb +0 -23
- data/test/regression/test_selection02.rb +0 -33
- data/test/regression/test_set_column01.rb +0 -63
- data/test/regression/test_set_column02.rb +0 -64
- data/test/regression/test_set_column03.rb +0 -34
- data/test/regression/test_set_column04.rb +0 -42
- data/test/regression/test_set_column05.rb +0 -52
- data/test/regression/test_set_column06.rb +0 -49
- data/test/regression/test_set_column07.rb +0 -45
- data/test/regression/test_set_column08.rb +0 -42
- data/test/regression/test_set_column09.rb +0 -31
- data/test/regression/test_set_column10.rb +0 -55
- data/test/regression/test_set_column11.rb +0 -48
- data/test/regression/test_set_print_scale01.rb +0 -36
- data/test/regression/test_set_row01.rb +0 -35
- data/test/regression/test_set_row02.rb +0 -35
- data/test/regression/test_set_row03.rb +0 -35
- data/test/regression/test_set_row04.rb +0 -35
- data/test/regression/test_set_start_page01.rb +0 -33
- data/test/regression/test_set_start_page02.rb +0 -33
- data/test/regression/test_set_start_page03.rb +0 -33
- data/test/regression/test_shape01.rb +0 -25
- data/test/regression/test_shape02.rb +0 -42
- data/test/regression/test_shape03.rb +0 -45
- data/test/regression/test_shape04.rb +0 -43
- data/test/regression/test_shape_connect01.rb +0 -48
- data/test/regression/test_shape_connect02.rb +0 -42
- data/test/regression/test_shape_connect03.rb +0 -78
- data/test/regression/test_shape_connect04.rb +0 -75
- data/test/regression/test_shape_scale01.rb +0 -45
- data/test/regression/test_shape_stencil01.rb +0 -39
- data/test/regression/test_shared_strings01.rb +0 -32
- data/test/regression/test_shared_strings02.rb +0 -45
- data/test/regression/test_shared_strings_encoding.rb +0 -0
- data/test/regression/test_simple01.rb +0 -24
- data/test/regression/test_simple02.rb +0 -32
- data/test/regression/test_simple03.rb +0 -39
- data/test/regression/test_simple04.rb +0 -29
- data/test/regression/test_simple05.rb +0 -40
- data/test/regression/test_tab_color01.rb +0 -20
- data/test/regression/test_table01.rb +0 -27
- data/test/regression/test_table02.rb +0 -37
- data/test/regression/test_table03.rb +0 -33
- data/test/regression/test_table04.rb +0 -37
- data/test/regression/test_table05.rb +0 -41
- data/test/regression/test_table06.rb +0 -44
- data/test/regression/test_table07.rb +0 -29
- data/test/regression/test_table08.rb +0 -48
- data/test/regression/test_table09.rb +0 -65
- data/test/regression/test_table10.rb +0 -68
- data/test/regression/test_table11.rb +0 -37
- data/test/regression/test_table12.rb +0 -36
- data/test/regression/test_table13.rb +0 -51
- data/test/regression/test_table14.rb +0 -51
- data/test/regression/test_table15.rb +0 -37
- data/test/regression/test_table16.rb +0 -37
- data/test/regression/test_table17.rb +0 -70
- data/test/regression/test_table20.rb +0 -34
- data/test/regression/test_table21.rb +0 -36
- data/test/regression/test_table22.rb +0 -32
- data/test/regression/test_table23.rb +0 -56
- data/test/regression/test_table24.rb +0 -27
- data/test/regression/test_table25.rb +0 -27
- data/test/regression/test_table26.rb +0 -38
- data/test/regression/test_tutorial01.rb +0 -38
- data/test/regression/test_tutorial02.rb +0 -44
- data/test/regression/test_tutorial03.rb +0 -49
- data/test/regression/test_types02.rb +0 -25
- data/test/regression/test_types08.rb +0 -31
- data/test/regression/test_update_range_format_with_params.rb +0 -42
- data/test/regression/test_urls_as_strings.rb +0 -25
- data/test/regression/test_utf8_01.rb +0 -23
- data/test/regression/test_utf8_03.rb +0 -23
- data/test/regression/test_utf8_04.rb +0 -23
- data/test/regression/test_utf8_05.rb +0 -26
- data/test/regression/test_utf8_06.rb +0 -28
- data/test/regression/test_utf8_07.rb +0 -27
- data/test/regression/test_utf8_08.rb +0 -38
- data/test/regression/test_utf8_09.rb +0 -20
- data/test/regression/test_utf8_10.rb +0 -42
- data/test/regression/test_utf8_11.rb +0 -23
- data/test/regression/test_vml01.rb +0 -29
- data/test/regression/test_vml02.rb +0 -31
- data/test/regression/test_vml03.rb +0 -40
- 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/array_formula03.xlsx +0 -0
- data/test/regression/xlsx_files/array_formula04.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/autofilter08.xlsx +0 -0
- data/test/regression/xlsx_files/autofilter09.xlsx +0 -0
- data/test/regression/xlsx_files/autofilter10.xlsx +0 -0
- data/test/regression/xlsx_files/background01.xlsx +0 -0
- data/test/regression/xlsx_files/background02.xlsx +0 -0
- data/test/regression/xlsx_files/background03.xlsx +0 -0
- data/test/regression/xlsx_files/background04.xlsx +0 -0
- data/test/regression/xlsx_files/background05.xlsx +0 -0
- data/test/regression/xlsx_files/background06.xlsx +0 -0
- data/test/regression/xlsx_files/background07.xlsx +0 -0
- data/test/regression/xlsx_files/button01.xlsx +0 -0
- data/test/regression/xlsx_files/button02.xlsx +0 -0
- data/test/regression/xlsx_files/button03.xlsx +0 -0
- data/test/regression/xlsx_files/button04.xlsx +0 -0
- data/test/regression/xlsx_files/button05.xlsx +0 -0
- data/test/regression/xlsx_files/button07.xlsm +0 -0
- data/test/regression/xlsx_files/button08.xlsx +0 -0
- data/test/regression/xlsx_files/button09.xlsx +0 -0
- data/test/regression/xlsx_files/button10.xlsx +0 -0
- data/test/regression/xlsx_files/button11.xlsx +0 -0
- data/test/regression/xlsx_files/button12.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_axis22.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis23.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis24.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis25.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis26.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis27.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis28.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis29.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis30.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis31.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis32.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis33.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis34.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis35.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis36.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis37.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis38.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis39.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis40.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis41.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis42.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis43.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis44.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis45.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis46.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis47.xlsx +0 -0
- data/test/regression/xlsx_files/chart_axis48.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_chartarea01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_chartarea03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_chartarea04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_chartarea05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_chartarea06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_clustered01.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_column07.xlsx +0 -0
- data/test/regression/xlsx_files/chart_column08.xlsx +0 -0
- data/test/regression/xlsx_files/chart_column09.xlsx +0 -0
- data/test/regression/xlsx_files/chart_column10.xlsx +0 -0
- data/test/regression/xlsx_files/chart_column11.xlsx +0 -0
- data/test/regression/xlsx_files/chart_column12.xlsx +0 -0
- data/test/regression/xlsx_files/chart_combined01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_combined02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_combined03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_combined04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_combined05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_combined06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_combined07.xlsx +0 -0
- data/test/regression/xlsx_files/chart_combined08.xlsx +0 -0
- data/test/regression/xlsx_files/chart_combined09.xlsx +0 -0
- data/test/regression/xlsx_files/chart_combined10.xlsx +0 -0
- data/test/regression/xlsx_files/chart_combined11.xlsx +0 -0
- data/test/regression/xlsx_files/chart_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_crossing05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_crossing06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels07.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels08.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels09.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels10.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels11.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels12.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels13.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels14.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels15.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels16.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels17.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels18.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels19.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels20.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels21.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels22.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels23.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels24.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels25.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels26.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels27.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels28.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels29.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels30.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels31.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels32.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels33.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels34.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels35.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels36.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels37.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels38.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels39.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels40.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels41.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels42.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels43.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels44.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels45.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels46.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels47.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels48.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels49.xlsx +0 -0
- data/test/regression/xlsx_files/chart_data_labels50.xlsx +0 -0
- data/test/regression/xlsx_files/chart_date01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_date02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_date03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_date04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_date05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_display_units01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_display_units02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_display_units03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_display_units04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_display_units05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_display_units06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_display_units07.xlsx +0 -0
- data/test/regression/xlsx_files/chart_display_units08.xlsx +0 -0
- data/test/regression/xlsx_files/chart_display_units09.xlsx +0 -0
- data/test/regression/xlsx_files/chart_display_units10.xlsx +0 -0
- data/test/regression/xlsx_files/chart_display_units11.xlsx +0 -0
- data/test/regression/xlsx_files/chart_display_units12.xlsx +0 -0
- data/test/regression/xlsx_files/chart_doughnut01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_doughnut02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_doughnut03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_doughnut04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_doughnut05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_doughnut06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_doughnut07.xlsx +0 -0
- data/test/regression/xlsx_files/chart_drop_lines01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_drop_lines02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_drop_lines03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_drop_lines04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_errorbars01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_errorbars02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_errorbars03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_errorbars04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_errorbars05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_errorbars06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_errorbars07.xlsx +0 -0
- data/test/regression/xlsx_files/chart_errorbars08.xlsx +0 -0
- data/test/regression/xlsx_files/chart_errorbars09.xlsx +0 -0
- data/test/regression/xlsx_files/chart_errorbars10.xlsx +0 -0
- data/test/regression/xlsx_files/chart_font01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_font02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_font03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_font04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_font05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_font06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_font07.xlsx +0 -0
- data/test/regression/xlsx_files/chart_font08.xlsx +0 -0
- data/test/regression/xlsx_files/chart_font09.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_format19.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format20.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format21.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format22.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format23.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format24.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format25.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format26.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format27.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format28.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format29.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format30.xlsx +0 -0
- data/test/regression/xlsx_files/chart_format31.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gap01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gap02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gap03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gap04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gap05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gradient01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gradient02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gradient03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gradient04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gradient05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gradient06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gradient07.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gradient08.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gradient09.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gradient10.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gradient11.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gradient12.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gradient13.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gridlines01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gridlines02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gridlines03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gridlines04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gridlines05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gridlines06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gridlines07.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gridlines08.xlsx +0 -0
- data/test/regression/xlsx_files/chart_gridlines09.xlsx +0 -0
- data/test/regression/xlsx_files/chart_layout01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_layout02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_layout03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_layout04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_layout05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_layout06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_layout07.xlsx +0 -0
- data/test/regression/xlsx_files/chart_layout08.xlsx +0 -0
- data/test/regression/xlsx_files/chart_legend01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_legend03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_legend04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_legend05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_legend06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_legend07.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_line03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_line04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_line05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_line06.xlsx +0 -0
- data/test/regression/xlsx_files/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_order01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_order03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_pattern01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_pattern02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_pattern03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_pattern04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_pattern05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_pattern06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_pattern07.xlsx +0 -0
- data/test/regression/xlsx_files/chart_pattern08.xlsx +0 -0
- data/test/regression/xlsx_files/chart_pattern09.xlsx +0 -0
- data/test/regression/xlsx_files/chart_pattern10.xlsx +0 -0
- data/test/regression/xlsx_files/chart_pie01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_pie02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_pie03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_pie04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_pie05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_points01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_points02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_points03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_points04.xlsx +0 -0
- data/test/regression/xlsx_files/chart_points05.xlsx +0 -0
- data/test/regression/xlsx_files/chart_points06.xlsx +0 -0
- data/test/regression/xlsx_files/chart_radar01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_radar02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_radar03.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_scatter08.xlsx +0 -0
- data/test/regression/xlsx_files/chart_scatter09.xlsx +0 -0
- data/test/regression/xlsx_files/chart_scatter10.xlsx +0 -0
- data/test/regression/xlsx_files/chart_scatter11.xlsx +0 -0
- data/test/regression/xlsx_files/chart_scatter12.xlsx +0 -0
- data/test/regression/xlsx_files/chart_scatter14.xlsx +0 -0
- data/test/regression/xlsx_files/chart_scatter15.xlsx +0 -0
- data/test/regression/xlsx_files/chart_size01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_size04.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/chart_table01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_table02.xlsx +0 -0
- data/test/regression/xlsx_files/chart_table03.xlsx +0 -0
- data/test/regression/xlsx_files/chart_title01.xlsx +0 -0
- data/test/regression/xlsx_files/chart_title02.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/comment11.xlsx +0 -0
- data/test/regression/xlsx_files/comment12.xlsx +0 -0
- data/test/regression/xlsx_files/comment13.xlsx +0 -0
- data/test/regression/xlsx_files/comment14.xlsx +0 -0
- data/test/regression/xlsx_files/comment15.xlsx +0 -0
- data/test/regression/xlsx_files/comment16.xlsx +0 -0
- data/test/regression/xlsx_files/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/cond_format14.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format15.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format16.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format17.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format18.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format19.xlsx +0 -0
- data/test/regression/xlsx_files/cond_format20.xlsx +0 -0
- data/test/regression/xlsx_files/custom_colors01.xlsx +0 -0
- data/test/regression/xlsx_files/data_validation01.xlsx +0 -0
- data/test/regression/xlsx_files/data_validation02.xlsx +0 -0
- data/test/regression/xlsx_files/data_validation03.xlsx +0 -0
- data/test/regression/xlsx_files/data_validation08.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/date_examples01.xlsx +0 -0
- data/test/regression/xlsx_files/default_format01.xlsx +0 -0
- data/test/regression/xlsx_files/default_row01.xlsx +0 -0
- data/test/regression/xlsx_files/default_row02.xlsx +0 -0
- data/test/regression/xlsx_files/default_row03.xlsx +0 -0
- data/test/regression/xlsx_files/default_row04.xlsx +0 -0
- data/test/regression/xlsx_files/default_row05.xlsx +0 -0
- data/test/regression/xlsx_files/defined_name01.xlsx +0 -0
- data/test/regression/xlsx_files/defined_name02.xlsx +0 -0
- data/test/regression/xlsx_files/defined_name03.xlsx +0 -0
- data/test/regression/xlsx_files/defined_name04.xlsx +0 -0
- data/test/regression/xlsx_files/dynamic_array01.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/escapes04.xlsx +0 -0
- data/test/regression/xlsx_files/escapes05.xlsx +0 -0
- data/test/regression/xlsx_files/escapes06.xlsx +0 -0
- data/test/regression/xlsx_files/escapes07.xlsx +0 -0
- data/test/regression/xlsx_files/escapes08.xlsx +0 -0
- data/test/regression/xlsx_files/excel2003_style01.xlsx +0 -0
- data/test/regression/xlsx_files/excel2003_style02.xlsx +0 -0
- data/test/regression/xlsx_files/excel2003_style03.xlsx +0 -0
- data/test/regression/xlsx_files/excel2003_style04.xlsx +0 -0
- data/test/regression/xlsx_files/excel2003_style05.xlsx +0 -0
- data/test/regression/xlsx_files/excel2003_style06.xlsx +0 -0
- data/test/regression/xlsx_files/excel2003_style07.xlsx +0 -0
- data/test/regression/xlsx_files/excel2003_style08.xlsx +0 -0
- data/test/regression/xlsx_files/filehandle01.xlsx +0 -0
- data/test/regression/xlsx_files/firstsheet01.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/format05.xlsx +0 -0
- data/test/regression/xlsx_files/format11.xlsx +0 -0
- data/test/regression/xlsx_files/format12.xlsx +0 -0
- data/test/regression/xlsx_files/format13.xlsx +0 -0
- data/test/regression/xlsx_files/format14.xlsx +0 -0
- data/test/regression/xlsx_files/format15.xlsx +0 -0
- data/test/regression/xlsx_files/format16.xlsx +0 -0
- data/test/regression/xlsx_files/format17.xlsx +0 -0
- data/test/regression/xlsx_files/formula_results01.xlsx +0 -0
- data/test/regression/xlsx_files/gridlines01.xlsx +0 -0
- data/test/regression/xlsx_files/header01.xlsx +0 -0
- data/test/regression/xlsx_files/header02.xlsx +0 -0
- data/test/regression/xlsx_files/header03.xlsx +0 -0
- data/test/regression/xlsx_files/header04.xlsx +0 -0
- data/test/regression/xlsx_files/header_image01.xlsx +0 -0
- data/test/regression/xlsx_files/header_image02.xlsx +0 -0
- data/test/regression/xlsx_files/header_image03.xlsx +0 -0
- data/test/regression/xlsx_files/header_image04.xlsx +0 -0
- data/test/regression/xlsx_files/header_image05.xlsx +0 -0
- data/test/regression/xlsx_files/header_image06.xlsx +0 -0
- data/test/regression/xlsx_files/header_image07.xlsx +0 -0
- data/test/regression/xlsx_files/header_image08.xlsx +0 -0
- data/test/regression/xlsx_files/header_image09.xlsx +0 -0
- data/test/regression/xlsx_files/header_image10.xlsx +0 -0
- data/test/regression/xlsx_files/header_image11.xlsx +0 -0
- data/test/regression/xlsx_files/header_image12.xlsx +0 -0
- data/test/regression/xlsx_files/header_image13.xlsx +0 -0
- data/test/regression/xlsx_files/header_image14.xlsx +0 -0
- data/test/regression/xlsx_files/header_image15.xlsx +0 -0
- data/test/regression/xlsx_files/header_image16.xlsx +0 -0
- data/test/regression/xlsx_files/header_image17.xlsx +0 -0
- data/test/regression/xlsx_files/header_image18.xlsx +0 -0
- data/test/regression/xlsx_files/header_image19.xlsx +0 -0
- data/test/regression/xlsx_files/hide01.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/hyperlink20.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink21.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink22.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink23.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink24.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink25.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink26.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink27.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink28.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink29.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink30.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink31.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink32.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink33.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink34.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink35.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink36.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink37.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink38.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink39.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink40.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink41.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink42.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink43.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink44.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink45.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink46.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink47.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink48.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink49.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink50.xlsx +0 -0
- data/test/regression/xlsx_files/hyperlink51.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error01.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error02.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error03.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error04.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error05.xlsx +0 -0
- data/test/regression/xlsx_files/ignore_error06.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/image08.xlsx +0 -0
- data/test/regression/xlsx_files/image09.xlsx +0 -0
- data/test/regression/xlsx_files/image10.xlsx +0 -0
- data/test/regression/xlsx_files/image11.xlsx +0 -0
- data/test/regression/xlsx_files/image12.xlsx +0 -0
- data/test/regression/xlsx_files/image13.xlsx +0 -0
- data/test/regression/xlsx_files/image14.xlsx +0 -0
- data/test/regression/xlsx_files/image15.xlsx +0 -0
- data/test/regression/xlsx_files/image16.xlsx +0 -0
- data/test/regression/xlsx_files/image17.xlsx +0 -0
- data/test/regression/xlsx_files/image18.xlsx +0 -0
- data/test/regression/xlsx_files/image19.xlsx +0 -0
- data/test/regression/xlsx_files/image22.xlsx +0 -0
- data/test/regression/xlsx_files/image23.xlsx +0 -0
- data/test/regression/xlsx_files/image24.xlsx +0 -0
- data/test/regression/xlsx_files/image25.xlsx +0 -0
- data/test/regression/xlsx_files/image26.xlsx +0 -0
- data/test/regression/xlsx_files/image27.xlsx +0 -0
- data/test/regression/xlsx_files/image28.xlsx +0 -0
- data/test/regression/xlsx_files/image29.xlsx +0 -0
- data/test/regression/xlsx_files/image30.xlsx +0 -0
- data/test/regression/xlsx_files/image31.xlsx +0 -0
- data/test/regression/xlsx_files/image32.xlsx +0 -0
- data/test/regression/xlsx_files/image33.xlsx +0 -0
- data/test/regression/xlsx_files/image35.xlsx +0 -0
- data/test/regression/xlsx_files/image36.xlsx +0 -0
- data/test/regression/xlsx_files/image44.xlsx +0 -0
- data/test/regression/xlsx_files/image45.xlsx +0 -0
- data/test/regression/xlsx_files/image46.xlsx +0 -0
- data/test/regression/xlsx_files/image47.xlsx +0 -0
- data/test/regression/xlsx_files/image48.xlsx +0 -0
- data/test/regression/xlsx_files/image49.xlsx +0 -0
- data/test/regression/xlsx_files/image50.xlsx +0 -0
- data/test/regression/xlsx_files/image51.xlsx +0 -0
- data/test/regression/xlsx_files/image52.xlsx +0 -0
- data/test/regression/xlsx_files/image53.xlsx +0 -0
- data/test/regression/xlsx_files/image54.xlsx +0 -0
- data/test/regression/xlsx_files/image55.xlsx +0 -0
- data/test/regression/xlsx_files/image56.xlsx +0 -0
- data/test/regression/xlsx_files/image57.xlsx +0 -0
- data/test/regression/xlsx_files/landscape01.xlsx +0 -0
- data/test/regression/xlsx_files/macro01.xlsm +0 -0
- data/test/regression/xlsx_files/merge_cells01.xlsx +0 -0
- data/test/regression/xlsx_files/merge_range01.xlsx +0 -0
- data/test/regression/xlsx_files/merge_range02.xlsx +0 -0
- data/test/regression/xlsx_files/merge_range03.xlsx +0 -0
- data/test/regression/xlsx_files/merge_range04.xlsx +0 -0
- data/test/regression/xlsx_files/merge_range05.xlsx +0 -0
- data/test/regression/xlsx_files/object_position01.xlsx +0 -0
- data/test/regression/xlsx_files/object_position02.xlsx +0 -0
- data/test/regression/xlsx_files/object_position03.xlsx +0 -0
- data/test/regression/xlsx_files/object_position04.xlsx +0 -0
- data/test/regression/xlsx_files/object_position06.xlsx +0 -0
- data/test/regression/xlsx_files/object_position07.xlsx +0 -0
- data/test/regression/xlsx_files/object_position08.xlsx +0 -0
- data/test/regression/xlsx_files/object_position09.xlsx +0 -0
- data/test/regression/xlsx_files/object_position10.xlsx +0 -0
- data/test/regression/xlsx_files/object_position12.xlsx +0 -0
- data/test/regression/xlsx_files/object_position13.xlsx +0 -0
- data/test/regression/xlsx_files/object_position14.xlsx +0 -0
- data/test/regression/xlsx_files/object_position15.xlsx +0 -0
- data/test/regression/xlsx_files/object_position16.xlsx +0 -0
- data/test/regression/xlsx_files/object_position17.xlsx +0 -0
- data/test/regression/xlsx_files/object_position18.xlsx +0 -0
- data/test/regression/xlsx_files/object_position19.xlsx +0 -0
- data/test/regression/xlsx_files/object_position20.xlsx +0 -0
- data/test/regression/xlsx_files/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_options07.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/properties02.xlsx +0 -0
- data/test/regression/xlsx_files/properties03.xlsx +0 -0
- data/test/regression/xlsx_files/properties04.xlsx +0 -0
- data/test/regression/xlsx_files/properties05.xlsx +0 -0
- data/test/regression/xlsx_files/protect01.xlsx +0 -0
- data/test/regression/xlsx_files/protect02.xlsx +0 -0
- data/test/regression/xlsx_files/protect03.xlsx +0 -0
- data/test/regression/xlsx_files/protect04.xlsx +0 -0
- data/test/regression/xlsx_files/protect05.xlsx +0 -0
- data/test/regression/xlsx_files/protect06.xlsx +0 -0
- data/test/regression/xlsx_files/protect07.xlsx +0 -0
- data/test/regression/xlsx_files/quote_name01.xlsx +0 -0
- data/test/regression/xlsx_files/quote_name02.xlsx +0 -0
- data/test/regression/xlsx_files/quote_name03.xlsx +0 -0
- data/test/regression/xlsx_files/quote_name04.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/rich_string12.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/selection01.xlsx +0 -0
- data/test/regression/xlsx_files/selection02.xlsx +0 -0
- data/test/regression/xlsx_files/set_column01.xlsx +0 -0
- data/test/regression/xlsx_files/set_column03.xlsx +0 -0
- data/test/regression/xlsx_files/set_column04.xlsx +0 -0
- data/test/regression/xlsx_files/set_column05.xlsx +0 -0
- data/test/regression/xlsx_files/set_column06.xlsx +0 -0
- data/test/regression/xlsx_files/set_column07.xlsx +0 -0
- data/test/regression/xlsx_files/set_column08.xlsx +0 -0
- data/test/regression/xlsx_files/set_column09.xlsx +0 -0
- data/test/regression/xlsx_files/set_print_scale01.xlsx +0 -0
- data/test/regression/xlsx_files/set_row01.xlsx +0 -0
- data/test/regression/xlsx_files/set_row03.xlsx +0 -0
- data/test/regression/xlsx_files/set_start_page01.xlsx +0 -0
- data/test/regression/xlsx_files/set_start_page02.xlsx +0 -0
- data/test/regression/xlsx_files/set_start_page03.xlsx +0 -0
- data/test/regression/xlsx_files/shape01.xlsx +0 -0
- data/test/regression/xlsx_files/shape02.xlsx +0 -0
- data/test/regression/xlsx_files/shape03.xlsx +0 -0
- data/test/regression/xlsx_files/shape04.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/shared_strings_encoding.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/simple03.xlsx +0 -0
- data/test/regression/xlsx_files/simple04.xlsx +0 -0
- data/test/regression/xlsx_files/simple05.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/regression/xlsx_files/table15.xlsx +0 -0
- data/test/regression/xlsx_files/table17.xlsx +0 -0
- data/test/regression/xlsx_files/table18.xlsx +0 -0
- data/test/regression/xlsx_files/table19.xlsx +0 -0
- data/test/regression/xlsx_files/table21.xlsx +0 -0
- data/test/regression/xlsx_files/table22.xlsx +0 -0
- data/test/regression/xlsx_files/table23.xlsx +0 -0
- data/test/regression/xlsx_files/table24.xlsx +0 -0
- data/test/regression/xlsx_files/table25.xlsx +0 -0
- data/test/regression/xlsx_files/table26.xlsx +0 -0
- data/test/regression/xlsx_files/tutorial01.xlsx +0 -0
- data/test/regression/xlsx_files/tutorial02.xlsx +0 -0
- data/test/regression/xlsx_files/tutorial03.xlsx +0 -0
- data/test/regression/xlsx_files/types02.xlsx +0 -0
- data/test/regression/xlsx_files/types08.xlsx +0 -0
- data/test/regression/xlsx_files/update_range_format_with_params.xlsx +0 -0
- data/test/regression/xlsx_files/urls_as_strings.xlsx +0 -0
- data/test/regression/xlsx_files/utf8_01.xlsx +0 -0
- data/test/regression/xlsx_files/utf8_03.xlsx +0 -0
- data/test/regression/xlsx_files/utf8_04.xlsx +0 -0
- data/test/regression/xlsx_files/utf8_05.xlsx +0 -0
- data/test/regression/xlsx_files/utf8_06.xlsx +0 -0
- data/test/regression/xlsx_files/utf8_07.xlsx +0 -0
- data/test/regression/xlsx_files/utf8_08.xlsx +0 -0
- data/test/regression/xlsx_files/utf8_09.xlsx +0 -0
- data/test/regression/xlsx_files/utf8_10.xlsx +0 -0
- data/test/regression/xlsx_files/utf8_11.xlsx +0 -0
- data/test/regression/xlsx_files/vbaProject01.bin +0 -0
- data/test/regression/xlsx_files/vbaProject02.bin +0 -0
- data/test/regression/xlsx_files/vml01.xlsx +0 -0
- data/test/regression/xlsx_files/vml02.xlsx +0 -0
- data/test/regression/xlsx_files/vml03.xlsx +0 -0
- data/test/regression/xlsx_files/vml04.xlsx +0 -0
- data/test/republic.png +0 -0
- data/test/run_test.rb +0 -9
- data/test/test_delete_files.rb +0 -37
- data/test/test_example_match.rb +0 -6348
- data/test/test_option_hash_for_workbook.rb +0 -72
- data/test/test_xml_writer_simple.rb +0 -64
- data/test/utility/test_range.rb +0 -20
- data/test/vbaProject.bin +0 -0
- data/test/workbook/test_check_sheetname.rb +0 -51
- data/test/workbook/test_define_name.rb +0 -16
- data/test/workbook/test_get_chart_range.rb +0 -57
- data/test/workbook/test_sort_defined_names.rb +0 -77
- data/test/workbook/test_workbook_01.rb +0 -29
- data/test/workbook/test_workbook_02.rb +0 -31
- data/test/workbook/test_workbook_03.rb +0 -31
- data/test/workbook/test_worksheet_by_name.rb +0 -35
- data/test/workbook/test_write_calc_pr.rb +0 -41
- data/test/workbook/test_write_defined_name.rb +0 -17
- data/test/workbook/test_write_defined_names.rb +0 -41
- data/test/workbook/test_write_workbook_view.rb +0 -117
- data/test/worksheet/test_calculate_spans.rb +0 -58
- data/test/worksheet/test_cond_format_01.rb +0 -82
- data/test/worksheet/test_cond_format_02.rb +0 -87
- data/test/worksheet/test_cond_format_03.rb +0 -97
- data/test/worksheet/test_cond_format_04.rb +0 -85
- data/test/worksheet/test_cond_format_05.rb +0 -96
- data/test/worksheet/test_cond_format_06.rb +0 -106
- data/test/worksheet/test_cond_format_07.rb +0 -116
- data/test/worksheet/test_cond_format_08.rb +0 -115
- data/test/worksheet/test_cond_format_09.rb +0 -108
- data/test/worksheet/test_cond_format_10.rb +0 -83
- data/test/worksheet/test_cond_format_11.rb +0 -85
- data/test/worksheet/test_cond_format_12.rb +0 -133
- data/test/worksheet/test_cond_format_13.rb +0 -135
- data/test/worksheet/test_cond_format_14.rb +0 -132
- data/test/worksheet/test_cond_format_15.rb +0 -93
- data/test/worksheet/test_cond_format_16.rb +0 -138
- data/test/worksheet/test_cond_format_17.rb +0 -141
- data/test/worksheet/test_cond_format_18.rb +0 -135
- data/test/worksheet/test_cond_format_19.rb +0 -139
- data/test/worksheet/test_cond_format_20.rb +0 -119
- data/test/worksheet/test_cond_format_21.rb +0 -90
- data/test/worksheet/test_cond_format_22.rb +0 -266
- data/test/worksheet/test_cond_format_23.rb +0 -242
- data/test/worksheet/test_cond_format_24.rb +0 -303
- data/test/worksheet/test_convert_date_time_01.rb +0 -439
- data/test/worksheet/test_convert_date_time_02.rb +0 -472
- data/test/worksheet/test_convert_date_time_03.rb +0 -435
- data/test/worksheet/test_convert_date_time_04.rb +0 -19
- data/test/worksheet/test_data_bar_01.rb +0 -53
- data/test/worksheet/test_data_bar_02.rb +0 -79
- data/test/worksheet/test_data_bar_03.rb +0 -147
- data/test/worksheet/test_data_bar_04.rb +0 -145
- data/test/worksheet/test_data_bar_05.rb +0 -147
- data/test/worksheet/test_data_bar_06.rb +0 -145
- data/test/worksheet/test_data_bar_07.rb +0 -146
- data/test/worksheet/test_data_bar_08.rb +0 -54
- data/test/worksheet/test_data_bar_09.rb +0 -80
- data/test/worksheet/test_data_bar_10.rb +0 -165
- data/test/worksheet/test_data_bar_11.rb +0 -167
- data/test/worksheet/test_data_bar_12.rb +0 -104
- data/test/worksheet/test_extract_filter_tokens.rb +0 -109
- data/test/worksheet/test_parse_filter_expression.rb +0 -143
- data/test/worksheet/test_pixels_to_row_col.rb +0 -46
- data/test/worksheet/test_position_object.rb +0 -50
- data/test/worksheet/test_repeat_formula.rb +0 -55
- data/test/worksheet/test_sparkline_01.rb +0 -65
- data/test/worksheet/test_sparkline_02.rb +0 -92
- data/test/worksheet/test_sparkline_03.rb +0 -133
- data/test/worksheet/test_sparkline_04.rb +0 -93
- data/test/worksheet/test_sparkline_05.rb +0 -93
- data/test/worksheet/test_sparkline_06.rb +0 -114
- data/test/worksheet/test_sparkline_07.rb +0 -357
- data/test/worksheet/test_sparkline_08.rb +0 -177
- data/test/worksheet/test_sparkline_09.rb +0 -1250
- data/test/worksheet/test_sparkline_10.rb +0 -107
- data/test/worksheet/test_sparkline_11.rb +0 -218
- data/test/worksheet/test_sparkline_12.rb +0 -94
- data/test/worksheet/test_update_format_methods.rb +0 -91
- data/test/worksheet/test_worksheet_01.rb +0 -32
- data/test/worksheet/test_worksheet_02.rb +0 -38
- data/test/worksheet/test_worksheet_03.rb +0 -44
- data/test/worksheet/test_worksheet_04.rb +0 -45
- data/test/worksheet/test_write_array_formula_01.rb +0 -98
- data/test/worksheet/test_write_autofilter.rb +0 -260
- data/test/worksheet/test_write_brk.rb +0 -18
- data/test/worksheet/test_write_cell.rb +0 -54
- data/test/worksheet/test_write_cell_value.rb +0 -33
- data/test/worksheet/test_write_col_breaks.rb +0 -27
- data/test/worksheet/test_write_col_info.rb +0 -95
- data/test/worksheet/test_write_conditional_formatting.rb +0 -72
- data/test/worksheet/test_write_custom_filter.rb +0 -18
- data/test/worksheet/test_write_custom_filters.rb +0 -25
- data/test/worksheet/test_write_data_validation_01.rb +0 -113
- data/test/worksheet/test_write_data_validation_02.rb +0 -585
- data/test/worksheet/test_write_dimension.rb +0 -94
- data/test/worksheet/test_write_filter.rb +0 -18
- data/test/worksheet/test_write_filter_column.rb +0 -18
- data/test/worksheet/test_write_filters.rb +0 -32
- data/test/worksheet/test_write_formula_does_not_change_formula_string.rb +0 -18
- data/test/worksheet/test_write_header_footer.rb +0 -58
- data/test/worksheet/test_write_hyperlink.rb +0 -32
- data/test/worksheet/test_write_legacy_drawing.rb +0 -19
- data/test/worksheet/test_write_merge_cell.rb +0 -18
- data/test/worksheet/test_write_merge_cells.rb +0 -192
- data/test/worksheet/test_write_methods.rb +0 -248
- data/test/worksheet/test_write_page_margins.rb +0 -98
- data/test/worksheet/test_write_page_set_up_pr.rb +0 -19
- data/test/worksheet/test_write_page_setup.rb +0 -54
- data/test/worksheet/test_write_pane.rb +0 -123
- data/test/worksheet/test_write_phonetic_pr.rb +0 -19
- data/test/worksheet/test_write_print_options.rb +0 -77
- data/test/worksheet/test_write_row_breaks.rb +0 -27
- data/test/worksheet/test_write_row_element.rb +0 -69
- data/test/worksheet/test_write_selection.rb +0 -18
- data/test/worksheet/test_write_sheet_calc_pr.rb +0 -18
- data/test/worksheet/test_write_sheet_data.rb +0 -18
- data/test/worksheet/test_write_sheet_format_pr.rb +0 -18
- data/test/worksheet/test_write_sheet_pr.rb +0 -36
- data/test/worksheet/test_write_sheet_protection.rb +0 -174
- data/test/worksheet/test_write_sheet_view.rb +0 -71
- data/test/worksheet/test_write_sheet_view1.rb +0 -64
- data/test/worksheet/test_write_sheet_view2.rb +0 -56
- data/test/worksheet/test_write_sheet_view3.rb +0 -83
- data/test/worksheet/test_write_sheet_view4.rb +0 -83
- data/test/worksheet/test_write_sheet_view5.rb +0 -74
- data/test/worksheet/test_write_sheet_view6.rb +0 -51
- data/test/worksheet/test_write_sheet_view7.rb +0 -71
- data/test/worksheet/test_write_sheet_view8.rb +0 -51
- data/test/worksheet/test_write_sheet_view9.rb +0 -51
- data/test/worksheet/test_write_tab_color.rb +0 -23
- data/test/worksheet/test_write_worksheet_attributes.rb +0 -21
data/lib/write_xlsx/worksheet.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
# frozen_string_literal: true
|
3
|
+
|
3
4
|
require 'write_xlsx/package/xml_writer_simple'
|
4
5
|
require 'write_xlsx/package/button'
|
5
6
|
require 'write_xlsx/colors'
|
@@ -36,14 +37,14 @@ module Writexlsx
|
|
36
37
|
attr_reader :vba_codename # :nodoc:
|
37
38
|
attr_writer :excel_version
|
38
39
|
|
39
|
-
def initialize(workbook, index, name)
|
40
|
+
def initialize(workbook, index, name) # :nodoc:
|
40
41
|
@writer = Package::XMLWriterSimple.new
|
41
42
|
|
42
43
|
@workbook = workbook
|
43
44
|
@index = index
|
44
45
|
@name = name
|
45
46
|
@colinfo = {}
|
46
|
-
@cell_data_table =
|
47
|
+
@cell_data_table = []
|
47
48
|
@excel_version = 2007
|
48
49
|
@palette = workbook.palette
|
49
50
|
@default_url_format = workbook.default_url_format
|
@@ -60,6 +61,7 @@ module Writexlsx
|
|
60
61
|
@selections = []
|
61
62
|
@panes = []
|
62
63
|
@hide_row_col_headers = 0
|
64
|
+
@top_left_cell = ''
|
63
65
|
|
64
66
|
@tab_color = 0
|
65
67
|
|
@@ -102,6 +104,9 @@ module Writexlsx
|
|
102
104
|
@vml_drawing_rels = {}
|
103
105
|
@vml_drawing_rels_id = 0
|
104
106
|
@has_dynamic_arrays = false
|
107
|
+
|
108
|
+
@use_future_functions = false
|
109
|
+
|
105
110
|
@header_images = []
|
106
111
|
@footer_images = []
|
107
112
|
@background_image = ''
|
@@ -138,19 +143,19 @@ module Writexlsx
|
|
138
143
|
@original_row_height = 12.75
|
139
144
|
@default_row_height = 12.75
|
140
145
|
@default_row_pixels = 17
|
141
|
-
self
|
142
|
-
self
|
146
|
+
self.margins_left_right = 0.75
|
147
|
+
self.margins_top_bottom = 1
|
143
148
|
@page_setup.margin_header = 0.5
|
144
149
|
@page_setup.margin_footer = 0.5
|
145
150
|
@page_setup.header_footer_aligns = false
|
146
151
|
end
|
147
152
|
end
|
148
153
|
|
149
|
-
def set_xml_writer(filename)
|
154
|
+
def set_xml_writer(filename) # :nodoc:
|
150
155
|
@writer.set_xml_writer(filename)
|
151
156
|
end
|
152
157
|
|
153
|
-
def assemble_xml_file
|
158
|
+
def assemble_xml_file # :nodoc:
|
154
159
|
write_xml_declaration do
|
155
160
|
@writer.tag_elements('worksheet', write_worksheet_attributes) do
|
156
161
|
write_sheet_pr
|
@@ -188,9 +193,7 @@ module Writexlsx
|
|
188
193
|
#
|
189
194
|
# The name method is used to retrieve the name of a worksheet.
|
190
195
|
#
|
191
|
-
|
192
|
-
@name
|
193
|
-
end
|
196
|
+
attr_reader :name
|
194
197
|
|
195
198
|
#
|
196
199
|
# Set this worksheet as a selected worksheet, i.e. the worksheet has its tab
|
@@ -244,8 +247,10 @@ module Writexlsx
|
|
244
247
|
@protect = protect_default_settings.merge(options)
|
245
248
|
|
246
249
|
# Set the password after the user defined values.
|
247
|
-
|
248
|
-
|
250
|
+
if password && password != ''
|
251
|
+
@protect[:password] =
|
252
|
+
encode_password(password)
|
253
|
+
end
|
249
254
|
end
|
250
255
|
|
251
256
|
#
|
@@ -255,8 +260,8 @@ module Writexlsx
|
|
255
260
|
if range.nil?
|
256
261
|
raise "The range must be defined in unprotect_range())\n"
|
257
262
|
else
|
258
|
-
range.gsub
|
259
|
-
range.sub
|
263
|
+
range = range.gsub(/\$/, "")
|
264
|
+
range = range.sub(/^=/, "")
|
260
265
|
@num_protected_ranges += 1
|
261
266
|
end
|
262
267
|
|
@@ -300,7 +305,7 @@ module Writexlsx
|
|
300
305
|
def set_column(*args)
|
301
306
|
# Check for a cell reference in A1 notation and substitute row and column
|
302
307
|
if args[0].to_s =~ /^\D/
|
303
|
-
|
308
|
+
_row1, firstcol, _row2, lastcol, *data = substitute_cellref(*args)
|
304
309
|
else
|
305
310
|
firstcol, lastcol, *data = args
|
306
311
|
end
|
@@ -342,9 +347,9 @@ module Writexlsx
|
|
342
347
|
|
343
348
|
# Store the col sizes for use when calculating image vertices taking
|
344
349
|
# hidden columns into account. Also store the column formats.
|
345
|
-
width
|
350
|
+
width ||= @default_col_width
|
346
351
|
|
347
|
-
(firstcol
|
352
|
+
(firstcol..lastcol).each do |col|
|
348
353
|
@col_sizes[col] = [width, hidden]
|
349
354
|
@col_formats[col] = format if format
|
350
355
|
end
|
@@ -376,9 +381,7 @@ module Writexlsx
|
|
376
381
|
hidden = data[4] || 0
|
377
382
|
level = data[5]
|
378
383
|
|
379
|
-
if ptrue?(pixels)
|
380
|
-
width = pixels_to_width(pixels)
|
381
|
-
end
|
384
|
+
width = pixels_to_width(pixels) if ptrue?(pixels)
|
382
385
|
|
383
386
|
set_column(first_col, last_col, width, format, hidden, level)
|
384
387
|
end
|
@@ -408,7 +411,19 @@ module Writexlsx
|
|
408
411
|
# Selection isn't set for cell A1.
|
409
412
|
return if sqref == 'A1'
|
410
413
|
|
411
|
-
@selections = [
|
414
|
+
@selections = [[nil, active_cell, sqref]]
|
415
|
+
end
|
416
|
+
|
417
|
+
###############################################################################
|
418
|
+
#
|
419
|
+
# set_top_left_cell()
|
420
|
+
#
|
421
|
+
# Set the first visible cell at the top left of the worksheet.
|
422
|
+
#
|
423
|
+
def set_top_left_cell(*args)
|
424
|
+
row, col = row_col_notation(args)
|
425
|
+
|
426
|
+
@top_left_cell = xl_rowcol_to_cell(row, col)
|
412
427
|
end
|
413
428
|
|
414
429
|
#
|
@@ -431,7 +446,7 @@ module Writexlsx
|
|
431
446
|
left_col ||= col
|
432
447
|
type ||= 0
|
433
448
|
|
434
|
-
@panes = [row, col, top_row, left_col, type
|
449
|
+
@panes = [row, col, top_row, left_col, type]
|
435
450
|
end
|
436
451
|
|
437
452
|
#
|
@@ -492,7 +507,7 @@ module Writexlsx
|
|
492
507
|
|
493
508
|
def set_paper(paper_size)
|
494
509
|
put_deprecate_message("#{self}.set_paper")
|
495
|
-
self
|
510
|
+
self.paper = paper_size
|
496
511
|
end
|
497
512
|
|
498
513
|
#
|
@@ -500,26 +515,21 @@ module Writexlsx
|
|
500
515
|
#
|
501
516
|
def set_header(string = '', margin = 0.3, options = {})
|
502
517
|
raise 'Header string must be less than 255 characters' if string.length > 255
|
518
|
+
|
503
519
|
# Replace the Excel placeholder &[Picture] with the internal &G.
|
504
520
|
@page_setup.header = string.gsub(/&\[Picture\]/, '&G')
|
505
521
|
|
506
|
-
if options[:align_with_margins]
|
507
|
-
@page_setup.header_footer_aligns = options[:align_with_margins]
|
508
|
-
end
|
522
|
+
@page_setup.header_footer_aligns = options[:align_with_margins] if options[:align_with_margins]
|
509
523
|
|
510
|
-
if options[:scale_with_doc]
|
511
|
-
@page_setup.header_footer_scales = options[:scale_with_doc]
|
512
|
-
end
|
524
|
+
@page_setup.header_footer_scales = options[:scale_with_doc] if options[:scale_with_doc]
|
513
525
|
|
514
526
|
# Reset the array in case the function is called more than once.
|
515
527
|
@header_images = []
|
516
528
|
|
517
529
|
[
|
518
|
-
|
530
|
+
[:image_left, 'LH'], [:image_center, 'CH'], [:image_right, 'RH']
|
519
531
|
].each do |p|
|
520
|
-
if options[p.first]
|
521
|
-
@header_images << [options[p.first], p.last]
|
522
|
-
end
|
532
|
+
@header_images << [options[p.first], p.last] if options[p.first]
|
523
533
|
end
|
524
534
|
|
525
535
|
# placeholeder /&G/ の数
|
@@ -527,9 +537,7 @@ module Writexlsx
|
|
527
537
|
|
528
538
|
image_count = @header_images.count
|
529
539
|
|
530
|
-
if image_count != placeholder_count
|
531
|
-
raise "Number of header image (#{image_count}) doesn't match placeholder count (#{placeholder_count}) in string: #{@page_setup.header}"
|
532
|
-
end
|
540
|
+
raise "Number of header image (#{image_count}) doesn't match placeholder count (#{placeholder_count}) in string: #{@page_setup.header}" if image_count != placeholder_count
|
533
541
|
|
534
542
|
@has_header_vml = true if image_count > 0
|
535
543
|
|
@@ -543,28 +551,22 @@ module Writexlsx
|
|
543
551
|
def set_footer(string = '', margin = 0.3, options = {})
|
544
552
|
raise 'Footer string must be less than 255 characters' if string.length > 255
|
545
553
|
|
546
|
-
@page_setup.footer
|
554
|
+
@page_setup.footer = string.dup
|
547
555
|
|
548
556
|
# Replace the Excel placeholder &[Picture] with the internal &G.
|
549
557
|
@page_setup.footer = string.gsub(/&\[Picture\]/, '&G')
|
550
558
|
|
551
|
-
if options[:align_with_margins]
|
552
|
-
@page_setup.header_footer_aligns = options[:align_with_margins]
|
553
|
-
end
|
559
|
+
@page_setup.header_footer_aligns = options[:align_with_margins] if options[:align_with_margins]
|
554
560
|
|
555
|
-
if options[:scale_with_doc]
|
556
|
-
@page_setup.header_footer_scales = options[:scale_with_doc]
|
557
|
-
end
|
561
|
+
@page_setup.header_footer_scales = options[:scale_with_doc] if options[:scale_with_doc]
|
558
562
|
|
559
563
|
# Reset the array in case the function is called more than once.
|
560
564
|
@footer_images = []
|
561
565
|
|
562
566
|
[
|
563
|
-
|
567
|
+
[:image_left, 'LF'], [:image_center, 'CF'], [:image_right, 'RF']
|
564
568
|
].each do |p|
|
565
|
-
if options[p.first]
|
566
|
-
@footer_images << [options[p.first], p.last]
|
567
|
-
end
|
569
|
+
@footer_images << [options[p.first], p.last] if options[p.first]
|
568
570
|
end
|
569
571
|
|
570
572
|
# placeholeder /&G/ の数
|
@@ -572,9 +574,7 @@ module Writexlsx
|
|
572
574
|
|
573
575
|
image_count = @footer_images.count
|
574
576
|
|
575
|
-
if image_count != placeholder_count
|
576
|
-
raise "Number of footer image (#{image_count}) doesn't match placeholder count (#{placeholder_count}) in string: #{@page_setup.footer}"
|
577
|
-
end
|
577
|
+
raise "Number of footer image (#{image_count}) doesn't match placeholder count (#{placeholder_count}) in string: #{@page_setup.footer}" if image_count != placeholder_count
|
578
578
|
|
579
579
|
@has_header_vml = true if image_count > 0
|
580
580
|
|
@@ -600,10 +600,10 @@ module Writexlsx
|
|
600
600
|
# Set all the page margins to the same value in inches.
|
601
601
|
#
|
602
602
|
def margins=(margin)
|
603
|
-
self
|
604
|
-
self
|
605
|
-
self
|
606
|
-
self
|
603
|
+
self.margin_left = margin
|
604
|
+
self.margin_right = margin
|
605
|
+
self.margin_top = margin
|
606
|
+
self.margin_bottom = margin
|
607
607
|
end
|
608
608
|
|
609
609
|
#
|
@@ -611,8 +611,8 @@ module Writexlsx
|
|
611
611
|
# See set_margins
|
612
612
|
#
|
613
613
|
def margins_left_right=(margin)
|
614
|
-
self
|
615
|
-
self
|
614
|
+
self.margin_left = margin
|
615
|
+
self.margin_right = margin
|
616
616
|
end
|
617
617
|
|
618
618
|
#
|
@@ -620,8 +620,8 @@ module Writexlsx
|
|
620
620
|
# See set_margins
|
621
621
|
#
|
622
622
|
def margins_top_bottom=(margin)
|
623
|
-
self
|
624
|
-
self
|
623
|
+
self.margin_top = margin
|
624
|
+
self.margin_bottom = margin
|
625
625
|
end
|
626
626
|
|
627
627
|
#
|
@@ -661,7 +661,7 @@ module Writexlsx
|
|
661
661
|
#
|
662
662
|
def set_margins(margin)
|
663
663
|
put_deprecate_message("#{self}.set_margins")
|
664
|
-
self
|
664
|
+
self.margins = margin
|
665
665
|
end
|
666
666
|
|
667
667
|
#
|
@@ -670,7 +670,7 @@ module Writexlsx
|
|
670
670
|
#
|
671
671
|
def set_margins_LR(margin)
|
672
672
|
put_deprecate_message("#{self}.set_margins_LR")
|
673
|
-
self
|
673
|
+
self.margins_left_right = margin
|
674
674
|
end
|
675
675
|
|
676
676
|
#
|
@@ -679,7 +679,7 @@ module Writexlsx
|
|
679
679
|
#
|
680
680
|
def set_margins_TB(margin)
|
681
681
|
put_deprecate_message("#{self}.set_margins_TB")
|
682
|
-
self
|
682
|
+
self.margins_top_bottom = margin
|
683
683
|
end
|
684
684
|
|
685
685
|
#
|
@@ -688,7 +688,7 @@ module Writexlsx
|
|
688
688
|
#
|
689
689
|
def set_margin_left(margin = 0.7)
|
690
690
|
put_deprecate_message("#{self}.set_margin_left")
|
691
|
-
self
|
691
|
+
self.margin_left = margin
|
692
692
|
end
|
693
693
|
|
694
694
|
#
|
@@ -697,7 +697,7 @@ module Writexlsx
|
|
697
697
|
#
|
698
698
|
def set_margin_right(margin = 0.7)
|
699
699
|
put_deprecate_message("#{self}.set_margin_right")
|
700
|
-
self
|
700
|
+
self.margin_right = margin
|
701
701
|
end
|
702
702
|
|
703
703
|
#
|
@@ -706,7 +706,7 @@ module Writexlsx
|
|
706
706
|
#
|
707
707
|
def set_margin_top(margin = 0.75)
|
708
708
|
put_deprecate_message("#{self}.set_margin_top")
|
709
|
-
self
|
709
|
+
self.margin_top = margin
|
710
710
|
end
|
711
711
|
|
712
712
|
#
|
@@ -715,7 +715,7 @@ module Writexlsx
|
|
715
715
|
#
|
716
716
|
def set_margin_bottom(margin = 0.75)
|
717
717
|
put_deprecate_message("#{self}.set_margin_bottom")
|
718
|
-
self
|
718
|
+
self.margin_bottom = margin
|
719
719
|
end
|
720
720
|
|
721
721
|
#
|
@@ -747,7 +747,7 @@ module Writexlsx
|
|
747
747
|
#
|
748
748
|
def repeat_columns(*args)
|
749
749
|
if args[0] =~ /^\D/
|
750
|
-
|
750
|
+
_dummy, first_col, _dummy, last_col = substitute_cellref(*args)
|
751
751
|
else
|
752
752
|
first_col, last_col = args
|
753
753
|
end
|
@@ -771,13 +771,12 @@ module Writexlsx
|
|
771
771
|
#
|
772
772
|
def print_area(*args)
|
773
773
|
return @page_setup.print_area.dup if args.empty?
|
774
|
+
|
774
775
|
row1, col1, row2, col2 = row_col_notation(args)
|
775
776
|
return if [row1, col1, row2, col2].include?(nil)
|
776
777
|
|
777
778
|
# Ignore max print area since this is the same as no print area for Excel.
|
778
|
-
if row1 == 0 && col1 == 0 && row2 == ROW_MAX - 1 && col2 == COL_MAX - 1
|
779
|
-
return
|
780
|
-
end
|
779
|
+
return if row1 == 0 && col1 == 0 && row2 == ROW_MAX - 1 && col2 == COL_MAX - 1
|
781
780
|
|
782
781
|
# Build up the print area range "=Sheet2!R1C1:R2C1"
|
783
782
|
@page_setup.print_area = convert_name_area(row1, col1, row2, col2)
|
@@ -788,12 +787,12 @@ module Writexlsx
|
|
788
787
|
#
|
789
788
|
def zoom=(scale)
|
790
789
|
# Confine the scale to Excel's range
|
791
|
-
if scale < 10 or scale > 400
|
792
|
-
|
793
|
-
|
794
|
-
|
795
|
-
|
796
|
-
|
790
|
+
@zoom = if scale < 10 or scale > 400
|
791
|
+
# carp "Zoom factor scale outside range: 10 <= zoom <= 400"
|
792
|
+
100
|
793
|
+
else
|
794
|
+
scale.to_i
|
795
|
+
end
|
797
796
|
end
|
798
797
|
|
799
798
|
# This method is deprecated. use zoom=().
|
@@ -823,23 +822,24 @@ module Writexlsx
|
|
823
822
|
#
|
824
823
|
def set_print_scale(scale = 100)
|
825
824
|
put_deprecate_message("#{self}.set_print_scale")
|
826
|
-
self
|
825
|
+
self.print_scale = (scale)
|
827
826
|
end
|
828
827
|
|
829
|
-
|
830
|
-
|
831
|
-
|
832
|
-
|
833
|
-
|
828
|
+
#
|
829
|
+
# Set the option to print the worksheet in black and white.
|
830
|
+
#
|
831
|
+
def print_black_and_white
|
832
|
+
@page_setup.black_white = true
|
833
|
+
@page_setup.page_setup_changed = true
|
834
834
|
end
|
835
835
|
|
836
|
-
|
837
|
-
|
838
|
-
|
839
|
-
|
840
|
-
|
841
|
-
|
842
|
-
|
836
|
+
#
|
837
|
+
# Causes the write() method to treat integers with a leading zero as a string.
|
838
|
+
# This ensures that any leading zeros such, as in zip codes, are maintained.
|
839
|
+
#
|
840
|
+
def keep_leading_zeros(flag = true)
|
841
|
+
@leading_zeros = !!flag
|
842
|
+
end
|
843
843
|
|
844
844
|
#
|
845
845
|
# Display the worksheet right to left for some eastern versions of Excel.
|
@@ -852,7 +852,7 @@ module Writexlsx
|
|
852
852
|
# Hide cell zero values.
|
853
853
|
#
|
854
854
|
def hide_zero(flag = true)
|
855
|
-
|
855
|
+
@show_zeros = !flag
|
856
856
|
end
|
857
857
|
|
858
858
|
#
|
@@ -877,7 +877,7 @@ module Writexlsx
|
|
877
877
|
|
878
878
|
def set_start_page(page_start)
|
879
879
|
put_deprecate_message("#{self}.set_start_page")
|
880
|
-
self
|
880
|
+
self.start_page = page_start
|
881
881
|
end
|
882
882
|
|
883
883
|
#
|
@@ -893,9 +893,13 @@ module Writexlsx
|
|
893
893
|
# Check for a cell reference in A1 notation and substitute row and column
|
894
894
|
row_col_args = row_col_notation(args)
|
895
895
|
token = row_col_args[2] || ''
|
896
|
+
token = token.to_s if token.instance_of?(Time)
|
896
897
|
|
898
|
+
fmt = row_col_args[3]
|
899
|
+
if fmt.respond_to?(:force_text_format?) && fmt.force_text_format?
|
900
|
+
write_string(*args) # Force text format
|
897
901
|
# Match an array ref.
|
898
|
-
|
902
|
+
elsif token.respond_to?(:to_ary)
|
899
903
|
write_row(*args)
|
900
904
|
elsif token.respond_to?(:coerce) # Numeric
|
901
905
|
write_number(*args)
|
@@ -916,13 +920,13 @@ module Writexlsx
|
|
916
920
|
write_blank(*row_col_args)
|
917
921
|
elsif @workbook.strings_to_urls
|
918
922
|
# Match http, https or ftp URL
|
919
|
-
if token =~ %r
|
923
|
+
if token =~ %r{\A[fh]tt?ps?://}
|
920
924
|
write_url(*args)
|
921
925
|
# Match mailto:
|
922
|
-
elsif token =~
|
926
|
+
elsif token =~ /\Amailto:/
|
923
927
|
write_url(*args)
|
924
928
|
# Match internal or external sheet link
|
925
|
-
elsif token =~
|
929
|
+
elsif token =~ /\A(?:in|ex)ternal:/
|
926
930
|
write_url(*args)
|
927
931
|
else
|
928
932
|
write_string(*args)
|
@@ -934,7 +938,7 @@ module Writexlsx
|
|
934
938
|
|
935
939
|
#
|
936
940
|
# :call-seq:
|
937
|
-
# write_row(row, col, array [ , format ]
|
941
|
+
# write_row(row, col, array [ , format ])
|
938
942
|
#
|
939
943
|
# Write a row of data starting from (row, col). Call write_col() if any of
|
940
944
|
# the elements of the array are in turn array. This allows the writing
|
@@ -958,7 +962,7 @@ module Writexlsx
|
|
958
962
|
|
959
963
|
#
|
960
964
|
# :call-seq:
|
961
|
-
# write_col(row, col, array [ , format ]
|
965
|
+
# write_col(row, col, array [ , format ])
|
962
966
|
#
|
963
967
|
# Write a column of data starting from (row, col). Call write_row() if any of
|
964
968
|
# the elements of the array are in turn array. This allows the writing
|
@@ -997,7 +1001,7 @@ module Writexlsx
|
|
997
1001
|
|
998
1002
|
#
|
999
1003
|
# :call-seq:
|
1000
|
-
# write_number(row, column, number [ , format ]
|
1004
|
+
# write_number(row, column, number [ , format ])
|
1001
1005
|
#
|
1002
1006
|
# Write an integer or a float to the cell specified by row and column:
|
1003
1007
|
#
|
@@ -1010,12 +1014,12 @@ module Writexlsx
|
|
1010
1014
|
check_dimensions(row, col)
|
1011
1015
|
store_row_col_max_min_values(row, col)
|
1012
1016
|
|
1013
|
-
store_data_to_table(NumberCellData.new(
|
1017
|
+
store_data_to_table(NumberCellData.new(num, xf), row, col)
|
1014
1018
|
end
|
1015
1019
|
|
1016
1020
|
#
|
1017
1021
|
# :call-seq:
|
1018
|
-
# write_string(row, column, string [, format ]
|
1022
|
+
# write_string(row, column, string [, format ])
|
1019
1023
|
#
|
1020
1024
|
# Write a string to the specified row and column (zero indexed).
|
1021
1025
|
# +format+ is optional.
|
@@ -1032,12 +1036,12 @@ module Writexlsx
|
|
1032
1036
|
|
1033
1037
|
index = shared_string_index(str.length > STR_MAX ? str[0, STR_MAX] : str)
|
1034
1038
|
|
1035
|
-
store_data_to_table(StringCellData.new(
|
1039
|
+
store_data_to_table(StringCellData.new(index, xf), row, col)
|
1036
1040
|
end
|
1037
1041
|
|
1038
1042
|
#
|
1039
1043
|
# :call-seq:
|
1040
|
-
# write_rich_string(row, column, (string | format, string)+, [,cell_format]
|
1044
|
+
# write_rich_string(row, column, (string | format, string)+, [,cell_format])
|
1041
1045
|
#
|
1042
1046
|
# The write_rich_string() method is used to write strings with multiple formats.
|
1043
1047
|
# The method receives string fragments prefixed by format objects. The final
|
@@ -1054,13 +1058,13 @@ module Writexlsx
|
|
1054
1058
|
check_dimensions(row, col)
|
1055
1059
|
store_row_col_max_min_values(row, col)
|
1056
1060
|
|
1057
|
-
fragments,
|
1061
|
+
fragments, _length = rich_strings_fragments(rich_strings)
|
1058
1062
|
# can't allow 2 formats in a row
|
1059
1063
|
return -4 unless fragments
|
1060
1064
|
|
1061
1065
|
index = shared_string_index(xml_str_of_rich_string(fragments))
|
1062
1066
|
|
1063
|
-
store_data_to_table(StringCellData.new(
|
1067
|
+
store_data_to_table(StringCellData.new(index, xf), row, col)
|
1064
1068
|
end
|
1065
1069
|
|
1066
1070
|
#
|
@@ -1083,12 +1087,177 @@ module Writexlsx
|
|
1083
1087
|
check_dimensions(row, col)
|
1084
1088
|
store_row_col_max_min_values(row, col)
|
1085
1089
|
|
1086
|
-
store_data_to_table(BlankCellData.new(
|
1090
|
+
store_data_to_table(BlankCellData.new(xf), row, col)
|
1091
|
+
end
|
1092
|
+
|
1093
|
+
def expand_formula(formula, function, addition = '')
|
1094
|
+
if formula =~ /\b(#{function})/
|
1095
|
+
formula.gsub(
|
1096
|
+
::Regexp.last_match(1),
|
1097
|
+
"_xlfn#{addition}.#{::Regexp.last_match(1)}"
|
1098
|
+
)
|
1099
|
+
else
|
1100
|
+
formula
|
1101
|
+
end
|
1087
1102
|
end
|
1103
|
+
private :expand_formula
|
1104
|
+
|
1105
|
+
#
|
1106
|
+
# Utility method to strip equal sign and array braces from a formula
|
1107
|
+
# and also expand out future and dynamic array formulas.
|
1108
|
+
#
|
1109
|
+
def prepare_formula(given_formula)
|
1110
|
+
# Ignore empty/null formulas.
|
1111
|
+
return given_formula unless ptrue?(given_formula)
|
1112
|
+
|
1113
|
+
# Remove array formula braces and the leading =.
|
1114
|
+
formula = given_formula.sub(/^\{(.*)\}$/, '\1').sub(/^=/, '')
|
1115
|
+
|
1116
|
+
# # Don't expand formulas that the user has already expanded.
|
1117
|
+
return formula if formula =~ /_xlfn\./
|
1118
|
+
|
1119
|
+
# Expand dynamic array formulas.
|
1120
|
+
formula = expand_formula(formula, 'LET\(')
|
1121
|
+
formula = expand_formula(formula, 'LAMBDA\(')
|
1122
|
+
formula = expand_formula(formula, 'SINGLE\(')
|
1123
|
+
formula = expand_formula(formula, 'SORTBY\(')
|
1124
|
+
formula = expand_formula(formula, 'UNIQUE\(')
|
1125
|
+
formula = expand_formula(formula, 'XMATCH\(')
|
1126
|
+
formula = expand_formula(formula, 'XLOOKUP\(')
|
1127
|
+
formula = expand_formula(formula, 'SEQUENCE\(')
|
1128
|
+
formula = expand_formula(formula, 'RANDARRAY\(')
|
1129
|
+
formula = expand_formula(formula, 'SORT\(', '._xlws')
|
1130
|
+
formula = expand_formula(formula, 'ANCHORARRAY\(')
|
1131
|
+
formula = expand_formula(formula, 'FILTER\(', '._xlws')
|
1132
|
+
|
1133
|
+
return formula unless @use_future_functions
|
1134
|
+
|
1135
|
+
# Future functions.
|
1136
|
+
formula = expand_formula(formula, 'ACOTH\(')
|
1137
|
+
formula = expand_formula(formula, 'ACOT\(')
|
1138
|
+
formula = expand_formula(formula, 'AGGREGATE\(')
|
1139
|
+
formula = expand_formula(formula, 'ARABIC\(')
|
1140
|
+
formula = expand_formula(formula, 'BASE\(')
|
1141
|
+
formula = expand_formula(formula, 'BETA.DIST\(')
|
1142
|
+
formula = expand_formula(formula, 'BETA.INV\(')
|
1143
|
+
formula = expand_formula(formula, 'BINOM.DIST.RANGE\(')
|
1144
|
+
formula = expand_formula(formula, 'BINOM.DIST\(')
|
1145
|
+
formula = expand_formula(formula, 'BINOM.INV\(')
|
1146
|
+
formula = expand_formula(formula, 'BITAND\(')
|
1147
|
+
formula = expand_formula(formula, 'BITLSHIFT\(')
|
1148
|
+
formula = expand_formula(formula, 'BITOR\(')
|
1149
|
+
formula = expand_formula(formula, 'BITRSHIFT\(')
|
1150
|
+
formula = expand_formula(formula, 'BITXOR\(')
|
1151
|
+
formula = expand_formula(formula, 'CEILING.MATH\(')
|
1152
|
+
formula = expand_formula(formula, 'CEILING.PRECISE\(')
|
1153
|
+
formula = expand_formula(formula, 'CHISQ.DIST.RT\(')
|
1154
|
+
formula = expand_formula(formula, 'CHISQ.DIST\(')
|
1155
|
+
formula = expand_formula(formula, 'CHISQ.INV.RT\(')
|
1156
|
+
formula = expand_formula(formula, 'CHISQ.INV\(')
|
1157
|
+
formula = expand_formula(formula, 'CHISQ.TEST\(')
|
1158
|
+
formula = expand_formula(formula, 'COMBINA\(')
|
1159
|
+
formula = expand_formula(formula, 'CONCAT\(')
|
1160
|
+
formula = expand_formula(formula, 'CONFIDENCE.NORM\(')
|
1161
|
+
formula = expand_formula(formula, 'CONFIDENCE.T\(')
|
1162
|
+
formula = expand_formula(formula, 'COTH\(')
|
1163
|
+
formula = expand_formula(formula, 'COT\(')
|
1164
|
+
formula = expand_formula(formula, 'COVARIANCE.P\(')
|
1165
|
+
formula = expand_formula(formula, 'COVARIANCE.S\(')
|
1166
|
+
formula = expand_formula(formula, 'CSCH\(')
|
1167
|
+
formula = expand_formula(formula, 'CSC\(')
|
1168
|
+
formula = expand_formula(formula, 'DAYS\(')
|
1169
|
+
formula = expand_formula(formula, 'DECIMAL\(')
|
1170
|
+
formula = expand_formula(formula, 'ERF.PRECISE\(')
|
1171
|
+
formula = expand_formula(formula, 'ERFC.PRECISE\(')
|
1172
|
+
formula = expand_formula(formula, 'EXPON.DIST\(')
|
1173
|
+
formula = expand_formula(formula, 'F.DIST.RT\(')
|
1174
|
+
formula = expand_formula(formula, 'F.DIST\(')
|
1175
|
+
formula = expand_formula(formula, 'F.INV.RT\(')
|
1176
|
+
formula = expand_formula(formula, 'F.INV\(')
|
1177
|
+
formula = expand_formula(formula, 'F.TEST\(')
|
1178
|
+
formula = expand_formula(formula, 'FILTERXML\(')
|
1179
|
+
formula = expand_formula(formula, 'FLOOR.MATH\(')
|
1180
|
+
formula = expand_formula(formula, 'FLOOR.PRECISE\(')
|
1181
|
+
formula = expand_formula(formula, 'FORECAST.ETS.CONFINT\(')
|
1182
|
+
formula = expand_formula(formula, 'FORECAST.ETS.SEASONALITY\(')
|
1183
|
+
formula = expand_formula(formula, 'FORECAST.ETS.STAT\(')
|
1184
|
+
formula = expand_formula(formula, 'FORECAST.ETS\(')
|
1185
|
+
formula = expand_formula(formula, 'FORECAST.LINEAR\(')
|
1186
|
+
formula = expand_formula(formula, 'FORMULATEXT\(')
|
1187
|
+
formula = expand_formula(formula, 'GAMMA.DIST\(')
|
1188
|
+
formula = expand_formula(formula, 'GAMMA.INV\(')
|
1189
|
+
formula = expand_formula(formula, 'GAMMALN.PRECISE\(')
|
1190
|
+
formula = expand_formula(formula, 'GAMMA\(')
|
1191
|
+
formula = expand_formula(formula, 'GAUSS\(')
|
1192
|
+
formula = expand_formula(formula, 'HYPGEOM.DIST\(')
|
1193
|
+
formula = expand_formula(formula, 'IFNA\(')
|
1194
|
+
formula = expand_formula(formula, 'IFS\(')
|
1195
|
+
formula = expand_formula(formula, 'IMCOSH\(')
|
1196
|
+
formula = expand_formula(formula, 'IMCOT\(')
|
1197
|
+
formula = expand_formula(formula, 'IMCSCH\(')
|
1198
|
+
formula = expand_formula(formula, 'IMCSC\(')
|
1199
|
+
formula = expand_formula(formula, 'IMSECH\(')
|
1200
|
+
formula = expand_formula(formula, 'IMSEC\(')
|
1201
|
+
formula = expand_formula(formula, 'IMSINH\(')
|
1202
|
+
formula = expand_formula(formula, 'IMTAN\(')
|
1203
|
+
formula = expand_formula(formula, 'ISFORMULA\(')
|
1204
|
+
formula = expand_formula(formula, 'ISOWEEKNUM\(')
|
1205
|
+
formula = expand_formula(formula, 'LOGNORM.DIST\(')
|
1206
|
+
formula = expand_formula(formula, 'LOGNORM.INV\(')
|
1207
|
+
formula = expand_formula(formula, 'MAXIFS\(')
|
1208
|
+
formula = expand_formula(formula, 'MINIFS\(')
|
1209
|
+
formula = expand_formula(formula, 'MODE.MULT\(')
|
1210
|
+
formula = expand_formula(formula, 'MODE.SNGL\(')
|
1211
|
+
formula = expand_formula(formula, 'MUNIT\(')
|
1212
|
+
formula = expand_formula(formula, 'NEGBINOM.DIST\(')
|
1213
|
+
formula = expand_formula(formula, 'NORM.DIST\(')
|
1214
|
+
formula = expand_formula(formula, 'NORM.INV\(')
|
1215
|
+
formula = expand_formula(formula, 'NORM.S.DIST\(')
|
1216
|
+
formula = expand_formula(formula, 'NORM.S.INV\(')
|
1217
|
+
formula = expand_formula(formula, 'NUMBERVALUE\(')
|
1218
|
+
formula = expand_formula(formula, 'PDURATION\(')
|
1219
|
+
formula = expand_formula(formula, 'PERCENTILE.EXC\(')
|
1220
|
+
formula = expand_formula(formula, 'PERCENTILE.INC\(')
|
1221
|
+
formula = expand_formula(formula, 'PERCENTRANK.EXC\(')
|
1222
|
+
formula = expand_formula(formula, 'PERCENTRANK.INC\(')
|
1223
|
+
formula = expand_formula(formula, 'PERMUTATIONA\(')
|
1224
|
+
formula = expand_formula(formula, 'PHI\(')
|
1225
|
+
formula = expand_formula(formula, 'POISSON.DIST\(')
|
1226
|
+
formula = expand_formula(formula, 'QUARTILE.EXC\(')
|
1227
|
+
formula = expand_formula(formula, 'QUARTILE.INC\(')
|
1228
|
+
formula = expand_formula(formula, 'QUERYSTRING\(')
|
1229
|
+
formula = expand_formula(formula, 'RANK.AVG\(')
|
1230
|
+
formula = expand_formula(formula, 'RANK.EQ\(')
|
1231
|
+
formula = expand_formula(formula, 'RRI\(')
|
1232
|
+
formula = expand_formula(formula, 'SECH\(')
|
1233
|
+
formula = expand_formula(formula, 'SEC\(')
|
1234
|
+
formula = expand_formula(formula, 'SHEETS\(')
|
1235
|
+
formula = expand_formula(formula, 'SHEET\(')
|
1236
|
+
formula = expand_formula(formula, 'SKEW.P\(')
|
1237
|
+
formula = expand_formula(formula, 'STDEV.P\(')
|
1238
|
+
formula = expand_formula(formula, 'STDEV.S\(')
|
1239
|
+
formula = expand_formula(formula, 'SWITCH\(')
|
1240
|
+
formula = expand_formula(formula, 'T.DIST.2T\(')
|
1241
|
+
formula = expand_formula(formula, 'T.DIST.RT\(')
|
1242
|
+
formula = expand_formula(formula, 'T.DIST\(')
|
1243
|
+
formula = expand_formula(formula, 'T.INV.2T\(')
|
1244
|
+
formula = expand_formula(formula, 'T.INV\(')
|
1245
|
+
formula = expand_formula(formula, 'T.TEST\(')
|
1246
|
+
formula = expand_formula(formula, 'TEXTJOIN\(')
|
1247
|
+
formula = expand_formula(formula, 'UNICHAR\(')
|
1248
|
+
formula = expand_formula(formula, 'UNICODE\(')
|
1249
|
+
formula = expand_formula(formula, 'VAR.P\(')
|
1250
|
+
formula = expand_formula(formula, 'VAR.S\(')
|
1251
|
+
formula = expand_formula(formula, 'WEBSERVICE\(')
|
1252
|
+
formula = expand_formula(formula, 'WEIBULL.DIST\(')
|
1253
|
+
formula = expand_formula(formula, 'XOR\(')
|
1254
|
+
expand_formula(formula, 'Z.TEST\(')
|
1255
|
+
end
|
1256
|
+
private :prepare_formula
|
1088
1257
|
|
1089
1258
|
#
|
1090
1259
|
# :call-seq:
|
1091
|
-
# write_formula(row, column, formula [ , format [ , value ] ]
|
1260
|
+
# write_formula(row, column, formula [ , format [ , value ] ])
|
1092
1261
|
#
|
1093
1262
|
# Write a formula or function to the cell specified by +row+ and +column+:
|
1094
1263
|
#
|
@@ -1097,6 +1266,15 @@ module Writexlsx
|
|
1097
1266
|
row, col, formula, format, value = row_col_notation(args)
|
1098
1267
|
raise WriteXLSXInsufficientArgumentError if [row, col, formula].include?(nil)
|
1099
1268
|
|
1269
|
+
# Check for dynamic array functions.
|
1270
|
+
regex = /\bLET\(|\bSORT\(|\bLAMBDA\(|\bSINGLE\(|\bSORTBY\(|\bUNIQUE\(|\bXMATCH\(|\bFILTER\(|\bXLOOKUP\(|\bSEQUENCE\(|\bRANDARRAY\(|\bANCHORARRAY\(/
|
1271
|
+
if formula =~ regex
|
1272
|
+
return write_dynamic_array_formula(
|
1273
|
+
row, col, row, col, formula, format, value
|
1274
|
+
)
|
1275
|
+
end
|
1276
|
+
|
1277
|
+
# Hand off array formulas.
|
1100
1278
|
if formula =~ /^\{=.*\}$/
|
1101
1279
|
write_array_formula(row, col, row, col, formula, format, value)
|
1102
1280
|
else
|
@@ -1104,7 +1282,7 @@ module Writexlsx
|
|
1104
1282
|
store_row_col_max_min_values(row, col)
|
1105
1283
|
formula = formula.sub(/^=/, '')
|
1106
1284
|
|
1107
|
-
store_data_to_table(FormulaCellData.new(
|
1285
|
+
store_data_to_table(FormulaCellData.new(formula, format, value), row, col)
|
1108
1286
|
end
|
1109
1287
|
end
|
1110
1288
|
|
@@ -1114,7 +1292,15 @@ module Writexlsx
|
|
1114
1292
|
#
|
1115
1293
|
def write_array_formula_base(type, *args)
|
1116
1294
|
# Check for a cell reference in A1 notation and substitute row and column
|
1117
|
-
|
1295
|
+
# Convert single cell to range
|
1296
|
+
if args.first.to_s =~ /^([A-Za-z]+[0-9]+)$/
|
1297
|
+
range = "#{::Regexp.last_match(1)}:#{::Regexp.last_match(1)}"
|
1298
|
+
params = [range] + args[1..]
|
1299
|
+
else
|
1300
|
+
params = args
|
1301
|
+
end
|
1302
|
+
|
1303
|
+
row1, col1, row2, col2, formula, xf, value = row_col_notation(params)
|
1118
1304
|
raise WriteXLSXInsufficientArgumentError if [row1, col1, row2, col2, formula].include?(nil)
|
1119
1305
|
|
1120
1306
|
# Swap last row/col with first row/col as necessary
|
@@ -1128,29 +1314,31 @@ module Writexlsx
|
|
1128
1314
|
store_row_col_max_min_values(row2, col2)
|
1129
1315
|
|
1130
1316
|
# Define array range
|
1131
|
-
if row1 == row2 && col1 == col2
|
1132
|
-
|
1133
|
-
|
1134
|
-
|
1135
|
-
|
1317
|
+
range = if row1 == row2 && col1 == col2
|
1318
|
+
xl_rowcol_to_cell(row1, col1)
|
1319
|
+
else
|
1320
|
+
"#{xl_rowcol_to_cell(row1, col1)}:#{xl_rowcol_to_cell(row2, col2)}"
|
1321
|
+
end
|
1136
1322
|
|
1137
|
-
#
|
1138
|
-
formula = formula
|
1323
|
+
# Modify the formula string, as needed.
|
1324
|
+
formula = prepare_formula(formula)
|
1139
1325
|
|
1140
1326
|
store_data_to_table(
|
1141
1327
|
if type == 'a'
|
1142
|
-
FormulaArrayCellData.new(
|
1328
|
+
FormulaArrayCellData.new(formula, xf, range, value)
|
1143
1329
|
elsif type == 'd'
|
1144
|
-
DynamicFormulaArrayCellData.new(
|
1330
|
+
DynamicFormulaArrayCellData.new(formula, xf, range, value)
|
1145
1331
|
else
|
1146
1332
|
raise "invalid type in write_array_formula_base()."
|
1147
|
-
end
|
1333
|
+
end,
|
1334
|
+
row1, col1
|
1148
1335
|
)
|
1149
1336
|
|
1150
1337
|
# Pad out the rest of the area with formatted zeroes.
|
1151
1338
|
(row1..row2).each do |row|
|
1152
1339
|
(col1..col2).each do |col|
|
1153
1340
|
next if row == row1 && col == col1
|
1341
|
+
|
1154
1342
|
write_number(row, col, 0, xf)
|
1155
1343
|
end
|
1156
1344
|
end
|
@@ -1186,13 +1374,12 @@ module Writexlsx
|
|
1186
1374
|
|
1187
1375
|
val = val ? 1 : 0 # Boolean value.
|
1188
1376
|
# xf : cell format.
|
1189
|
-
type = 'l' # The data type
|
1190
1377
|
|
1191
1378
|
# Check that row and col are valid and store max and min values
|
1192
1379
|
check_dimensions(row, col)
|
1193
1380
|
store_row_col_max_min_values(row, col)
|
1194
1381
|
|
1195
|
-
store_data_to_table(BooleanCellData.new(
|
1382
|
+
store_data_to_table(BooleanCellData.new(val, xf), row, col)
|
1196
1383
|
end
|
1197
1384
|
|
1198
1385
|
#
|
@@ -1225,15 +1412,15 @@ module Writexlsx
|
|
1225
1412
|
format.set_format_properties(params)
|
1226
1413
|
end
|
1227
1414
|
# keep original value of cell
|
1228
|
-
if cell_data.is_a? FormulaCellData
|
1229
|
-
|
1230
|
-
|
1231
|
-
|
1232
|
-
|
1233
|
-
|
1234
|
-
|
1235
|
-
|
1236
|
-
|
1415
|
+
value = if cell_data.is_a? FormulaCellData
|
1416
|
+
"=#{cell_data.token}"
|
1417
|
+
elsif cell_data.is_a? FormulaArrayCellData
|
1418
|
+
"{=#{cell_data.token}}"
|
1419
|
+
elsif cell_data.is_a? StringCellData
|
1420
|
+
@workbook.shared_strings.string(cell_data.data[:sst_id])
|
1421
|
+
else
|
1422
|
+
cell_data.data
|
1423
|
+
end
|
1237
1424
|
write(row, col, value, format)
|
1238
1425
|
end
|
1239
1426
|
end
|
@@ -1250,7 +1437,7 @@ module Writexlsx
|
|
1250
1437
|
raise WriteXLSXInsufficientArgumentError if [row_first, col_first, row_last, col_last, params].include?(nil)
|
1251
1438
|
|
1252
1439
|
# Swap last row/col with first row/col as necessary
|
1253
|
-
row_first, row_last
|
1440
|
+
row_first, row_last = row_last, row_first if row_first > row_last
|
1254
1441
|
col_first, col_last = col_last, col_first if col_first > col_last
|
1255
1442
|
|
1256
1443
|
# Check that column number is valid and store the max value
|
@@ -1287,7 +1474,7 @@ module Writexlsx
|
|
1287
1474
|
|
1288
1475
|
#
|
1289
1476
|
# :call-seq:
|
1290
|
-
# write_url(row, column, url [ , format, label, tip ]
|
1477
|
+
# write_url(row, column, url [ , format, label, tip ])
|
1291
1478
|
#
|
1292
1479
|
# Write a hyperlink to a URL in the cell specified by +row+ and +column+.
|
1293
1480
|
# The hyperlink is comprised of two elements: the visible label and
|
@@ -1309,12 +1496,10 @@ module Writexlsx
|
|
1309
1496
|
hyperlink = Hyperlink.factory(url, str, tip)
|
1310
1497
|
store_hyperlink(row, col, hyperlink)
|
1311
1498
|
|
1312
|
-
if hyperlinks_count > 65_530
|
1313
|
-
raise "URL '#{url}' added but URL exceeds Excel's limit of 65,530 URLs per worksheet."
|
1314
|
-
end
|
1499
|
+
raise "URL '#{url}' added but URL exceeds Excel's limit of 65,530 URLs per worksheet." if hyperlinks_count > 65_530
|
1315
1500
|
|
1316
1501
|
# Add the default URL format.
|
1317
|
-
xf
|
1502
|
+
xf ||= @default_url_format
|
1318
1503
|
|
1319
1504
|
# Write the hyperlink string.
|
1320
1505
|
write_string(row, col, hyperlink.str, xf)
|
@@ -1322,7 +1507,7 @@ module Writexlsx
|
|
1322
1507
|
|
1323
1508
|
#
|
1324
1509
|
# :call-seq:
|
1325
|
-
# write_date_time (row, col, date_string [ , format ]
|
1510
|
+
# write_date_time (row, col, date_string [ , format ])
|
1326
1511
|
#
|
1327
1512
|
# Write a datetime string in ISO8601 "yyyy-mm-ddThh:mm:ss.ss" format as a
|
1328
1513
|
# number representing an Excel date. format is optional.
|
@@ -1339,7 +1524,7 @@ module Writexlsx
|
|
1339
1524
|
date_time = convert_date_time(str)
|
1340
1525
|
|
1341
1526
|
if date_time
|
1342
|
-
store_data_to_table(NumberCellData.new(
|
1527
|
+
store_data_to_table(NumberCellData.new(date_time, xf), row, col)
|
1343
1528
|
else
|
1344
1529
|
# If the date isn't valid then write it as a string.
|
1345
1530
|
write_string(*args)
|
@@ -1348,7 +1533,7 @@ module Writexlsx
|
|
1348
1533
|
|
1349
1534
|
#
|
1350
1535
|
# :call-seq:
|
1351
|
-
# insert_chart(row, column, chart [ , x, y, x_scale, y_scale ]
|
1536
|
+
# insert_chart(row, column, chart [ , x, y, x_scale, y_scale ])
|
1352
1537
|
#
|
1353
1538
|
# This method can be used to insert a Chart object into a worksheet.
|
1354
1539
|
# The Chart must be created by the add_chart() Workbook method and
|
@@ -1359,14 +1544,15 @@ module Writexlsx
|
|
1359
1544
|
row, col, chart, *options = row_col_notation(args)
|
1360
1545
|
raise WriteXLSXInsufficientArgumentError if [row, col, chart].include?(nil)
|
1361
1546
|
|
1362
|
-
if options.first.
|
1547
|
+
if options.first.instance_of?(Hash)
|
1363
1548
|
params = options.first
|
1364
|
-
x_offset
|
1365
|
-
y_offset
|
1366
|
-
x_scale
|
1367
|
-
y_scale
|
1368
|
-
anchor
|
1369
|
-
|
1549
|
+
x_offset = params[:x_offset]
|
1550
|
+
y_offset = params[:y_offset]
|
1551
|
+
x_scale = params[:x_scale]
|
1552
|
+
y_scale = params[:y_scale]
|
1553
|
+
anchor = params[:object_position]
|
1554
|
+
description = params[:description]
|
1555
|
+
decorative = params[:decorative]
|
1370
1556
|
else
|
1371
1557
|
x_offset, y_offset, x_scale, y_scale, anchor = options
|
1372
1558
|
end
|
@@ -1392,7 +1578,10 @@ module Writexlsx
|
|
1392
1578
|
x_offset = chart.x_offset if ptrue?(chart.x_offset)
|
1393
1579
|
y_offset = chart.y_offset if ptrue?(chart.y_offset)
|
1394
1580
|
|
1395
|
-
@charts << [
|
1581
|
+
@charts << [
|
1582
|
+
row, col, chart, x_offset, y_offset,
|
1583
|
+
x_scale, y_scale, anchor, description, decorative
|
1584
|
+
]
|
1396
1585
|
end
|
1397
1586
|
|
1398
1587
|
#
|
@@ -1404,7 +1593,7 @@ module Writexlsx
|
|
1404
1593
|
row, col, image, *options = row_col_notation(args)
|
1405
1594
|
raise WriteXLSXInsufficientArgumentError if [row, col, image].include?(nil)
|
1406
1595
|
|
1407
|
-
if options.first.
|
1596
|
+
if options.first.instance_of?(Hash)
|
1408
1597
|
# Newer hash bashed options
|
1409
1598
|
params = options.first
|
1410
1599
|
x_offset = params[:x_offset]
|
@@ -1433,7 +1622,7 @@ module Writexlsx
|
|
1433
1622
|
|
1434
1623
|
#
|
1435
1624
|
# :call-seq:
|
1436
|
-
# repeat_formula(row, column, formula [ , format ]
|
1625
|
+
# repeat_formula(row, column, formula [ , format ])
|
1437
1626
|
#
|
1438
1627
|
# Deprecated. This is a writeexcel gem's method that is no longer
|
1439
1628
|
# required by WriteXLSX.
|
@@ -1443,7 +1632,7 @@ module Writexlsx
|
|
1443
1632
|
row, col, formula, format, *pairs = row_col_notation(args)
|
1444
1633
|
raise WriteXLSXInsufficientArgumentError if [row, col].include?(nil)
|
1445
1634
|
|
1446
|
-
raise "Odd number of elements in pattern/replacement list" unless pairs.size
|
1635
|
+
raise "Odd number of elements in pattern/replacement list" unless pairs.size.even?
|
1447
1636
|
raise "Not a valid formula" unless formula.respond_to?(:to_ary)
|
1448
1637
|
|
1449
1638
|
tokens = formula.join("\t").split("\t")
|
@@ -1454,7 +1643,7 @@ module Writexlsx
|
|
1454
1643
|
value = pairs.pop
|
1455
1644
|
pairs.pop
|
1456
1645
|
end
|
1457
|
-
|
1646
|
+
until pairs.empty?
|
1458
1647
|
pattern = pairs.shift
|
1459
1648
|
replace = pairs.shift
|
1460
1649
|
|
@@ -1468,13 +1657,14 @@ module Writexlsx
|
|
1468
1657
|
|
1469
1658
|
#
|
1470
1659
|
# :call-seq:
|
1471
|
-
# set_row(row [ , height, format, hidden, level, collapsed ]
|
1660
|
+
# set_row(row [ , height, format, hidden, level, collapsed ])
|
1472
1661
|
#
|
1473
1662
|
# This method can be used to change the default properties of a row.
|
1474
1663
|
# All parameters apart from +row+ are optional.
|
1475
1664
|
#
|
1476
1665
|
def set_row(*args)
|
1477
1666
|
return unless args[0]
|
1667
|
+
|
1478
1668
|
row = args[0]
|
1479
1669
|
height = args[1] || @default_height
|
1480
1670
|
xf = args[2]
|
@@ -1541,9 +1731,7 @@ module Writexlsx
|
|
1541
1731
|
@row_size_changed = 1
|
1542
1732
|
end
|
1543
1733
|
|
1544
|
-
if ptrue?(zero_height)
|
1545
|
-
@default_row_zeroed = 1
|
1546
|
-
end
|
1734
|
+
@default_row_zeroed = 1 if ptrue?(zero_height)
|
1547
1735
|
end
|
1548
1736
|
|
1549
1737
|
#
|
@@ -1560,7 +1748,7 @@ module Writexlsx
|
|
1560
1748
|
raise "Can't merge single cell" if row_first == row_last && col_first == col_last
|
1561
1749
|
|
1562
1750
|
# Swap last row/col with first row/col as necessary
|
1563
|
-
row_first, row_last
|
1751
|
+
row_first, row_last = row_last, row_first if row_first > row_last
|
1564
1752
|
col_first, col_last = col_last, col_first if col_first > col_last
|
1565
1753
|
|
1566
1754
|
# Check that the data range is valid and store the max and min values.
|
@@ -1683,7 +1871,7 @@ module Writexlsx
|
|
1683
1871
|
# into a worksheet.
|
1684
1872
|
#
|
1685
1873
|
def insert_button(*args)
|
1686
|
-
@buttons_array << button_params(*
|
1874
|
+
@buttons_array << button_params(*row_col_notation(args))
|
1687
1875
|
@has_vml = 1
|
1688
1876
|
end
|
1689
1877
|
|
@@ -1705,11 +1893,7 @@ module Writexlsx
|
|
1705
1893
|
# Set the option to hide gridlines on the screen and the printed page.
|
1706
1894
|
#
|
1707
1895
|
def hide_gridlines(option = 1)
|
1708
|
-
|
1709
|
-
@screen_gridlines = false
|
1710
|
-
else
|
1711
|
-
@screen_gridlines = true
|
1712
|
-
end
|
1896
|
+
@screen_gridlines = (option != 2)
|
1713
1897
|
|
1714
1898
|
@page_setup.hide_gridlines(option)
|
1715
1899
|
end
|
@@ -1743,7 +1927,7 @@ module Writexlsx
|
|
1743
1927
|
def fit_to_pages(width = 1, height = 1)
|
1744
1928
|
@page_setup.fit_page = true
|
1745
1929
|
@page_setup.fit_width = width
|
1746
|
-
@page_setup.fit_height
|
1930
|
+
@page_setup.fit_height = height
|
1747
1931
|
@page_setup.page_setup_changed = true
|
1748
1932
|
end
|
1749
1933
|
|
@@ -1779,9 +1963,7 @@ module Writexlsx
|
|
1779
1963
|
|
1780
1964
|
tokens = extract_filter_tokens(expression)
|
1781
1965
|
|
1782
|
-
unless tokens.size == 3 || tokens.size == 7
|
1783
|
-
raise "Incorrect number of tokens in expression '#{expression}'"
|
1784
|
-
end
|
1966
|
+
raise "Incorrect number of tokens in expression '#{expression}'" unless tokens.size == 3 || tokens.size == 7
|
1785
1967
|
|
1786
1968
|
tokens = parse_filter_expression(expression, tokens)
|
1787
1969
|
|
@@ -1891,7 +2073,9 @@ module Writexlsx
|
|
1891
2073
|
def prepare_chart(index, chart_id, drawing_id) # :nodoc:
|
1892
2074
|
drawing_type = 1
|
1893
2075
|
|
1894
|
-
row,
|
2076
|
+
row, col, chart, x_offset, y_offset,
|
2077
|
+
x_scale, y_scale, anchor, description, decorative = @charts[index]
|
2078
|
+
|
1895
2079
|
chart.id = chart_id - 1
|
1896
2080
|
x_scale ||= 0
|
1897
2081
|
y_scale ||= 0
|
@@ -1909,15 +2093,15 @@ module Writexlsx
|
|
1909
2093
|
name = chart.name
|
1910
2094
|
|
1911
2095
|
# Create a Drawing object to use with worksheet unless one already exists.
|
1912
|
-
drawing = Drawing.new(drawing_type, dimensions, 0, 0,
|
1913
|
-
if
|
2096
|
+
drawing = Drawing.new(drawing_type, dimensions, 0, 0, nil, anchor, drawing_rel_index, 0, nil, name, description, decorative)
|
2097
|
+
if drawings?
|
2098
|
+
@drawings.add_drawing_object(drawing)
|
2099
|
+
else
|
1914
2100
|
@drawings = Drawings.new
|
1915
2101
|
@drawings.add_drawing_object(drawing)
|
1916
2102
|
@drawings.embedded = 1
|
1917
2103
|
|
1918
|
-
@external_drawing_links << ['/drawing', "../drawings/drawing#{drawing_id}.xml"
|
1919
|
-
else
|
1920
|
-
@drawings.add_drawing_object(drawing)
|
2104
|
+
@external_drawing_links << ['/drawing', "../drawings/drawing#{drawing_id}.xml"]
|
1921
2105
|
end
|
1922
2106
|
@drawing_links << ['/chart', "../charts/chart#{chart_id}.xml"]
|
1923
2107
|
end
|
@@ -1933,31 +2117,31 @@ module Writexlsx
|
|
1933
2117
|
|
1934
2118
|
# Iterate through the table data.
|
1935
2119
|
data = []
|
1936
|
-
(row_start
|
2120
|
+
(row_start..row_end).each do |row_num|
|
1937
2121
|
# Store nil if row doesn't exist.
|
1938
|
-
|
2122
|
+
unless @cell_data_table[row_num]
|
1939
2123
|
data << nil
|
1940
2124
|
next
|
1941
2125
|
end
|
1942
2126
|
|
1943
|
-
(col_start
|
1944
|
-
|
2127
|
+
(col_start..col_end).each do |col_num|
|
2128
|
+
cell = @cell_data_table[row_num][col_num]
|
2129
|
+
if cell
|
1945
2130
|
data << cell.data
|
1946
2131
|
else
|
1947
|
-
# Store nil if col doesn't exist.
|
1948
2132
|
data << nil
|
1949
2133
|
end
|
1950
2134
|
end
|
1951
2135
|
end
|
1952
2136
|
|
1953
|
-
|
2137
|
+
data
|
1954
2138
|
end
|
1955
2139
|
|
1956
2140
|
#
|
1957
2141
|
# Calculate the vertices that define the position of a graphical object within
|
1958
2142
|
# the worksheet in pixels.
|
1959
2143
|
#
|
1960
|
-
def position_object_pixels(col_start, row_start, x1, y1, width, height, anchor = nil)
|
2144
|
+
def position_object_pixels(col_start, row_start, x1, y1, width, height, anchor = nil) # :nodoc:
|
1961
2145
|
# Adjust start column for negative offsets.
|
1962
2146
|
while x1 < 0 && col_start > 0
|
1963
2147
|
x1 += size_col(col_start - 1)
|
@@ -1975,22 +2159,22 @@ module Writexlsx
|
|
1975
2159
|
y1 = 0 if y1 < 0
|
1976
2160
|
|
1977
2161
|
# Calculate the absolute x offset of the top-left vertex.
|
1978
|
-
if @col_size_changed
|
1979
|
-
|
1980
|
-
|
1981
|
-
|
1982
|
-
|
1983
|
-
|
2162
|
+
x_abs = if @col_size_changed
|
2163
|
+
(0..col_start - 1).inject(0) { |sum, col| sum += size_col(col, anchor) }
|
2164
|
+
else
|
2165
|
+
# Optimisation for when the column widths haven't changed.
|
2166
|
+
@default_col_pixels * col_start
|
2167
|
+
end
|
1984
2168
|
x_abs += x1
|
1985
2169
|
|
1986
2170
|
# Calculate the absolute y offset of the top-left vertex.
|
1987
2171
|
# Store the column change to allow optimisations.
|
1988
|
-
if @row_size_changed
|
1989
|
-
|
1990
|
-
|
1991
|
-
|
1992
|
-
|
1993
|
-
|
2172
|
+
y_abs = if @row_size_changed
|
2173
|
+
(0..row_start - 1).inject(0) { |sum, row| sum += size_row(row, anchor) }
|
2174
|
+
else
|
2175
|
+
# Optimisation for when the row heights haven't changed.
|
2176
|
+
@default_row_pixels * row_start
|
2177
|
+
end
|
1994
2178
|
y_abs += y1
|
1995
2179
|
|
1996
2180
|
# Adjust start column for offsets that are greater than the col width.
|
@@ -2043,7 +2227,7 @@ module Writexlsx
|
|
2043
2227
|
#
|
2044
2228
|
# Write the cell value <v> element.
|
2045
2229
|
#
|
2046
|
-
def write_cell_value(value = '')
|
2230
|
+
def write_cell_value(value = '') # :nodoc:
|
2047
2231
|
return write_cell_formula('=NA()') if !value.nil? && value.is_a?(Float) && value.nan?
|
2048
2232
|
|
2049
2233
|
value ||= ''
|
@@ -2054,24 +2238,24 @@ module Writexlsx
|
|
2054
2238
|
#
|
2055
2239
|
# Write the cell formula <f> element.
|
2056
2240
|
#
|
2057
|
-
def write_cell_formula(formula = '')
|
2241
|
+
def write_cell_formula(formula = '') # :nodoc:
|
2058
2242
|
@writer.data_element('f', formula)
|
2059
2243
|
end
|
2060
2244
|
|
2061
2245
|
#
|
2062
2246
|
# Write the cell array formula <f> element.
|
2063
2247
|
#
|
2064
|
-
def write_cell_array_formula(formula, range)
|
2248
|
+
def write_cell_array_formula(formula, range) # :nodoc:
|
2065
2249
|
@writer.data_element(
|
2066
2250
|
'f', formula,
|
2067
2251
|
[
|
2068
|
-
[
|
2252
|
+
%w[t array],
|
2069
2253
|
['ref', range]
|
2070
2254
|
]
|
2071
2255
|
)
|
2072
2256
|
end
|
2073
2257
|
|
2074
|
-
def date_1904?
|
2258
|
+
def date_1904? # :nodoc:
|
2075
2259
|
@workbook.date_1904?
|
2076
2260
|
end
|
2077
2261
|
|
@@ -2083,9 +2267,9 @@ module Writexlsx
|
|
2083
2267
|
# Convert from an Excel internal colour index to a XML style #RRGGBB index
|
2084
2268
|
# based on the default or user defined values in the Workbook palette.
|
2085
2269
|
#
|
2086
|
-
def palette_color(index)
|
2270
|
+
def palette_color(index) # :nodoc:
|
2087
2271
|
if index.to_s =~ /^#([0-9A-F]{6})$/i
|
2088
|
-
"FF#{
|
2272
|
+
"FF#{::Regexp.last_match(1).upcase}"
|
2089
2273
|
else
|
2090
2274
|
"FF#{super(index)}"
|
2091
2275
|
end
|
@@ -2125,7 +2309,7 @@ module Writexlsx
|
|
2125
2309
|
# The VML o:idmap data id contains a comma separated range when there is
|
2126
2310
|
# more than one 1024 block of comments, like this: data="1,2".
|
2127
2311
|
data = "#{vml_data_id}"
|
2128
|
-
(1
|
2312
|
+
(1..num_comments_block).each do |i|
|
2129
2313
|
data += ",#{vml_data_id + i}"
|
2130
2314
|
end
|
2131
2315
|
@vml_data_id = data
|
@@ -2183,11 +2367,7 @@ module Writexlsx
|
|
2183
2367
|
# set the vba name for the worksheet
|
2184
2368
|
#
|
2185
2369
|
def set_vba_name(vba_codename = nil)
|
2186
|
-
|
2187
|
-
@vba_codename = vba_codename
|
2188
|
-
else
|
2189
|
-
@vba_codename = @name
|
2190
|
-
end
|
2370
|
+
@vba_codename = vba_codename || @name
|
2191
2371
|
end
|
2192
2372
|
|
2193
2373
|
#
|
@@ -2195,33 +2375,29 @@ module Writexlsx
|
|
2195
2375
|
#
|
2196
2376
|
def ignore_errors(ignores)
|
2197
2377
|
# List of valid input parameters.
|
2198
|
-
valid_parameter_keys = [
|
2199
|
-
|
2200
|
-
|
2201
|
-
|
2202
|
-
|
2203
|
-
|
2204
|
-
|
2205
|
-
|
2206
|
-
|
2207
|
-
|
2378
|
+
valid_parameter_keys = %i[
|
2379
|
+
number_stored_as_text
|
2380
|
+
eval_error
|
2381
|
+
formula_differs
|
2382
|
+
formula_range
|
2383
|
+
formula_unlocked
|
2384
|
+
empty_cell_reference
|
2385
|
+
list_data_validation
|
2386
|
+
calculated_column
|
2387
|
+
two_digit_text_year
|
2208
2388
|
]
|
2209
2389
|
|
2210
|
-
unless (ignores.keys - valid_parameter_keys).empty?
|
2211
|
-
raise "Unknown parameter '#{ignores.key - valid_parameter_keys}' in ignore_errors()."
|
2212
|
-
end
|
2390
|
+
raise "Unknown parameter '#{ignores.key - valid_parameter_keys}' in ignore_errors()." unless (ignores.keys - valid_parameter_keys).empty?
|
2213
2391
|
|
2214
2392
|
@ignore_errors = ignores
|
2215
2393
|
end
|
2216
2394
|
|
2217
|
-
def write_ext(url)
|
2395
|
+
def write_ext(url, &block)
|
2218
2396
|
attributes = [
|
2219
2397
|
['xmlns:x14', "#{OFFICE_URL}spreadsheetml/2009/9/main"],
|
2220
2398
|
['uri', url]
|
2221
2399
|
]
|
2222
|
-
@writer.tag_elements('ext', attributes)
|
2223
|
-
yield
|
2224
|
-
end
|
2400
|
+
@writer.tag_elements('ext', attributes, &block)
|
2225
2401
|
end
|
2226
2402
|
|
2227
2403
|
def write_sparkline_groups
|
@@ -2279,11 +2455,7 @@ module Writexlsx
|
|
2279
2455
|
|
2280
2456
|
def cell_format_of_rich_string(rich_strings)
|
2281
2457
|
# If the last arg is a format we use it as the cell format.
|
2282
|
-
if rich_strings[-1].respond_to?(:xf_index)
|
2283
|
-
rich_strings.pop
|
2284
|
-
else
|
2285
|
-
nil
|
2286
|
-
end
|
2458
|
+
rich_strings.pop if rich_strings[-1].respond_to?(:xf_index)
|
2287
2459
|
end
|
2288
2460
|
|
2289
2461
|
#
|
@@ -2310,12 +2482,12 @@ module Writexlsx
|
|
2310
2482
|
last = 'format'
|
2311
2483
|
else
|
2312
2484
|
# Token is a string.
|
2313
|
-
if last
|
2314
|
-
# If previous token wasn't a format add one before the string.
|
2315
|
-
fragments << default << token
|
2316
|
-
else
|
2485
|
+
if last == 'format'
|
2317
2486
|
# If previous token was a format just add the string.
|
2318
2487
|
fragments << token
|
2488
|
+
else
|
2489
|
+
# If previous token wasn't a format add one before the string.
|
2490
|
+
fragments << default << token
|
2319
2491
|
end
|
2320
2492
|
|
2321
2493
|
length += token.size # Keep track of actual string length.
|
@@ -2332,7 +2504,7 @@ module Writexlsx
|
|
2332
2504
|
writer = Package::XMLWriterSimple.new
|
2333
2505
|
|
2334
2506
|
# If the first token is a string start the <r> element.
|
2335
|
-
writer.start_tag('r')
|
2507
|
+
writer.start_tag('r') unless fragments[0].respond_to?(:xf_index)
|
2336
2508
|
|
2337
2509
|
# Write the XML elements for the format string fragments.
|
2338
2510
|
fragments.each do |token|
|
@@ -2354,9 +2526,10 @@ module Writexlsx
|
|
2354
2526
|
|
2355
2527
|
# Pad out the rest of the area with formatted blank cells.
|
2356
2528
|
def write_formatted_blank_to_area(row_first, row_last, col_first, col_last, format)
|
2357
|
-
(row_first
|
2358
|
-
(col_first
|
2529
|
+
(row_first..row_last).each do |row|
|
2530
|
+
(col_first..col_last).each do |col|
|
2359
2531
|
next if row == row_first && col == col_first
|
2532
|
+
|
2360
2533
|
write_blank(row, col, format)
|
2361
2534
|
end
|
2362
2535
|
end
|
@@ -2367,13 +2540,13 @@ module Writexlsx
|
|
2367
2540
|
# whitespace groups. The only tricky part is to extract string tokens that
|
2368
2541
|
# contain whitespace and/or quoted double quotes (Excel's escaped quotes).
|
2369
2542
|
#
|
2370
|
-
def extract_filter_tokens(expression = nil)
|
2543
|
+
def extract_filter_tokens(expression = nil) # :nodoc:
|
2371
2544
|
return [] unless expression
|
2372
2545
|
|
2373
2546
|
tokens = []
|
2374
2547
|
str = expression
|
2375
2548
|
while str =~ /"(?:[^"]|"")*"|\S+/
|
2376
|
-
tokens <<
|
2549
|
+
tokens << ::Regexp.last_match(0)
|
2377
2550
|
str = $~.post_match
|
2378
2551
|
end
|
2379
2552
|
|
@@ -2398,11 +2571,11 @@ module Writexlsx
|
|
2398
2571
|
# Converts the tokens of a possibly conditional expression into 1 or 2
|
2399
2572
|
# sub expressions for further parsing.
|
2400
2573
|
#
|
2401
|
-
def parse_filter_expression(expression, tokens)
|
2574
|
+
def parse_filter_expression(expression, tokens) # :nodoc:
|
2402
2575
|
# The number of tokens will be either 3 (for 1 expression)
|
2403
2576
|
# or 7 (for 2 expressions).
|
2404
2577
|
#
|
2405
|
-
if
|
2578
|
+
if tokens.size == 7
|
2406
2579
|
conditional = tokens[3]
|
2407
2580
|
if conditional =~ /^(and|&&)$/
|
2408
2581
|
conditional = 0
|
@@ -2410,7 +2583,7 @@ module Writexlsx
|
|
2410
2583
|
conditional = 1
|
2411
2584
|
else
|
2412
2585
|
raise "Token '#{conditional}' is not a valid conditional " +
|
2413
|
-
|
2586
|
+
"in filter expression '#{expression}'"
|
2414
2587
|
end
|
2415
2588
|
expression_1 = parse_filter_tokens(expression, tokens[0..2])
|
2416
2589
|
expression_2 = parse_filter_tokens(expression, tokens[4..6])
|
@@ -2423,7 +2596,7 @@ module Writexlsx
|
|
2423
2596
|
#
|
2424
2597
|
# Parse the 3 tokens of a filter expression and return the operator and token.
|
2425
2598
|
#
|
2426
|
-
def parse_filter_tokens(expression, tokens)
|
2599
|
+
def parse_filter_tokens(expression, tokens) # :nodoc:
|
2427
2600
|
operators = {
|
2428
2601
|
'==' => 2,
|
2429
2602
|
'=' => 2,
|
@@ -2438,7 +2611,7 @@ module Writexlsx
|
|
2438
2611
|
'<' => 1,
|
2439
2612
|
'<=' => 3,
|
2440
2613
|
'>' => 4,
|
2441
|
-
'>=' => 6
|
2614
|
+
'>=' => 6
|
2442
2615
|
}
|
2443
2616
|
|
2444
2617
|
operator = operators[tokens[1]]
|
@@ -2447,40 +2620,38 @@ module Writexlsx
|
|
2447
2620
|
# Special handling of "Top" filter expressions.
|
2448
2621
|
if tokens[0] =~ /^top|bottom$/i
|
2449
2622
|
value = tokens[1]
|
2450
|
-
if
|
2623
|
+
if value.to_s =~ /\D/ or value.to_i < 1 or value.to_i > 500
|
2451
2624
|
raise "The value '#{value}' in expression '#{expression}' " +
|
2452
|
-
|
2625
|
+
"must be in the range 1 to 500"
|
2453
2626
|
end
|
2454
2627
|
token.downcase!
|
2455
|
-
if
|
2628
|
+
if token != 'items' and token != '%'
|
2456
2629
|
raise "The type '#{token}' in expression '#{expression}' " +
|
2457
|
-
|
2630
|
+
"must be either 'items' or '%'"
|
2458
2631
|
end
|
2459
2632
|
|
2460
|
-
if
|
2461
|
-
|
2462
|
-
|
2463
|
-
|
2464
|
-
|
2633
|
+
operator = if tokens[0] =~ /^top$/i
|
2634
|
+
30
|
2635
|
+
else
|
2636
|
+
32
|
2637
|
+
end
|
2465
2638
|
|
2466
|
-
if
|
2467
|
-
operator += 1
|
2468
|
-
end
|
2639
|
+
operator += 1 if tokens[2] == '%'
|
2469
2640
|
|
2470
2641
|
token = value
|
2471
2642
|
end
|
2472
2643
|
|
2473
|
-
if
|
2644
|
+
if !operator and tokens[0]
|
2474
2645
|
raise "Token '#{tokens[1]}' is not a valid operator " +
|
2475
|
-
|
2646
|
+
"in filter expression '#{expression}'"
|
2476
2647
|
end
|
2477
2648
|
|
2478
2649
|
# Special handling for Blanks/NonBlanks.
|
2479
|
-
if
|
2650
|
+
if token.to_s =~ /^blanks|nonblanks$/i
|
2480
2651
|
# Only allow Equals or NotEqual in this context.
|
2481
|
-
if
|
2652
|
+
if operator != 2 and operator != 5
|
2482
2653
|
raise "The operator '#{tokens[1]}' in expression '#{expression}' " +
|
2483
|
-
|
2654
|
+
"is not valid in relation to Blanks/NonBlanks'"
|
2484
2655
|
end
|
2485
2656
|
|
2486
2657
|
token.downcase!
|
@@ -2488,25 +2659,19 @@ module Writexlsx
|
|
2488
2659
|
# The operator should always be 2 (=) to flag a "simple" equality in
|
2489
2660
|
# the binary record. Therefore we convert <> to =.
|
2490
2661
|
if token == 'blanks'
|
2491
|
-
if operator == 5
|
2492
|
-
|
2493
|
-
|
2662
|
+
token = ' ' if operator == 5
|
2663
|
+
elsif operator == 5
|
2664
|
+
operator = 2
|
2665
|
+
token = 'blanks'
|
2494
2666
|
else
|
2495
|
-
|
2496
|
-
|
2497
|
-
token = 'blanks'
|
2498
|
-
else
|
2499
|
-
operator = 5
|
2500
|
-
token = ' '
|
2501
|
-
end
|
2667
|
+
operator = 5
|
2668
|
+
token = ' '
|
2502
2669
|
end
|
2503
2670
|
end
|
2504
2671
|
|
2505
2672
|
# if the string token contains an Excel match character then change the
|
2506
2673
|
# operator type to indicate a non "simple" equality.
|
2507
|
-
if
|
2508
|
-
operator = 22
|
2509
|
-
end
|
2674
|
+
operator = 22 if operator == 2 and token.to_s =~ /[*?]/
|
2510
2675
|
|
2511
2676
|
[operator, token]
|
2512
2677
|
end
|
@@ -2518,7 +2683,7 @@ module Writexlsx
|
|
2518
2683
|
# 2. Sorts the list.
|
2519
2684
|
# 3. Removes 0 from the list if present.
|
2520
2685
|
#
|
2521
|
-
def sort_pagebreaks(*args)
|
2686
|
+
def sort_pagebreaks(*args) # :nodoc:
|
2522
2687
|
return [] if args.empty?
|
2523
2688
|
|
2524
2689
|
breaks = args.uniq.sort
|
@@ -2538,17 +2703,17 @@ module Writexlsx
|
|
2538
2703
|
# Calculate the vertices that define the position of a graphical object within
|
2539
2704
|
# the worksheet in EMUs.
|
2540
2705
|
#
|
2541
|
-
def position_object_emus(col_start, row_start, x1, y1, width, height, anchor = nil)
|
2706
|
+
def position_object_emus(col_start, row_start, x1, y1, width, height, anchor = nil) # :nodoc:
|
2542
2707
|
col_start, row_start, x1, y1, col_end, row_end, x2, y2, x_abs, y_abs =
|
2543
2708
|
position_object_pixels(col_start, row_start, x1, y1, width, height, anchor)
|
2544
2709
|
|
2545
2710
|
# Convert the pixel values to EMUs. See above.
|
2546
|
-
x1 = (0.5 + 9_525 * x1).to_i
|
2547
|
-
y1 = (0.5 + 9_525 * y1).to_i
|
2548
|
-
x2 = (0.5 + 9_525 * x2).to_i
|
2549
|
-
y2 = (0.5 + 9_525 * y2).to_i
|
2550
|
-
x_abs = (0.5 + 9_525 * x_abs).to_i
|
2551
|
-
y_abs = (0.5 + 9_525 * y_abs).to_i
|
2711
|
+
x1 = (0.5 + (9_525 * x1)).to_i
|
2712
|
+
y1 = (0.5 + (9_525 * y1)).to_i
|
2713
|
+
x2 = (0.5 + (9_525 * x2)).to_i
|
2714
|
+
y2 = (0.5 + (9_525 * y2)).to_i
|
2715
|
+
x_abs = (0.5 + (9_525 * x_abs)).to_i
|
2716
|
+
y_abs = (0.5 + (9_525 * y_abs)).to_i
|
2552
2717
|
|
2553
2718
|
[col_start, row_start, x1, y1, col_end, row_end, x2, y2, x_abs, y_abs]
|
2554
2719
|
end
|
@@ -2559,19 +2724,19 @@ module Writexlsx
|
|
2559
2724
|
# we use the default value. A hidden column is treated as having a width of
|
2560
2725
|
# zero unless it has the special "object_position" of 4 (size with cells).
|
2561
2726
|
#
|
2562
|
-
def size_col(col, anchor = 0)
|
2727
|
+
def size_col(col, anchor = 0) # :nodoc:
|
2563
2728
|
# Look up the cell value to see if it has been changed.
|
2564
2729
|
if @col_sizes[col]
|
2565
2730
|
width, hidden = @col_sizes[col]
|
2566
2731
|
|
2567
2732
|
# Convert to pixels.
|
2568
|
-
if hidden == 1 && anchor != 4
|
2569
|
-
|
2570
|
-
|
2571
|
-
|
2572
|
-
|
2573
|
-
|
2574
|
-
|
2733
|
+
pixels = if hidden == 1 && anchor != 4
|
2734
|
+
0
|
2735
|
+
elsif width < 1
|
2736
|
+
((width * (MAX_DIGIT_WIDTH + PADDING)) + 0.5).to_i
|
2737
|
+
else
|
2738
|
+
((width * MAX_DIGIT_WIDTH) + 0.5).to_i + PADDING
|
2739
|
+
end
|
2575
2740
|
else
|
2576
2741
|
pixels = @default_col_pixels
|
2577
2742
|
end
|
@@ -2584,16 +2749,16 @@ module Writexlsx
|
|
2584
2749
|
# treated as having a height of zero unless it has the special
|
2585
2750
|
# "object_position" of 4 (size with cells).
|
2586
2751
|
#
|
2587
|
-
def size_row(row, anchor = 0)
|
2752
|
+
def size_row(row, anchor = 0) # :nodoc:
|
2588
2753
|
# Look up the cell value to see if it has been changed
|
2589
2754
|
if @row_sizes[row]
|
2590
2755
|
height, hidden = @row_sizes[row]
|
2591
2756
|
|
2592
|
-
if hidden == 1 && anchor != 4
|
2593
|
-
|
2594
|
-
|
2595
|
-
|
2596
|
-
|
2757
|
+
pixels = if hidden == 1 && anchor != 4
|
2758
|
+
0
|
2759
|
+
else
|
2760
|
+
(4 / 3.0 * height).to_i
|
2761
|
+
end
|
2597
2762
|
else
|
2598
2763
|
pixels = (4 / 3.0 * @default_row_height).to_i
|
2599
2764
|
end
|
@@ -2608,12 +2773,10 @@ module Writexlsx
|
|
2608
2773
|
padding = 5.0
|
2609
2774
|
|
2610
2775
|
if pixels <= 12
|
2611
|
-
|
2776
|
+
pixels / (max_digit_width + padding)
|
2612
2777
|
else
|
2613
|
-
|
2778
|
+
(pixels - padding) / max_digit_width
|
2614
2779
|
end
|
2615
|
-
|
2616
|
-
width
|
2617
2780
|
end
|
2618
2781
|
|
2619
2782
|
#
|
@@ -2621,19 +2784,19 @@ module Writexlsx
|
|
2621
2784
|
#
|
2622
2785
|
def pixels_to_height(pixels)
|
2623
2786
|
height = 0.75 * pixels
|
2624
|
-
height = height.to_i if (
|
2787
|
+
height = height.to_i if (height - height.to_i).abs < 0.1
|
2625
2788
|
height
|
2626
2789
|
end
|
2627
2790
|
|
2628
2791
|
#
|
2629
2792
|
# Set up image/drawings.
|
2630
2793
|
#
|
2631
|
-
def prepare_image(index, image_id, drawing_id, width, height, name, image_type, x_dpi = 96, y_dpi = 96, md5 = nil)
|
2794
|
+
def prepare_image(index, image_id, drawing_id, width, height, name, image_type, x_dpi = 96, y_dpi = 96, md5 = nil) # :nodoc:
|
2632
2795
|
x_dpi ||= 96
|
2633
2796
|
y_dpi ||= 96
|
2634
2797
|
drawing_type = 2
|
2635
2798
|
|
2636
|
-
row, col,
|
2799
|
+
row, col, _image, x_offset, y_offset,
|
2637
2800
|
x_scale, y_scale, url, tip, anchor, description, decorative = @images[index]
|
2638
2801
|
|
2639
2802
|
width *= x_scale
|
@@ -2649,29 +2812,25 @@ module Writexlsx
|
|
2649
2812
|
height = (0.5 + (height * 9_525)).to_i
|
2650
2813
|
|
2651
2814
|
# Create a Drawing object to use with worksheet unless one already exists.
|
2652
|
-
drawing = Drawing.new(drawing_type, dimensions, width, height,
|
2653
|
-
if
|
2815
|
+
drawing = Drawing.new(drawing_type, dimensions, width, height, nil, anchor, 0, 0, tip, name, description, decorative)
|
2816
|
+
if drawings?
|
2817
|
+
drawings = @drawings
|
2818
|
+
else
|
2654
2819
|
drawings = Drawings.new
|
2655
2820
|
drawings.embedded = 1
|
2656
2821
|
|
2657
2822
|
@drawings = drawings
|
2658
2823
|
|
2659
2824
|
@external_drawing_links << ['/drawing', "../drawings/drawing#{drawing_id}.xml"]
|
2660
|
-
else
|
2661
|
-
drawings = @drawings
|
2662
2825
|
end
|
2663
2826
|
drawings.add_drawing_object(drawing)
|
2664
2827
|
|
2665
|
-
|
2666
|
-
drawing.description = description
|
2667
|
-
end
|
2828
|
+
drawing.description = name unless description
|
2668
2829
|
|
2669
2830
|
if url
|
2670
2831
|
rel_type = '/hyperlink'
|
2671
2832
|
target_mode = 'External'
|
2672
|
-
if url =~ %r
|
2673
|
-
target = escape_url(url)
|
2674
|
-
end
|
2833
|
+
target = escape_url(url) if url =~ %r{^[fh]tt?ps?://} || url =~ /^mailto:/
|
2675
2834
|
if url =~ /^external:/
|
2676
2835
|
target = escape_url(url.sub(/^external:/, ''))
|
2677
2836
|
|
@@ -2679,11 +2838,11 @@ module Writexlsx
|
|
2679
2838
|
target = target.gsub(/#/, '%23')
|
2680
2839
|
|
2681
2840
|
# Prefix absolute paths (not relative) with file:///
|
2682
|
-
if target =~ /^\w:/ || target =~ /^\\\\/
|
2683
|
-
|
2684
|
-
|
2685
|
-
|
2686
|
-
|
2841
|
+
target = if target =~ /^\w:/ || target =~ /^\\\\/
|
2842
|
+
"file:///#{target}"
|
2843
|
+
else
|
2844
|
+
target.gsub(/\\/, '/')
|
2845
|
+
end
|
2687
2846
|
end
|
2688
2847
|
|
2689
2848
|
if url =~ /^internal:/
|
@@ -2697,15 +2856,11 @@ Ignoring URL #{target} where link or anchor > 255 characters since it exceeds Ex
|
|
2697
2856
|
EOS
|
2698
2857
|
end
|
2699
2858
|
|
2700
|
-
if target && !@drawing_rels[url]
|
2701
|
-
@drawing_links << [rel_type, target, target_mode]
|
2702
|
-
end
|
2859
|
+
@drawing_links << [rel_type, target, target_mode] if target && !@drawing_rels[url]
|
2703
2860
|
drawing.url_rel_index = drawing_rel_index(url)
|
2704
2861
|
end
|
2705
2862
|
|
2706
|
-
|
2707
|
-
@drawing_links << ['/image', "../media/image#{image_id}.#{image_type}"]
|
2708
|
-
end
|
2863
|
+
@drawing_links << ['/image', "../media/image#{image_id}.#{image_type}"] unless @drawing_rels[md5]
|
2709
2864
|
drawing.rel_index = drawing_rel_index(md5)
|
2710
2865
|
end
|
2711
2866
|
public :prepare_image
|
@@ -2713,11 +2868,9 @@ EOS
|
|
2713
2868
|
def prepare_header_image(image_id, width, height, name, image_type, position, x_dpi, y_dpi, md5)
|
2714
2869
|
# Strip the extension from the filename.
|
2715
2870
|
body = name.dup
|
2716
|
-
body[/\.[
|
2871
|
+
body[/\.[^.]+$/, 0] = ''
|
2717
2872
|
|
2718
|
-
|
2719
|
-
@vml_drawing_links << ['/image', "../media/image#{image_id}.#{image_type}" ]
|
2720
|
-
end
|
2873
|
+
@vml_drawing_links << ['/image', "../media/image#{image_id}.#{image_type}"] unless @vml_drawing_rels[md5]
|
2721
2874
|
|
2722
2875
|
ref_id = get_vml_drawing_rel_index(md5)
|
2723
2876
|
@header_images_array << [width, height, body, position, x_dpi, y_dpi, ref_id]
|
@@ -2745,7 +2898,7 @@ EOS
|
|
2745
2898
|
|
2746
2899
|
#
|
2747
2900
|
# :call-seq:
|
2748
|
-
# insert_shape(row, col, shape [ , x, y, x_scale, y_scale ]
|
2901
|
+
# insert_shape(row, col, shape [ , x, y, x_scale, y_scale ])
|
2749
2902
|
#
|
2750
2903
|
# Insert a shape into the worksheet.
|
2751
2904
|
#
|
@@ -2753,9 +2906,7 @@ EOS
|
|
2753
2906
|
# Check for a cell reference in A1 notation and substitute row and column.
|
2754
2907
|
row_start, column_start, shape, x_offset, y_offset, x_scale, y_scale, anchor =
|
2755
2908
|
row_col_notation(args)
|
2756
|
-
if [row_start, column_start, shape].include?(nil)
|
2757
|
-
raise "Insufficient arguments in insert_shape()"
|
2758
|
-
end
|
2909
|
+
raise "Insufficient arguments in insert_shape()" if [row_start, column_start, shape].include?(nil)
|
2759
2910
|
|
2760
2911
|
shape.set_position(
|
2761
2912
|
row_start, column_start, x_offset, y_offset,
|
@@ -2778,14 +2929,14 @@ EOS
|
|
2778
2929
|
# Allow lookup of entry into shape array by shape ID.
|
2779
2930
|
@shape_hash[shape.id] = shape.element = @shapes.size
|
2780
2931
|
|
2781
|
-
if ptrue?(shape.stencil)
|
2782
|
-
|
2783
|
-
|
2784
|
-
|
2785
|
-
|
2786
|
-
|
2787
|
-
|
2788
|
-
|
2932
|
+
insert = if ptrue?(shape.stencil)
|
2933
|
+
# Insert a copy of the shape, not a reference so that the shape is
|
2934
|
+
# used as a stencil. Previously stamped copies don't get modified
|
2935
|
+
# if the stencil is modified.
|
2936
|
+
shape.dup
|
2937
|
+
else
|
2938
|
+
shape
|
2939
|
+
end
|
2789
2940
|
|
2790
2941
|
# For connectors change x/y coords based on location of connected shapes.
|
2791
2942
|
insert.auto_locate_connectors(@shapes, @shape_hash)
|
@@ -2818,7 +2969,7 @@ EOS
|
|
2818
2969
|
drawing_type = 3
|
2819
2970
|
drawing = Drawing.new(
|
2820
2971
|
drawing_type, shape.dimensions, shape.width_emu, shape.height_emu,
|
2821
|
-
shape
|
2972
|
+
shape, shape.anchor, drawing_rel_index, 0, shape.name, nil, 0
|
2822
2973
|
)
|
2823
2974
|
drawings.add_drawing_object(drawing)
|
2824
2975
|
end
|
@@ -2839,29 +2990,28 @@ EOS
|
|
2839
2990
|
button.font = { :_caption => caption }
|
2840
2991
|
|
2841
2992
|
# Set the macro name.
|
2842
|
-
if params[:macro]
|
2843
|
-
|
2844
|
-
|
2845
|
-
|
2846
|
-
|
2993
|
+
button.macro = if params[:macro]
|
2994
|
+
"[0]!#{params[:macro]}"
|
2995
|
+
else
|
2996
|
+
"[0]!Button#{button_number}_Click"
|
2997
|
+
end
|
2998
|
+
|
2999
|
+
# Set the alt text for the button.
|
3000
|
+
button.description = params[:description]
|
2847
3001
|
|
2848
3002
|
# Ensure that a width and height have been set.
|
2849
3003
|
default_width = @default_col_pixels
|
2850
3004
|
default_height = @default_row_pixels
|
2851
|
-
params[:width] = default_width
|
2852
|
-
params[:height] = default_height
|
3005
|
+
params[:width] = default_width unless params[:width]
|
3006
|
+
params[:height] = default_height unless params[:height]
|
2853
3007
|
|
2854
3008
|
# Set the x/y offsets.
|
2855
|
-
params[:x_offset] = 0
|
2856
|
-
params[:y_offset] = 0
|
3009
|
+
params[:x_offset] = 0 unless params[:x_offset]
|
3010
|
+
params[:y_offset] = 0 unless params[:y_offset]
|
2857
3011
|
|
2858
3012
|
# Scale the size of the button box if required.
|
2859
|
-
if params[:x_scale]
|
2860
|
-
|
2861
|
-
end
|
2862
|
-
if params[:y_scale]
|
2863
|
-
params[:height] = params[:height] * params[:y_scale]
|
2864
|
-
end
|
3013
|
+
params[:width] = params[:width] * params[:x_scale] if params[:x_scale]
|
3014
|
+
params[:height] = params[:height] * params[:y_scale] if params[:y_scale]
|
2865
3015
|
|
2866
3016
|
# Round the dimensions to the nearest pixel.
|
2867
3017
|
params[:width] = (0.5 + params[:width]).to_i
|
@@ -2891,7 +3041,7 @@ EOS
|
|
2891
3041
|
#
|
2892
3042
|
# Based on the algorithm provided by Daniel Rentz of OpenOffice.
|
2893
3043
|
#
|
2894
|
-
def encode_password(password)
|
3044
|
+
def encode_password(password) # :nodoc:
|
2895
3045
|
i = 0
|
2896
3046
|
chars = password.split(//)
|
2897
3047
|
count = chars.size
|
@@ -2900,12 +3050,12 @@ EOS
|
|
2900
3050
|
i += 1
|
2901
3051
|
char = char.ord << i
|
2902
3052
|
low_15 = char & 0x7fff
|
2903
|
-
high_15 = char & 0x7fff << 15
|
3053
|
+
high_15 = char & (0x7fff << 15)
|
2904
3054
|
high_15 = high_15 >> 15
|
2905
3055
|
char = low_15 | high_15
|
2906
3056
|
end
|
2907
3057
|
|
2908
|
-
encoded_password
|
3058
|
+
encoded_password = 0x0000
|
2909
3059
|
chars.each { |c| encoded_password ^= c }
|
2910
3060
|
encoded_password ^= count
|
2911
3061
|
encoded_password ^= 0xCE4B
|
@@ -2916,7 +3066,7 @@ EOS
|
|
2916
3066
|
#
|
2917
3067
|
# Write the <worksheet> element. This is the root element of Worksheet.
|
2918
3068
|
#
|
2919
|
-
def write_worksheet_attributes
|
3069
|
+
def write_worksheet_attributes # :nodoc:
|
2920
3070
|
schema = 'http://schemas.openxmlformats.org/'
|
2921
3071
|
attributes = [
|
2922
3072
|
['xmlns', "#{schema}spreadsheetml/2006/main"],
|
@@ -2934,7 +3084,7 @@ EOS
|
|
2934
3084
|
#
|
2935
3085
|
# Write the <sheetPr> element for Sheet level properties.
|
2936
3086
|
#
|
2937
|
-
def write_sheet_pr
|
3087
|
+
def write_sheet_pr # :nodoc:
|
2938
3088
|
return unless tab_outline_fit? || vba_codename? || filter_on?
|
2939
3089
|
|
2940
3090
|
attributes = []
|
@@ -2959,14 +3109,14 @@ EOS
|
|
2959
3109
|
#
|
2960
3110
|
# Write the <pageSetUpPr> element.
|
2961
3111
|
#
|
2962
|
-
def write_page_set_up_pr
|
2963
|
-
@writer.empty_tag('pageSetUpPr', [
|
3112
|
+
def write_page_set_up_pr # :nodoc:
|
3113
|
+
@writer.empty_tag('pageSetUpPr', [['fitToPage', 1]]) if fit_page?
|
2964
3114
|
end
|
2965
3115
|
|
2966
3116
|
# Write the <dimension> element. This specifies the range of cells in the
|
2967
3117
|
# worksheet. As a special case, empty spreadsheets use 'A1' as a range.
|
2968
3118
|
#
|
2969
|
-
def write_dimension
|
3119
|
+
def write_dimension # :nodoc:
|
2970
3120
|
if !@dim_rowmin && !@dim_colmin
|
2971
3121
|
# If the min dims are undefined then no dimensions have been set
|
2972
3122
|
# and we use the default 'A1'.
|
@@ -2992,16 +3142,17 @@ EOS
|
|
2992
3142
|
cell_2 = xl_rowcol_to_cell(@dim_rowmax, @dim_colmax)
|
2993
3143
|
ref = cell_1 + ':' + cell_2
|
2994
3144
|
end
|
2995
|
-
@writer.empty_tag('dimension', [
|
3145
|
+
@writer.empty_tag('dimension', [['ref', ref]])
|
2996
3146
|
end
|
3147
|
+
|
2997
3148
|
#
|
2998
3149
|
# Write the <sheetViews> element.
|
2999
3150
|
#
|
3000
|
-
def write_sheet_views
|
3151
|
+
def write_sheet_views # :nodoc:
|
3001
3152
|
@writer.tag_elements('sheetViews', []) { write_sheet_view }
|
3002
3153
|
end
|
3003
3154
|
|
3004
|
-
def write_sheet_view
|
3155
|
+
def write_sheet_view # :nodoc:
|
3005
3156
|
attributes = []
|
3006
3157
|
# Hide screen gridlines if required.
|
3007
3158
|
attributes << ['showGridLines', 0] unless @screen_gridlines
|
@@ -3023,7 +3174,10 @@ EOS
|
|
3023
3174
|
|
3024
3175
|
# Set the page view/layout mode if required.
|
3025
3176
|
# TODO. Add pageBreakPreview mode when requested.
|
3026
|
-
attributes << [
|
3177
|
+
attributes << %w[view pageLayout] if page_view?
|
3178
|
+
|
3179
|
+
# Set the first visible cell.
|
3180
|
+
attributes << ['topLeftCell', @top_left_cell] if ptrue?(@top_left_cell)
|
3027
3181
|
|
3028
3182
|
# Set the zoom level.
|
3029
3183
|
if @zoom != 100
|
@@ -3046,14 +3200,14 @@ EOS
|
|
3046
3200
|
#
|
3047
3201
|
# Write the <selection> elements.
|
3048
3202
|
#
|
3049
|
-
def write_selections
|
3203
|
+
def write_selections # :nodoc:
|
3050
3204
|
@selections.each { |selection| write_selection(*selection) }
|
3051
3205
|
end
|
3052
3206
|
|
3053
3207
|
#
|
3054
3208
|
# Write the <selection> element.
|
3055
3209
|
#
|
3056
|
-
def write_selection(pane, active_cell, sqref)
|
3210
|
+
def write_selection(pane, active_cell, sqref) # :nodoc:
|
3057
3211
|
attributes = []
|
3058
3212
|
attributes << ['pane', pane] if pane
|
3059
3213
|
attributes << ['activeCell', active_cell] if active_cell
|
@@ -3065,44 +3219,36 @@ EOS
|
|
3065
3219
|
#
|
3066
3220
|
# Write the <sheetFormatPr> element.
|
3067
3221
|
#
|
3068
|
-
def write_sheet_format_pr
|
3069
|
-
base_col_width = 10
|
3070
|
-
|
3222
|
+
def write_sheet_format_pr # :nodoc:
|
3071
3223
|
attributes = [
|
3072
3224
|
['defaultRowHeight', @default_row_height]
|
3073
3225
|
]
|
3074
|
-
if @default_row_height != @original_row_height
|
3075
|
-
attributes << ['customHeight', 1]
|
3076
|
-
end
|
3226
|
+
attributes << ['customHeight', 1] if @default_row_height != @original_row_height
|
3077
3227
|
|
3078
|
-
if ptrue?(@default_row_zeroed)
|
3079
|
-
attributes << ['zeroHeight', 1]
|
3080
|
-
end
|
3228
|
+
attributes << ['zeroHeight', 1] if ptrue?(@default_row_zeroed)
|
3081
3229
|
|
3082
3230
|
attributes << ['outlineLevelRow', @outline_row_level] if @outline_row_level > 0
|
3083
3231
|
attributes << ['outlineLevelCol', @outline_col_level] if @outline_col_level > 0
|
3084
|
-
if @excel_version == 2010
|
3085
|
-
attributes << ['x14ac:dyDescent', '0.25']
|
3086
|
-
end
|
3232
|
+
attributes << ['x14ac:dyDescent', '0.25'] if @excel_version == 2010
|
3087
3233
|
@writer.empty_tag('sheetFormatPr', attributes)
|
3088
3234
|
end
|
3089
3235
|
|
3090
3236
|
#
|
3091
3237
|
# Write the <cols> element and <col> sub elements.
|
3092
3238
|
#
|
3093
|
-
def write_cols
|
3239
|
+
def write_cols # :nodoc:
|
3094
3240
|
# Exit unless some column have been formatted.
|
3095
3241
|
return if @colinfo.empty?
|
3096
3242
|
|
3097
3243
|
@writer.tag_elements('cols') do
|
3098
|
-
@colinfo.keys.sort.each {|col| write_col_info(@colinfo[col]) }
|
3244
|
+
@colinfo.keys.sort.each { |col| write_col_info(@colinfo[col]) }
|
3099
3245
|
end
|
3100
3246
|
end
|
3101
3247
|
|
3102
3248
|
#
|
3103
3249
|
# Write the <col> element.
|
3104
3250
|
#
|
3105
|
-
def write_col_info(args)
|
3251
|
+
def write_col_info(args) # :nodoc:
|
3106
3252
|
@writer.empty_tag('col', col_info_attributes(args))
|
3107
3253
|
end
|
3108
3254
|
|
@@ -3120,16 +3266,14 @@ EOS
|
|
3120
3266
|
custom_width = false if width.nil? && hidden == 0
|
3121
3267
|
custom_width = false if width == 8.43
|
3122
3268
|
|
3123
|
-
width
|
3269
|
+
width ||= hidden == 0 ? @default_col_width : 0
|
3124
3270
|
|
3125
3271
|
# Convert column width from user units to character width.
|
3126
|
-
if width && width < 1
|
3127
|
-
|
3128
|
-
|
3129
|
-
|
3130
|
-
|
3131
|
-
(((width * MAX_DIGIT_WIDTH + 0.5).to_i + PADDING).to_i/ MAX_DIGIT_WIDTH.to_f * 256).to_i / 256.0
|
3132
|
-
end
|
3272
|
+
width = if width && width < 1
|
3273
|
+
(((width * (MAX_DIGIT_WIDTH + PADDING)) + 0.5).to_i / MAX_DIGIT_WIDTH.to_f * 256).to_i / 256.0
|
3274
|
+
else
|
3275
|
+
((((width * MAX_DIGIT_WIDTH) + 0.5).to_i + PADDING).to_i / MAX_DIGIT_WIDTH.to_f * 256).to_i / 256.0
|
3276
|
+
end
|
3133
3277
|
width = width.to_i if width - width.to_i == 0
|
3134
3278
|
|
3135
3279
|
attributes = [
|
@@ -3149,22 +3293,22 @@ EOS
|
|
3149
3293
|
#
|
3150
3294
|
# Write the <sheetData> element.
|
3151
3295
|
#
|
3152
|
-
def write_sheet_data
|
3153
|
-
if
|
3296
|
+
def write_sheet_data # :nodoc:
|
3297
|
+
if @dim_rowmin
|
3298
|
+
@writer.tag_elements('sheetData') { write_rows }
|
3299
|
+
else
|
3154
3300
|
# If the dimensions aren't defined then there is no data to write.
|
3155
3301
|
@writer.empty_tag('sheetData')
|
3156
|
-
else
|
3157
|
-
@writer.tag_elements('sheetData') { write_rows }
|
3158
3302
|
end
|
3159
3303
|
end
|
3160
3304
|
|
3161
3305
|
#
|
3162
3306
|
# Write out the worksheet data as a series of rows and cells.
|
3163
3307
|
#
|
3164
|
-
def write_rows
|
3308
|
+
def write_rows # :nodoc:
|
3165
3309
|
calculate_spans
|
3166
3310
|
|
3167
|
-
(@dim_rowmin
|
3311
|
+
(@dim_rowmin..@dim_rowmax).each do |row_num|
|
3168
3312
|
# Skip row if it doesn't contain row formatting or cell data.
|
3169
3313
|
next if not_contain_formatting_or_data?(row_num)
|
3170
3314
|
|
@@ -3177,8 +3321,6 @@ EOS
|
|
3177
3321
|
write_row_element(row_num, span, *args) do
|
3178
3322
|
write_cell_column_dimension(row_num)
|
3179
3323
|
end
|
3180
|
-
elsif @comments[row_num]
|
3181
|
-
write_empty_row(row_num, span, *(@set_rows[row_num]))
|
3182
3324
|
else
|
3183
3325
|
# Row attributes only.
|
3184
3326
|
write_empty_row(row_num, span, *(@set_rows[row_num]))
|
@@ -3191,29 +3333,27 @@ EOS
|
|
3191
3333
|
end
|
3192
3334
|
|
3193
3335
|
def write_cell_column_dimension(row_num) # :nodoc:
|
3194
|
-
(@dim_colmin
|
3195
|
-
@cell_data_table[row_num][col_num].write_cell if @cell_data_table[row_num][col_num]
|
3336
|
+
(@dim_colmin..@dim_colmax).each do |col_num|
|
3337
|
+
@cell_data_table[row_num][col_num].write_cell(self, row_num, col_num) if @cell_data_table[row_num][col_num]
|
3196
3338
|
end
|
3197
3339
|
end
|
3198
3340
|
|
3199
3341
|
#
|
3200
3342
|
# Write the <row> element.
|
3201
3343
|
#
|
3202
|
-
def write_row_element(*args) # :nodoc:
|
3203
|
-
@writer.tag_elements('row', row_attributes(args))
|
3204
|
-
yield
|
3205
|
-
end
|
3344
|
+
def write_row_element(*args, &block) # :nodoc:
|
3345
|
+
@writer.tag_elements('row', row_attributes(args), &block)
|
3206
3346
|
end
|
3207
3347
|
|
3208
3348
|
#
|
3209
3349
|
# Write and empty <row> element, i.e., attributes only, no cell data.
|
3210
3350
|
#
|
3211
|
-
def write_empty_row(*args)
|
3351
|
+
def write_empty_row(*args) # :nodoc:
|
3212
3352
|
@writer.empty_tag('row', row_attributes(args))
|
3213
3353
|
end
|
3214
3354
|
|
3215
3355
|
def row_attributes(args)
|
3216
|
-
r, spans, height, format, hidden, level, collapsed,
|
3356
|
+
r, spans, height, format, hidden, level, collapsed, _empty_row = args
|
3217
3357
|
height ||= @default_row_height
|
3218
3358
|
hidden ||= 0
|
3219
3359
|
level ||= 0
|
@@ -3230,36 +3370,34 @@ EOS
|
|
3230
3370
|
attributes << ['outlineLevel', level] if ptrue?(level)
|
3231
3371
|
attributes << ['collapsed', 1] if ptrue?(collapsed)
|
3232
3372
|
|
3233
|
-
if @excel_version == 2010
|
3234
|
-
attributes << ['x14ac:dyDescent', '0.25']
|
3235
|
-
end
|
3373
|
+
attributes << ['x14ac:dyDescent', '0.25'] if @excel_version == 2010
|
3236
3374
|
attributes
|
3237
3375
|
end
|
3238
3376
|
|
3239
3377
|
#
|
3240
3378
|
# Write the frozen or split <pane> elements.
|
3241
3379
|
#
|
3242
|
-
def write_panes
|
3380
|
+
def write_panes # :nodoc:
|
3243
3381
|
return if @panes.empty?
|
3244
3382
|
|
3245
3383
|
if @panes[4] == 2
|
3246
3384
|
write_split_panes
|
3247
3385
|
else
|
3248
|
-
write_freeze_panes(
|
3386
|
+
write_freeze_panes(*@panes)
|
3249
3387
|
end
|
3250
3388
|
end
|
3251
3389
|
|
3252
3390
|
#
|
3253
3391
|
# Write the <pane> element for freeze panes.
|
3254
3392
|
#
|
3255
|
-
def write_freeze_panes(row, col, top_row, left_col, type)
|
3393
|
+
def write_freeze_panes(row, col, top_row, left_col, type) # :nodoc:
|
3256
3394
|
y_split = row
|
3257
3395
|
x_split = col
|
3258
3396
|
top_left_cell = xl_rowcol_to_cell(top_row, left_col)
|
3259
3397
|
|
3260
3398
|
# Move user cell selection to the panes.
|
3261
3399
|
unless @selections.empty?
|
3262
|
-
|
3400
|
+
_dummy, active_cell, sqref = @selections[0]
|
3263
3401
|
@selections = []
|
3264
3402
|
end
|
3265
3403
|
|
@@ -3268,13 +3406,13 @@ EOS
|
|
3268
3406
|
active_pane = set_active_pane_and_cell_selections(row, col, row, col, active_cell, sqref)
|
3269
3407
|
|
3270
3408
|
# Set the pane type.
|
3271
|
-
if type == 0
|
3272
|
-
|
3273
|
-
|
3274
|
-
|
3275
|
-
|
3276
|
-
|
3277
|
-
|
3409
|
+
state = if type == 0
|
3410
|
+
'frozen'
|
3411
|
+
elsif type == 1
|
3412
|
+
'frozenSplit'
|
3413
|
+
else
|
3414
|
+
'split'
|
3415
|
+
end
|
3278
3416
|
|
3279
3417
|
attributes = []
|
3280
3418
|
attributes << ['xSplit', x_split] if x_split > 0
|
@@ -3291,35 +3429,35 @@ EOS
|
|
3291
3429
|
#
|
3292
3430
|
# See also, implementers note for split_panes().
|
3293
3431
|
#
|
3294
|
-
def write_split_panes
|
3432
|
+
def write_split_panes # :nodoc:
|
3295
3433
|
row, col, top_row, left_col = @panes
|
3296
3434
|
has_selection = false
|
3297
3435
|
y_split = row
|
3298
3436
|
x_split = col
|
3299
3437
|
|
3300
3438
|
# Move user cell selection to the panes.
|
3301
|
-
|
3302
|
-
|
3439
|
+
unless @selections.empty?
|
3440
|
+
_dummy, active_cell, sqref = @selections[0]
|
3303
3441
|
@selections = []
|
3304
3442
|
has_selection = true
|
3305
3443
|
end
|
3306
3444
|
|
3307
3445
|
# Convert the row and col to 1/20 twip units with padding.
|
3308
|
-
y_split = (20 * y_split + 300).to_i if y_split > 0
|
3446
|
+
y_split = ((20 * y_split) + 300).to_i if y_split > 0
|
3309
3447
|
x_split = calculate_x_split_width(x_split) if x_split > 0
|
3310
3448
|
|
3311
3449
|
# For non-explicit topLeft definitions, estimate the cell offset based
|
3312
3450
|
# on the pixels dimensions. This is only a workaround and doesn't take
|
3313
3451
|
# adjusted cell dimensions into account.
|
3314
3452
|
if top_row == row && left_col == col
|
3315
|
-
top_row = (0.5 + (y_split - 300) / 20 / 15).to_i
|
3316
|
-
left_col = (0.5 + (x_split - 390) / 20 / 3 * 4 / 64).to_i
|
3453
|
+
top_row = (0.5 + ((y_split - 300) / 20 / 15)).to_i
|
3454
|
+
left_col = (0.5 + ((x_split - 390) / 20 / 3 * 4 / 64)).to_i
|
3317
3455
|
end
|
3318
3456
|
|
3319
3457
|
top_left_cell = xl_rowcol_to_cell(top_row, left_col)
|
3320
3458
|
|
3321
3459
|
# If there is no selection set the active cell to the top left cell.
|
3322
|
-
|
3460
|
+
unless has_selection
|
3323
3461
|
active_cell = top_left_cell
|
3324
3462
|
sqref = top_left_cell
|
3325
3463
|
end
|
@@ -3339,13 +3477,13 @@ EOS
|
|
3339
3477
|
#
|
3340
3478
|
# Convert column width from user units to pane split width.
|
3341
3479
|
#
|
3342
|
-
def calculate_x_split_width(width)
|
3480
|
+
def calculate_x_split_width(width) # :nodoc:
|
3343
3481
|
# Convert to pixels.
|
3344
|
-
if width < 1
|
3345
|
-
|
3346
|
-
|
3347
|
-
|
3348
|
-
|
3482
|
+
pixels = if width < 1
|
3483
|
+
int((width * 12) + 0.5)
|
3484
|
+
else
|
3485
|
+
((width * MAX_DIGIT_WIDTH) + 0.5).to_i + PADDING
|
3486
|
+
end
|
3349
3487
|
|
3350
3488
|
# Convert to points.
|
3351
3489
|
points = pixels * 3 / 4
|
@@ -3360,17 +3498,17 @@ EOS
|
|
3360
3498
|
#
|
3361
3499
|
# Write the <sheetCalcPr> element for the worksheet calculation properties.
|
3362
3500
|
#
|
3363
|
-
def write_sheet_calc_pr
|
3364
|
-
@writer.empty_tag('sheetCalcPr', [
|
3501
|
+
def write_sheet_calc_pr # :nodoc:
|
3502
|
+
@writer.empty_tag('sheetCalcPr', [['fullCalcOnLoad', 1]])
|
3365
3503
|
end
|
3366
3504
|
|
3367
3505
|
#
|
3368
3506
|
# Write the <phoneticPr> element.
|
3369
3507
|
#
|
3370
|
-
def write_phonetic_pr
|
3508
|
+
def write_phonetic_pr # :nodoc:
|
3371
3509
|
attributes = [
|
3372
3510
|
['fontId', 0],
|
3373
|
-
[
|
3511
|
+
%w[type noConversion]
|
3374
3512
|
]
|
3375
3513
|
|
3376
3514
|
@writer.empty_tag('phoneticPr', attributes)
|
@@ -3379,82 +3517,80 @@ EOS
|
|
3379
3517
|
#
|
3380
3518
|
# Write the <pageMargins> element.
|
3381
3519
|
#
|
3382
|
-
def write_page_margins
|
3520
|
+
def write_page_margins # :nodoc:
|
3383
3521
|
@page_setup.write_page_margins(@writer)
|
3384
3522
|
end
|
3385
3523
|
|
3386
3524
|
#
|
3387
3525
|
# Write the <pageSetup> element.
|
3388
3526
|
#
|
3389
|
-
def write_page_setup
|
3527
|
+
def write_page_setup # :nodoc:
|
3390
3528
|
@page_setup.write_page_setup(@writer)
|
3391
3529
|
end
|
3392
3530
|
|
3393
3531
|
#
|
3394
3532
|
# Write the <mergeCells> element.
|
3395
3533
|
#
|
3396
|
-
def write_merge_cells
|
3534
|
+
def write_merge_cells # :nodoc:
|
3397
3535
|
write_some_elements('mergeCells', @merge) do
|
3398
3536
|
@merge.each { |merged_range| write_merge_cell(merged_range) }
|
3399
3537
|
end
|
3400
3538
|
end
|
3401
3539
|
|
3402
|
-
def write_some_elements(tag, container)
|
3540
|
+
def write_some_elements(tag, container, &block)
|
3403
3541
|
return if container.empty?
|
3404
3542
|
|
3405
|
-
@writer.tag_elements(tag, [
|
3406
|
-
yield
|
3407
|
-
end
|
3543
|
+
@writer.tag_elements(tag, [['count', container.size]], &block)
|
3408
3544
|
end
|
3409
3545
|
|
3410
3546
|
#
|
3411
3547
|
# Write the <mergeCell> element.
|
3412
3548
|
#
|
3413
|
-
def write_merge_cell(merged_range)
|
3549
|
+
def write_merge_cell(merged_range) # :nodoc:
|
3414
3550
|
row_min, col_min, row_max, col_max = merged_range
|
3415
3551
|
|
3416
3552
|
# Convert the merge dimensions to a cell range.
|
3417
3553
|
cell_1 = xl_rowcol_to_cell(row_min, col_min)
|
3418
3554
|
cell_2 = xl_rowcol_to_cell(row_max, col_max)
|
3419
3555
|
|
3420
|
-
@writer.empty_tag('mergeCell', [
|
3556
|
+
@writer.empty_tag('mergeCell', [['ref', "#{cell_1}:#{cell_2}"]])
|
3421
3557
|
end
|
3422
3558
|
|
3423
3559
|
#
|
3424
3560
|
# Write the <printOptions> element.
|
3425
3561
|
#
|
3426
|
-
def write_print_options
|
3562
|
+
def write_print_options # :nodoc:
|
3427
3563
|
@page_setup.write_print_options(@writer)
|
3428
3564
|
end
|
3429
3565
|
|
3430
3566
|
#
|
3431
3567
|
# Write the <headerFooter> element.
|
3432
3568
|
#
|
3433
|
-
def write_header_footer
|
3569
|
+
def write_header_footer # :nodoc:
|
3434
3570
|
@page_setup.write_header_footer(@writer, excel2003_style?)
|
3435
3571
|
end
|
3436
3572
|
|
3437
3573
|
#
|
3438
3574
|
# Write the <rowBreaks> element.
|
3439
3575
|
#
|
3440
|
-
def write_row_breaks
|
3576
|
+
def write_row_breaks # :nodoc:
|
3441
3577
|
write_breaks('rowBreaks')
|
3442
3578
|
end
|
3443
3579
|
|
3444
3580
|
#
|
3445
3581
|
# Write the <colBreaks> element.
|
3446
3582
|
#
|
3447
|
-
def write_col_breaks
|
3583
|
+
def write_col_breaks # :nodoc:
|
3448
3584
|
write_breaks('colBreaks')
|
3449
3585
|
end
|
3450
3586
|
|
3451
3587
|
def write_breaks(tag) # :nodoc:
|
3452
3588
|
case tag
|
3453
3589
|
when 'rowBreaks'
|
3454
|
-
page_breaks = sort_pagebreaks(
|
3590
|
+
page_breaks = sort_pagebreaks(*@page_setup.hbreaks)
|
3455
3591
|
max = 16383
|
3456
3592
|
when 'colBreaks'
|
3457
|
-
page_breaks = sort_pagebreaks(
|
3593
|
+
page_breaks = sort_pagebreaks(*@page_setup.vbreaks)
|
3458
3594
|
max = 1048575
|
3459
3595
|
else
|
3460
3596
|
raise "Invalid parameter '#{tag}' in write_breaks."
|
@@ -3472,10 +3608,11 @@ EOS
|
|
3472
3608
|
page_breaks.each { |num| write_brk(num, max) }
|
3473
3609
|
end
|
3474
3610
|
end
|
3611
|
+
|
3475
3612
|
#
|
3476
3613
|
# Write the <brk> element.
|
3477
3614
|
#
|
3478
|
-
def write_brk(id, max)
|
3615
|
+
def write_brk(id, max) # :nodoc:
|
3479
3616
|
attributes = [
|
3480
3617
|
['id', id],
|
3481
3618
|
['max', max],
|
@@ -3488,7 +3625,7 @@ EOS
|
|
3488
3625
|
#
|
3489
3626
|
# Write the <autoFilter> element.
|
3490
3627
|
#
|
3491
|
-
def write_auto_filter
|
3628
|
+
def write_auto_filter # :nodoc:
|
3492
3629
|
return unless autofilter_ref?
|
3493
3630
|
|
3494
3631
|
attributes = [
|
@@ -3510,10 +3647,10 @@ EOS
|
|
3510
3647
|
# Function to iterate through the columns that form part of an autofilter
|
3511
3648
|
# range and write the appropriate filters.
|
3512
3649
|
#
|
3513
|
-
def write_autofilters
|
3650
|
+
def write_autofilters # :nodoc:
|
3514
3651
|
col1, col2 = @filter_range
|
3515
3652
|
|
3516
|
-
(col1
|
3653
|
+
(col1..col2).each do |col|
|
3517
3654
|
# Skip if column doesn't have an active filter.
|
3518
3655
|
next unless @filter_cols[col]
|
3519
3656
|
|
@@ -3529,8 +3666,8 @@ EOS
|
|
3529
3666
|
#
|
3530
3667
|
# Write the <filterColumn> element.
|
3531
3668
|
#
|
3532
|
-
def write_filter_column(col_id, type, *filters)
|
3533
|
-
@writer.tag_elements('filterColumn', [
|
3669
|
+
def write_filter_column(col_id, type, *filters) # :nodoc:
|
3670
|
+
@writer.tag_elements('filterColumn', [['colId', col_id]]) do
|
3534
3671
|
if type == 1
|
3535
3672
|
# Type == 1 is the new XLSX style filter.
|
3536
3673
|
write_filters(*filters)
|
@@ -3544,13 +3681,11 @@ EOS
|
|
3544
3681
|
#
|
3545
3682
|
# Write the <filters> element.
|
3546
3683
|
#
|
3547
|
-
def write_filters(*filters)
|
3684
|
+
def write_filters(*filters) # :nodoc:
|
3548
3685
|
non_blanks = filters.reject { |filter| filter.to_s =~ /^blanks$/i }
|
3549
3686
|
attributes = []
|
3550
3687
|
|
3551
|
-
if filters != non_blanks
|
3552
|
-
attributes = [ ['blank', 1] ]
|
3553
|
-
end
|
3688
|
+
attributes = [['blank', 1]] if filters != non_blanks
|
3554
3689
|
|
3555
3690
|
if filters.size == 1 && non_blanks.empty?
|
3556
3691
|
# Special case for blank cells only.
|
@@ -3566,14 +3701,14 @@ EOS
|
|
3566
3701
|
#
|
3567
3702
|
# Write the <filter> element.
|
3568
3703
|
#
|
3569
|
-
def write_filter(val)
|
3570
|
-
@writer.empty_tag('filter', [
|
3704
|
+
def write_filter(val) # :nodoc:
|
3705
|
+
@writer.empty_tag('filter', [['val', val]])
|
3571
3706
|
end
|
3572
3707
|
|
3573
3708
|
#
|
3574
3709
|
# Write the <customFilters> element.
|
3575
3710
|
#
|
3576
|
-
def write_custom_filters(*tokens)
|
3711
|
+
def write_custom_filters(*tokens) # :nodoc:
|
3577
3712
|
if tokens.size == 2
|
3578
3713
|
# One filter expression only.
|
3579
3714
|
@writer.tag_elements('customFilters') { write_custom_filter(*tokens) }
|
@@ -3581,11 +3716,11 @@ EOS
|
|
3581
3716
|
# Two filter expressions.
|
3582
3717
|
|
3583
3718
|
# Check if the "join" operand is "and" or "or".
|
3584
|
-
if tokens[2] == 0
|
3585
|
-
|
3586
|
-
|
3587
|
-
|
3588
|
-
|
3719
|
+
attributes = if tokens[2] == 0
|
3720
|
+
[['and', 1]]
|
3721
|
+
else
|
3722
|
+
[['and', 0]]
|
3723
|
+
end
|
3589
3724
|
|
3590
3725
|
# Write the two custom filters.
|
3591
3726
|
@writer.tag_elements('customFilters', attributes) do
|
@@ -3598,7 +3733,7 @@ EOS
|
|
3598
3733
|
#
|
3599
3734
|
# Write the <customFilter> element.
|
3600
3735
|
#
|
3601
|
-
def write_custom_filter(operator, val)
|
3736
|
+
def write_custom_filter(operator, val) # :nodoc:
|
3602
3737
|
operators = {
|
3603
3738
|
1 => 'lessThan',
|
3604
3739
|
2 => 'equal',
|
@@ -3628,8 +3763,9 @@ EOS
|
|
3628
3763
|
# Process any sored hyperlinks in row/col order and write the <hyperlinks>
|
3629
3764
|
# element. The attributes are different for internal and external links.
|
3630
3765
|
#
|
3631
|
-
def write_hyperlinks
|
3766
|
+
def write_hyperlinks # :nodoc:
|
3632
3767
|
return unless @hyperlinks
|
3768
|
+
|
3633
3769
|
hlink_attributes = []
|
3634
3770
|
@hyperlinks.keys.sort.each do |row_num|
|
3635
3771
|
# Sort the hyperlinks into column order.
|
@@ -3642,11 +3778,9 @@ EOS
|
|
3642
3778
|
# If the cell isn't a string then we have to add the url as
|
3643
3779
|
# the string to display
|
3644
3780
|
if ptrue?(@cell_data_table) &&
|
3645
|
-
|
3646
|
-
|
3647
|
-
|
3648
|
-
link.display_on
|
3649
|
-
end
|
3781
|
+
ptrue?(@cell_data_table[row_num]) &&
|
3782
|
+
ptrue?(@cell_data_table[row_num][col_num]) && @cell_data_table[row_num][col_num].display_url_string?
|
3783
|
+
link.display_on
|
3650
3784
|
end
|
3651
3785
|
|
3652
3786
|
if link.respond_to?(:external_hyper_link)
|
@@ -3672,7 +3806,7 @@ EOS
|
|
3672
3806
|
#
|
3673
3807
|
# Write the <tabColor> element.
|
3674
3808
|
#
|
3675
|
-
def write_tab_color
|
3809
|
+
def write_tab_color # :nodoc:
|
3676
3810
|
return unless tab_color?
|
3677
3811
|
|
3678
3812
|
@writer.empty_tag(
|
@@ -3701,7 +3835,7 @@ EOS
|
|
3701
3835
|
#
|
3702
3836
|
# Write the <sheetProtection> element.
|
3703
3837
|
#
|
3704
|
-
def write_sheet_protection
|
3838
|
+
def write_sheet_protection # :nodoc:
|
3705
3839
|
return unless protect?
|
3706
3840
|
|
3707
3841
|
attributes = []
|
@@ -3759,14 +3893,14 @@ EOS
|
|
3759
3893
|
#
|
3760
3894
|
# Write the <drawing> elements.
|
3761
3895
|
#
|
3762
|
-
def write_drawings
|
3896
|
+
def write_drawings # :nodoc:
|
3763
3897
|
increment_rel_id_and_write_r_id('drawing') if drawings?
|
3764
3898
|
end
|
3765
3899
|
|
3766
3900
|
#
|
3767
3901
|
# Write the <legacyDrawing> element.
|
3768
3902
|
#
|
3769
|
-
def write_legacy_drawing
|
3903
|
+
def write_legacy_drawing # :nodoc:
|
3770
3904
|
increment_rel_id_and_write_r_id('legacyDrawing') if has_vml?
|
3771
3905
|
end
|
3772
3906
|
|
@@ -3779,7 +3913,7 @@ EOS
|
|
3779
3913
|
# Increment the relationship id for any drawings or comments.
|
3780
3914
|
@rel_count += 1
|
3781
3915
|
|
3782
|
-
attributes = [
|
3916
|
+
attributes = [['r:id', "rId#{@rel_count}"]]
|
3783
3917
|
@writer.empty_tag('legacyDrawingHF', attributes)
|
3784
3918
|
end
|
3785
3919
|
|
@@ -3801,7 +3935,7 @@ EOS
|
|
3801
3935
|
#
|
3802
3936
|
# Write the underline font element.
|
3803
3937
|
#
|
3804
|
-
def write_underline(writer, underline)
|
3938
|
+
def write_underline(writer, underline) # :nodoc:
|
3805
3939
|
writer.empty_tag('u', underline_attributes(underline))
|
3806
3940
|
end
|
3807
3941
|
|
@@ -3811,7 +3945,7 @@ EOS
|
|
3811
3945
|
def write_table_parts
|
3812
3946
|
return if @tables.empty?
|
3813
3947
|
|
3814
|
-
@writer.tag_elements('tableParts', [
|
3948
|
+
@writer.tag_elements('tableParts', [['count', tables_count]]) do
|
3815
3949
|
tables_count.times { increment_rel_id_and_write_r_id('tablePart') }
|
3816
3950
|
end
|
3817
3951
|
end
|
@@ -3850,7 +3984,6 @@ EOS
|
|
3850
3984
|
def write_ext_list_data_bars
|
3851
3985
|
# Write the ext element.
|
3852
3986
|
write_ext('{78C0D931-6437-407d-A8EE-F0AAD7539E65}') do
|
3853
|
-
|
3854
3987
|
@writer.tag_elements('x14:conditionalFormattings') do
|
3855
3988
|
# Write each of the Excel 2010 conditional formatting data bar elements.
|
3856
3989
|
@data_bars_2010.each do |data_bar|
|
@@ -3860,16 +3993,16 @@ EOS
|
|
3860
3993
|
end
|
3861
3994
|
end
|
3862
3995
|
end
|
3996
|
+
|
3863
3997
|
#
|
3864
3998
|
# Write the <x14:conditionalFormatting> element.
|
3865
3999
|
#
|
3866
4000
|
def write_conditional_formatting_2010(data_bar)
|
3867
4001
|
xmlns_xm = 'http://schemas.microsoft.com/office/excel/2006/main'
|
3868
4002
|
|
3869
|
-
attributes = [
|
4003
|
+
attributes = [['xmlns:xm', xmlns_xm]]
|
3870
4004
|
|
3871
4005
|
@writer.tag_elements('x14:conditionalFormatting', attributes) do
|
3872
|
-
|
3873
4006
|
# Write the '<x14:cfRule element.
|
3874
4007
|
write_x14_cf_rule(data_bar)
|
3875
4008
|
|
@@ -3881,26 +4014,21 @@ EOS
|
|
3881
4014
|
write_x14_cfvo(data_bar[:x14_max_type], data_bar[:max_value])
|
3882
4015
|
|
3883
4016
|
# Write the x14:borderColor element.
|
3884
|
-
|
3885
|
-
write_x14_border_color(data_bar[:bar_border_color])
|
3886
|
-
end
|
4017
|
+
write_x14_border_color(data_bar[:bar_border_color]) unless ptrue?(data_bar[:bar_no_border])
|
3887
4018
|
|
3888
4019
|
# Write the x14:negativeFillColor element.
|
3889
|
-
|
3890
|
-
write_x14_negative_fill_color(data_bar[:bar_negative_color])
|
3891
|
-
end
|
4020
|
+
write_x14_negative_fill_color(data_bar[:bar_negative_color]) unless ptrue?(data_bar[:bar_negative_color_same])
|
3892
4021
|
|
3893
4022
|
# Write the x14:negativeBorderColor element.
|
3894
4023
|
if !ptrue?(data_bar[:bar_no_border]) &&
|
3895
4024
|
!ptrue?(data_bar[:bar_negative_border_color_same])
|
3896
4025
|
write_x14_negative_border_color(
|
3897
|
-
data_bar[:bar_negative_border_color]
|
4026
|
+
data_bar[:bar_negative_border_color]
|
4027
|
+
)
|
3898
4028
|
end
|
3899
4029
|
|
3900
4030
|
# Write the x14:axisColor element.
|
3901
|
-
if data_bar[:bar_axis_position] != 'none'
|
3902
|
-
write_x14_axis_color(data_bar[:bar_axis_color])
|
3903
|
-
end
|
4031
|
+
write_x14_axis_color(data_bar[:bar_axis_color]) if data_bar[:bar_axis_position] != 'none'
|
3904
4032
|
|
3905
4033
|
# Write closing elements.
|
3906
4034
|
@writer.end_tag('x14:dataBar')
|
@@ -3915,9 +4043,9 @@ EOS
|
|
3915
4043
|
# Write the <cfvo> element.
|
3916
4044
|
#
|
3917
4045
|
def write_x14_cfvo(type, value)
|
3918
|
-
attributes = [
|
4046
|
+
attributes = [['type', type]]
|
3919
4047
|
|
3920
|
-
if %w
|
4048
|
+
if %w[min max autoMin autoMax].include?(type)
|
3921
4049
|
@writer.empty_tag('x14:cfvo', attributes)
|
3922
4050
|
else
|
3923
4051
|
@writer.tag_elements('x14:cfvo', attributes) do
|
@@ -3939,7 +4067,6 @@ EOS
|
|
3939
4067
|
]
|
3940
4068
|
|
3941
4069
|
@writer.start_tag('x14:cfRule', attributes)
|
3942
|
-
|
3943
4070
|
end
|
3944
4071
|
|
3945
4072
|
#
|
@@ -3954,32 +4081,22 @@ EOS
|
|
3954
4081
|
['maxLength', max_length]
|
3955
4082
|
]
|
3956
4083
|
|
3957
|
-
attributes << ['border', 1]
|
4084
|
+
attributes << ['border', 1] unless ptrue?(data_bar[:bar_no_border])
|
3958
4085
|
attributes << ['gradient', 0] if ptrue?(data_bar[:bar_solid])
|
3959
4086
|
|
3960
|
-
if data_bar[:bar_direction] == 'left'
|
3961
|
-
|
3962
|
-
end
|
3963
|
-
if data_bar[:bar_direction] == 'right'
|
3964
|
-
attributes << ['direction', 'rightToLeft']
|
3965
|
-
end
|
4087
|
+
attributes << %w[direction leftToRight] if data_bar[:bar_direction] == 'left'
|
4088
|
+
attributes << %w[direction rightToLeft] if data_bar[:bar_direction] == 'right'
|
3966
4089
|
|
3967
|
-
if ptrue?(data_bar[:bar_negative_color_same])
|
3968
|
-
attributes << ['negativeBarColorSameAsPositive', 1]
|
3969
|
-
end
|
4090
|
+
attributes << ['negativeBarColorSameAsPositive', 1] if ptrue?(data_bar[:bar_negative_color_same])
|
3970
4091
|
|
3971
4092
|
if !ptrue?(data_bar[:bar_no_border]) &&
|
3972
4093
|
!ptrue?(data_bar[:bar_negative_border_color_same])
|
3973
4094
|
attributes << ['negativeBarBorderColorSameAsPositive', 0]
|
3974
4095
|
end
|
3975
4096
|
|
3976
|
-
if data_bar[:bar_axis_position] == 'middle'
|
3977
|
-
attributes << ['axisPosition', 'middle']
|
3978
|
-
end
|
4097
|
+
attributes << %w[axisPosition middle] if data_bar[:bar_axis_position] == 'middle'
|
3979
4098
|
|
3980
|
-
if data_bar[:bar_axis_position] == 'none'
|
3981
|
-
attributes << ['axisPosition', 'none']
|
3982
|
-
end
|
4099
|
+
attributes << %w[axisPosition none] if data_bar[:bar_axis_position] == 'none'
|
3983
4100
|
|
3984
4101
|
@writer.start_tag('x14:dataBar', attributes)
|
3985
4102
|
end
|
@@ -3988,7 +4105,7 @@ EOS
|
|
3988
4105
|
# Write the <x14:borderColor> element.
|
3989
4106
|
#
|
3990
4107
|
def write_x14_border_color(rgb)
|
3991
|
-
attributes = [
|
4108
|
+
attributes = [['rgb', rgb]]
|
3992
4109
|
|
3993
4110
|
@writer.empty_tag('x14:borderColor', attributes)
|
3994
4111
|
end
|
@@ -3997,7 +4114,7 @@ EOS
|
|
3997
4114
|
# Write the <x14:negativeFillColor> element.
|
3998
4115
|
#
|
3999
4116
|
def write_x14_negative_fill_color(rgb)
|
4000
|
-
attributes = [
|
4117
|
+
attributes = [['rgb', rgb]]
|
4001
4118
|
|
4002
4119
|
@writer.empty_tag('x14:negativeFillColor', attributes)
|
4003
4120
|
end
|
@@ -4006,7 +4123,7 @@ EOS
|
|
4006
4123
|
# Write the <x14:negativeBorderColor> element.
|
4007
4124
|
#
|
4008
4125
|
def write_x14_negative_border_color(rgb)
|
4009
|
-
attributes = [
|
4126
|
+
attributes = [['rgb', rgb]]
|
4010
4127
|
|
4011
4128
|
@writer.empty_tag('x14:negativeBorderColor', attributes)
|
4012
4129
|
end
|
@@ -4015,7 +4132,7 @@ EOS
|
|
4015
4132
|
# Write the <x14:axisColor> element.
|
4016
4133
|
#
|
4017
4134
|
def write_x14_axis_color(rgb)
|
4018
|
-
attributes = [
|
4135
|
+
attributes = [['rgb', rgb]]
|
4019
4136
|
|
4020
4137
|
@writer.empty_tag('x14:axisColor', attributes)
|
4021
4138
|
end
|
@@ -4026,7 +4143,6 @@ EOS
|
|
4026
4143
|
def write_ext_list_sparklines
|
4027
4144
|
# Write the ext element.
|
4028
4145
|
write_ext('{05C60535-1F16-4fd2-B633-F4F36F0B64E0}') do
|
4029
|
-
|
4030
4146
|
# Write the x14:sparklineGroups element.
|
4031
4147
|
write_sparkline_groups
|
4032
4148
|
end
|
@@ -4038,7 +4154,7 @@ EOS
|
|
4038
4154
|
def write_sparklines(sparkline)
|
4039
4155
|
# Write the sparkline elements.
|
4040
4156
|
@writer.tag_elements('x14:sparklines') do
|
4041
|
-
(0..sparkline[:count]-1).each do |i|
|
4157
|
+
(0..sparkline[:count] - 1).each do |i|
|
4042
4158
|
range = sparkline[:ranges][i]
|
4043
4159
|
location = sparkline[:locations][i]
|
4044
4160
|
|
@@ -4052,14 +4168,14 @@ EOS
|
|
4052
4168
|
|
4053
4169
|
def sparkline_groups_attributes # :nodoc:
|
4054
4170
|
[
|
4055
|
-
|
4171
|
+
['xmlns:xm', "#{OFFICE_URL}excel/2006/main"]
|
4056
4172
|
]
|
4057
4173
|
end
|
4058
4174
|
|
4059
4175
|
#
|
4060
4176
|
# Write the <dataValidations> element.
|
4061
4177
|
#
|
4062
|
-
def write_data_validations
|
4178
|
+
def write_data_validations # :nodoc:
|
4063
4179
|
write_some_elements('dataValidations', @validations) do
|
4064
4180
|
@validations.each { |validation| validation.write_data_validation(@writer) }
|
4065
4181
|
end
|
@@ -4068,7 +4184,7 @@ EOS
|
|
4068
4184
|
#
|
4069
4185
|
# Write the Worksheet conditional formats.
|
4070
4186
|
#
|
4071
|
-
def write_conditional_formats
|
4187
|
+
def write_conditional_formats # :nodoc:
|
4072
4188
|
@cond_formats.keys.sort.each do |range|
|
4073
4189
|
write_conditional_formatting(range, @cond_formats[range])
|
4074
4190
|
end
|
@@ -4077,18 +4193,17 @@ EOS
|
|
4077
4193
|
#
|
4078
4194
|
# Write the <conditionalFormatting> element.
|
4079
4195
|
#
|
4080
|
-
def write_conditional_formatting(range, cond_formats)
|
4081
|
-
@writer.tag_elements('conditionalFormatting', [
|
4196
|
+
def write_conditional_formatting(range, cond_formats) # :nodoc:
|
4197
|
+
@writer.tag_elements('conditionalFormatting', [['sqref', range]]) do
|
4082
4198
|
cond_formats.each { |cond_format| cond_format.write_cf_rule }
|
4083
4199
|
end
|
4084
4200
|
end
|
4085
4201
|
|
4086
|
-
def store_data_to_table(cell_data)
|
4087
|
-
row, col = cell_data.row, cell_data.col
|
4202
|
+
def store_data_to_table(cell_data, row, col) # :nodoc:
|
4088
4203
|
if @cell_data_table[row]
|
4089
4204
|
@cell_data_table[row][col] = cell_data
|
4090
4205
|
else
|
4091
|
-
@cell_data_table[row] =
|
4206
|
+
@cell_data_table[row] = []
|
4092
4207
|
@cell_data_table[row][col] = cell_data
|
4093
4208
|
end
|
4094
4209
|
end
|
@@ -4103,44 +4218,40 @@ EOS
|
|
4103
4218
|
# optimisation and isn't strictly required. However, it makes comparing
|
4104
4219
|
# files easier.
|
4105
4220
|
#
|
4106
|
-
def calculate_spans
|
4221
|
+
def calculate_spans # :nodoc:
|
4107
4222
|
span_min = nil
|
4108
4223
|
span_max = 0
|
4109
4224
|
spans = []
|
4110
4225
|
|
4111
|
-
(@dim_rowmin
|
4112
|
-
if @cell_data_table[row_num]
|
4113
|
-
span_min, span_max = calc_spans(@cell_data_table, row_num, span_min, span_max)
|
4114
|
-
end
|
4226
|
+
(@dim_rowmin..@dim_rowmax).each do |row_num|
|
4227
|
+
span_min, span_max = calc_spans(@cell_data_table, row_num, span_min, span_max) if @cell_data_table[row_num]
|
4115
4228
|
|
4116
4229
|
# Calculate spans for comments.
|
4117
|
-
if @comments[row_num]
|
4118
|
-
span_min, span_max = calc_spans(@comments, row_num, span_min, span_max)
|
4119
|
-
end
|
4230
|
+
span_min, span_max = calc_spans(@comments, row_num, span_min, span_max) if @comments[row_num]
|
4120
4231
|
|
4121
|
-
|
4122
|
-
|
4123
|
-
|
4124
|
-
|
4125
|
-
|
4126
|
-
|
4127
|
-
|
4128
|
-
|
4129
|
-
|
4232
|
+
next unless ((row_num + 1) % 16 == 0) || (row_num == @dim_rowmax)
|
4233
|
+
|
4234
|
+
span_index = row_num / 16
|
4235
|
+
next unless span_min
|
4236
|
+
|
4237
|
+
span_min += 1
|
4238
|
+
span_max += 1
|
4239
|
+
spans[span_index] = "#{span_min}:#{span_max}"
|
4240
|
+
span_min = nil
|
4130
4241
|
end
|
4131
4242
|
|
4132
4243
|
@row_spans = spans
|
4133
4244
|
end
|
4134
4245
|
|
4135
4246
|
def calc_spans(data, row_num, span_min, span_max)
|
4136
|
-
(@dim_colmin
|
4247
|
+
(@dim_colmin..@dim_colmax).each do |col_num|
|
4137
4248
|
if data[row_num][col_num]
|
4138
|
-
if
|
4139
|
-
span_min = col_num
|
4140
|
-
span_max = col_num
|
4141
|
-
else
|
4249
|
+
if span_min
|
4142
4250
|
span_min = col_num if col_num < span_min
|
4143
4251
|
span_max = col_num if col_num > span_max
|
4252
|
+
else
|
4253
|
+
span_min = col_num
|
4254
|
+
span_max = col_num
|
4144
4255
|
end
|
4145
4256
|
end
|
4146
4257
|
end
|
@@ -4151,7 +4262,7 @@ EOS
|
|
4151
4262
|
# Add a string to the shared string table, if it isn't already there, and
|
4152
4263
|
# return the string index.
|
4153
4264
|
#
|
4154
|
-
def shared_string_index(str)
|
4265
|
+
def shared_string_index(str) # :nodoc:
|
4155
4266
|
@workbook.shared_string_index(str)
|
4156
4267
|
end
|
4157
4268
|
|
@@ -4161,7 +4272,7 @@ EOS
|
|
4161
4272
|
# Convert zero indexed rows and columns to the format required by worksheet
|
4162
4273
|
# named ranges, eg, "Sheet1!$A$1:$C$13".
|
4163
4274
|
#
|
4164
|
-
def convert_name_area(row_num_1, col_num_1, row_num_2, col_num_2)
|
4275
|
+
def convert_name_area(row_num_1, col_num_1, row_num_2, col_num_2) # :nodoc:
|
4165
4276
|
range1 = ''
|
4166
4277
|
range2 = ''
|
4167
4278
|
row_col_only = false
|
@@ -4187,25 +4298,25 @@ EOS
|
|
4187
4298
|
end
|
4188
4299
|
|
4189
4300
|
# A repeated range is only written once (if it isn't a special case).
|
4190
|
-
if range1 == range2 && !row_col_only
|
4191
|
-
|
4192
|
-
|
4193
|
-
|
4194
|
-
|
4301
|
+
area = if range1 == range2 && !row_col_only
|
4302
|
+
range1
|
4303
|
+
else
|
4304
|
+
"#{range1}:#{range2}"
|
4305
|
+
end
|
4195
4306
|
|
4196
4307
|
# Build up the print area range "Sheet1!$A$1:$C$13".
|
4197
4308
|
"#{quote_sheetname(@name)}!#{area}"
|
4198
4309
|
end
|
4199
4310
|
|
4200
|
-
def fit_page?
|
4311
|
+
def fit_page? # :nodoc:
|
4201
4312
|
@page_setup.fit_page
|
4202
4313
|
end
|
4203
4314
|
|
4204
|
-
def filter_on?
|
4315
|
+
def filter_on? # :nodoc:
|
4205
4316
|
ptrue?(@filter_on)
|
4206
4317
|
end
|
4207
4318
|
|
4208
|
-
def tab_color?
|
4319
|
+
def tab_color? # :nodoc:
|
4209
4320
|
ptrue?(@tab_color)
|
4210
4321
|
end
|
4211
4322
|
|
@@ -4217,37 +4328,37 @@ EOS
|
|
4217
4328
|
ptrue?(@vba_codename)
|
4218
4329
|
end
|
4219
4330
|
|
4220
|
-
def zoom_scale_normal?
|
4331
|
+
def zoom_scale_normal? # :nodoc:
|
4221
4332
|
ptrue?(@zoom_scale_normal)
|
4222
4333
|
end
|
4223
4334
|
|
4224
|
-
def page_view?
|
4335
|
+
def page_view? # :nodoc:
|
4225
4336
|
!!@page_view
|
4226
4337
|
end
|
4227
4338
|
|
4228
|
-
def right_to_left?
|
4339
|
+
def right_to_left? # :nodoc:
|
4229
4340
|
!!@right_to_left
|
4230
4341
|
end
|
4231
4342
|
|
4232
|
-
def show_zeros?
|
4343
|
+
def show_zeros? # :nodoc:
|
4233
4344
|
!!@show_zeros
|
4234
4345
|
end
|
4235
4346
|
|
4236
|
-
def protect?
|
4347
|
+
def protect? # :nodoc:
|
4237
4348
|
!!@protect
|
4238
4349
|
end
|
4239
4350
|
|
4240
|
-
def autofilter_ref?
|
4351
|
+
def autofilter_ref? # :nodoc:
|
4241
4352
|
!!@autofilter_ref
|
4242
4353
|
end
|
4243
4354
|
|
4244
|
-
def drawings?
|
4355
|
+
def drawings? # :nodoc:
|
4245
4356
|
!!@drawings
|
4246
4357
|
end
|
4247
4358
|
|
4248
|
-
def remove_white_space(margin)
|
4359
|
+
def remove_white_space(margin) # :nodoc:
|
4249
4360
|
if margin.respond_to?(:gsub)
|
4250
|
-
margin.gsub(/[^\d
|
4361
|
+
margin.gsub(/[^\d.]/, '')
|
4251
4362
|
else
|
4252
4363
|
margin
|
4253
4364
|
end
|
@@ -4260,15 +4371,15 @@ EOS
|
|
4260
4371
|
col_cell = xl_rowcol_to_cell(0, left_col)
|
4261
4372
|
|
4262
4373
|
@selections <<
|
4263
|
-
[
|
4264
|
-
[
|
4265
|
-
[
|
4374
|
+
['topRight', col_cell, col_cell] <<
|
4375
|
+
['bottomLeft', row_cell, row_cell] <<
|
4376
|
+
['bottomRight', active_cell, sqref]
|
4266
4377
|
elsif col > 0
|
4267
4378
|
active_pane = 'topRight'
|
4268
|
-
@selections << [
|
4379
|
+
@selections << ['topRight', active_cell, sqref]
|
4269
4380
|
else
|
4270
4381
|
active_pane = 'bottomLeft'
|
4271
|
-
@selections << [
|
4382
|
+
@selections << ['bottomLeft', active_cell, sqref]
|
4272
4383
|
end
|
4273
4384
|
active_pane
|
4274
4385
|
end
|
@@ -4279,16 +4390,15 @@ EOS
|
|
4279
4390
|
col_letter = col
|
4280
4391
|
|
4281
4392
|
# Convert col ref to a cell ref and then to a col number.
|
4282
|
-
|
4393
|
+
_dummy, col = substitute_cellref("#{col}1")
|
4283
4394
|
raise "Invalid column '#{col_letter}'" if col >= COL_MAX
|
4284
4395
|
end
|
4285
4396
|
|
4286
4397
|
col_first, col_last = @filter_range
|
4287
4398
|
|
4288
4399
|
# Reject column if it is outside filter range.
|
4289
|
-
if col < col_first or col > col_last
|
4290
|
-
|
4291
|
-
end
|
4400
|
+
raise "Column '#{col}' outside autofilter column range (#{col_first} .. #{col_last})" if col < col_first or col > col_last
|
4401
|
+
|
4292
4402
|
col
|
4293
4403
|
end
|
4294
4404
|
|
@@ -4300,7 +4410,7 @@ EOS
|
|
4300
4410
|
|
4301
4411
|
ignore = @ignore_errors
|
4302
4412
|
|
4303
|
-
@writer.tag_elements('ignoredErrors'
|
4413
|
+
@writer.tag_elements('ignoredErrors') do
|
4304
4414
|
{
|
4305
4415
|
:number_stored_as_text => 'numberStoredAsText',
|
4306
4416
|
:eval_error => 'evalError',
|
@@ -4312,9 +4422,7 @@ EOS
|
|
4312
4422
|
:calculated_column => 'calculatedColumn',
|
4313
4423
|
:two_digit_text_year => 'twoDigitTextYear'
|
4314
4424
|
}.each do |key, value|
|
4315
|
-
if ignore[key]
|
4316
|
-
write_ignored_error(value, ignore[key])
|
4317
|
-
end
|
4425
|
+
write_ignored_error(value, ignore[key]) if ignore[key]
|
4318
4426
|
end
|
4319
4427
|
end
|
4320
4428
|
end
|