write_xlsx 1.09.4 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.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
|