write_xlsx 0.64.1 → 0.65.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/README.rdoc +10 -1
 - data/examples/conditional_format.rb +251 -18
 - data/examples/demo.rb +2 -3
 - data/examples/macros.rb +42 -0
 - data/examples/outline_collapsed.rb +160 -0
 - data/examples/republic.png +0 -0
 - data/examples/shape3.rb +2 -2
 - data/examples/shape4.rb +5 -5
 - data/examples/shape5.rb +6 -6
 - data/examples/shape6.rb +6 -6
 - data/examples/shape7.rb +11 -11
 - data/examples/shape8.rb +10 -10
 - data/examples/shape_all.rb +0 -0
 - data/examples/vbaProject.bin +0 -0
 - data/lib/write_xlsx/chart.rb +656 -56
 - data/lib/write_xlsx/chartsheet.rb +26 -2
 - data/lib/write_xlsx/format.rb +50 -27
 - data/lib/write_xlsx/formats.rb +32 -0
 - data/lib/write_xlsx/package/packager.rb +45 -238
 - data/lib/write_xlsx/package/table.rb +9 -18
 - data/lib/write_xlsx/package/xml_writer_simple.rb +26 -9
 - data/lib/write_xlsx/sheets.rb +223 -0
 - data/lib/write_xlsx/sparkline.rb +140 -4
 - data/lib/write_xlsx/version.rb +1 -1
 - data/lib/write_xlsx/workbook.rb +34 -121
 - data/lib/write_xlsx/worksheet/data_validation.rb +291 -0
 - data/lib/write_xlsx/worksheet/hyperlink.rb +111 -0
 - data/lib/write_xlsx/worksheet/page_setup.rb +170 -0
 - data/lib/write_xlsx/worksheet.rb +1112 -1334
 - data/test/helper.rb +1 -1
 - data/test/package/styles/test_styles_01.rb +1 -10
 - data/test/package/styles/test_styles_02.rb +1 -10
 - data/test/package/styles/test_styles_03.rb +1 -10
 - data/test/package/styles/test_styles_04.rb +1 -10
 - data/test/package/styles/test_styles_05.rb +1 -10
 - data/test/package/styles/test_styles_06.rb +1 -10
 - data/test/package/styles/test_styles_07.rb +1 -10
 - data/test/package/styles/test_styles_08.rb +1 -10
 - data/test/package/styles/test_styles_09.rb +1 -10
 - data/test/perl_output/conditional_format.xlsx +0 -0
 - data/test/perl_output/outline_collapsed.xlsx +0 -0
 - data/test/perl_output/protection.xlsx +0 -0
 - data/test/regression/test_chart_gap01.rb +47 -0
 - data/test/regression/test_chart_gap02.rb +47 -0
 - data/test/regression/test_chart_gap03.rb +47 -0
 - data/test/regression/test_format05.rb +26 -0
 - data/test/regression/test_rich_string12.rb +32 -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/format05.xlsx +0 -0
 - data/test/regression/xlsx_files/rich_string12.xlsx +0 -0
 - data/test/test_example_match.rb +253 -20
 - data/test/worksheet/test_set_column.rb +25 -0
 - data/test/worksheet/test_worksheet_03.rb +1 -1
 - data/test/worksheet/test_worksheet_04.rb +1 -1
 - data/test/worksheet/test_write_array_formula_01.rb +7 -0
 - data/test/worksheet/test_write_col_breaks.rb +2 -2
 - data/test/worksheet/test_write_col_info.rb +8 -8
 - data/test/worksheet/test_write_conditional_formatting.rb +4 -4
 - data/test/worksheet/test_write_formula_does_not_change_formula_string.rb +18 -0
 - data/test/worksheet/test_write_header_footer.rb +8 -3
 - data/test/worksheet/test_write_hyperlink.rb +10 -5
 - data/test/worksheet/test_write_merge_cells.rb +6 -6
 - data/test/worksheet/test_write_page_set_up_pr.rb +1 -1
 - data/test/worksheet/test_write_page_setup.rb +1 -1
 - data/test/worksheet/test_write_row_breaks.rb +2 -2
 - data/test/worksheet/test_write_row_element.rb +1 -1
 - data/test/worksheet/test_write_sheet_pr.rb +2 -2
 - data/test/worksheet/test_write_sheet_view.rb +0 -9
 - data/test/worksheet/test_write_url.rb +19 -0
 - data/test/worksheet/test_write_worksheet_attributes.rb +21 -0
 - metadata +38 -5
 - data/lib/write_xlsx/worksheet/print_style.rb +0 -51
 - data/test/worksheet/test_write_worksheet.rb +0 -19
 
| 
         @@ -24,7 +24,7 @@ module Writexlsx 
     | 
|
| 
       24 
24 
     | 
    
         
             
                  @chart             = nil
         
     | 
| 
       25 
25 
     | 
    
         
             
                  @charts            = [1]
         
     | 
| 
       26 
26 
     | 
    
         
             
                  @zoom_scale_normal = 0
         
     | 
| 
       27 
     | 
    
         
            -
                  @ 
     | 
| 
      
 27 
     | 
    
         
            +
                  @page_setup.orientation = false
         
     | 
| 
       28 
28 
     | 
    
         
             
                end
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
                #
         
     | 
| 
         @@ -134,6 +134,26 @@ module Writexlsx 
     | 
|
| 
       134 
134 
     | 
    
         
             
                  @chart.show_hidden_data(*args)
         
     | 
| 
       135 
135 
     | 
    
         
             
                end
         
     | 
| 
       136 
136 
     | 
    
         | 
| 
      
 137 
     | 
    
         
            +
                def set_size(*args)
         
     | 
| 
      
 138 
     | 
    
         
            +
                  @chart.set_size(*args)
         
     | 
| 
      
 139 
     | 
    
         
            +
                end
         
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
                def set_table(*args)
         
     | 
| 
      
 142 
     | 
    
         
            +
                  @chart.set_table(*args)
         
     | 
| 
      
 143 
     | 
    
         
            +
                end
         
     | 
| 
      
 144 
     | 
    
         
            +
             
     | 
| 
      
 145 
     | 
    
         
            +
                def set_up_down_bars(*args)
         
     | 
| 
      
 146 
     | 
    
         
            +
                  @chart.set_up_down_bars(*args)
         
     | 
| 
      
 147 
     | 
    
         
            +
                end
         
     | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
      
 149 
     | 
    
         
            +
                def set_drop_lines(*args)
         
     | 
| 
      
 150 
     | 
    
         
            +
                  @chart.set_drop_lines(*args)
         
     | 
| 
      
 151 
     | 
    
         
            +
                end
         
     | 
| 
      
 152 
     | 
    
         
            +
             
     | 
| 
      
 153 
     | 
    
         
            +
                def set_high_low_lines(*args)
         
     | 
| 
      
 154 
     | 
    
         
            +
                  @chart.set_high_low_lines(*args)
         
     | 
| 
      
 155 
     | 
    
         
            +
                end
         
     | 
| 
      
 156 
     | 
    
         
            +
             
     | 
| 
       137 
157 
     | 
    
         
             
                #
         
     | 
| 
       138 
158 
     | 
    
         
             
                # Set up chart/drawings.
         
     | 
| 
       139 
159 
     | 
    
         
             
                #
         
     | 
| 
         @@ -142,13 +162,17 @@ module Writexlsx 
     | 
|
| 
       142 
162 
     | 
    
         | 
| 
       143 
163 
     | 
    
         
             
                  drawing = Drawing.new
         
     | 
| 
       144 
164 
     | 
    
         
             
                  @drawing = drawing
         
     | 
| 
       145 
     | 
    
         
            -
                  @drawing.orientation = @ 
     | 
| 
      
 165 
     | 
    
         
            +
                  @drawing.orientation = @page_setup.orientation
         
     | 
| 
       146 
166 
     | 
    
         | 
| 
       147 
167 
     | 
    
         
             
                  @external_drawing_links << [ '/drawing', "../drawings/drawing#{drawing_id}.xml" ]
         
     | 
| 
       148 
168 
     | 
    
         | 
| 
       149 
169 
     | 
    
         
             
                  @drawing_links << [ '/chart', "../charts/chart#{chart_id}.xml"]
         
     | 
| 
       150 
170 
     | 
    
         
             
                end
         
     | 
| 
       151 
171 
     | 
    
         | 
| 
      
 172 
     | 
    
         
            +
                def external_links
         
     | 
| 
      
 173 
     | 
    
         
            +
                  [@external_drawing_links]
         
     | 
| 
      
 174 
     | 
    
         
            +
                end
         
     | 
| 
      
 175 
     | 
    
         
            +
             
     | 
| 
       152 
176 
     | 
    
         
             
                private
         
     | 
| 
       153 
177 
     | 
    
         | 
| 
       154 
178 
     | 
    
         
             
                #
         
     | 
    
        data/lib/write_xlsx/format.rb
    CHANGED
    
    | 
         @@ -174,9 +174,8 @@ module Writexlsx 
     | 
|
| 
       174 
174 
     | 
    
         
             
                attr_accessor :dxf_bg_color, :dxf_fg_color   # :nodoc:
         
     | 
| 
       175 
175 
     | 
    
         
             
                attr_reader :rotation, :bold, :italic, :font_strikeout
         
     | 
| 
       176 
176 
     | 
    
         | 
| 
       177 
     | 
    
         
            -
                def initialize( 
     | 
| 
       178 
     | 
    
         
            -
                  @ 
     | 
| 
       179 
     | 
    
         
            -
                  @dxf_format_indices = dxf_format_indices
         
     | 
| 
      
 177 
     | 
    
         
            +
                def initialize(formats, params = {})   # :nodoc:
         
     | 
| 
      
 178 
     | 
    
         
            +
                  @formats = formats
         
     | 
| 
       180 
179 
     | 
    
         | 
| 
       181 
180 
     | 
    
         
             
                  @xf_index       = nil
         
     | 
| 
       182 
181 
     | 
    
         
             
                  @dxf_index      = nil
         
     | 
| 
         @@ -250,7 +249,6 @@ module Writexlsx 
     | 
|
| 
       250 
249 
     | 
    
         
             
                  reserve = [
         
     | 
| 
       251 
250 
     | 
    
         
             
                             :xf_index,
         
     | 
| 
       252 
251 
     | 
    
         
             
                             :dxf_index,
         
     | 
| 
       253 
     | 
    
         
            -
                             :xf_format_indices,
         
     | 
| 
       254 
252 
     | 
    
         
             
                             :xdf_format_indices,
         
     | 
| 
       255 
253 
     | 
    
         
             
                             :palette
         
     | 
| 
       256 
254 
     | 
    
         
             
                            ]
         
     | 
| 
         @@ -446,18 +444,10 @@ module Writexlsx 
     | 
|
| 
       446 
444 
     | 
    
         
             
                def get_xf_index
         
     | 
| 
       447 
445 
     | 
    
         
             
                  if @xf_index
         
     | 
| 
       448 
446 
     | 
    
         
             
                    @xf_index
         
     | 
| 
      
 447 
     | 
    
         
            +
                  elsif @formats.xf_index_by_key(get_format_key)
         
     | 
| 
      
 448 
     | 
    
         
            +
                    @formats.xf_index_by_key(get_format_key)
         
     | 
| 
       449 
449 
     | 
    
         
             
                  else
         
     | 
| 
       450 
     | 
    
         
            -
                     
     | 
| 
       451 
     | 
    
         
            -
                    indices_href = @xf_format_indices
         
     | 
| 
       452 
     | 
    
         
            -
             
     | 
| 
       453 
     | 
    
         
            -
                    if indices_href[key]
         
     | 
| 
       454 
     | 
    
         
            -
                      indices_href[key]
         
     | 
| 
       455 
     | 
    
         
            -
                    else
         
     | 
| 
       456 
     | 
    
         
            -
                      index = 1 + indices_href.keys.size
         
     | 
| 
       457 
     | 
    
         
            -
                      indices_href[key] = index
         
     | 
| 
       458 
     | 
    
         
            -
                      @xf_index = index
         
     | 
| 
       459 
     | 
    
         
            -
                      index
         
     | 
| 
       460 
     | 
    
         
            -
                    end
         
     | 
| 
      
 450 
     | 
    
         
            +
                    @xf_index = @formats.set_xf_index_by_key(get_format_key)
         
     | 
| 
       461 
451 
     | 
    
         
             
                  end
         
     | 
| 
       462 
452 
     | 
    
         
             
                end
         
     | 
| 
       463 
453 
     | 
    
         | 
| 
         @@ -466,19 +456,11 @@ module Writexlsx 
     | 
|
| 
       466 
456 
     | 
    
         
             
                #
         
     | 
| 
       467 
457 
     | 
    
         
             
                def get_dxf_index
         
     | 
| 
       468 
458 
     | 
    
         
             
                  if @dxf_index
         
     | 
| 
       469 
     | 
    
         
            -
             
     | 
| 
      
 459 
     | 
    
         
            +
                    @dxf_index
         
     | 
| 
      
 460 
     | 
    
         
            +
                  elsif @formats.dxf_index_by_key(get_format_key)
         
     | 
| 
      
 461 
     | 
    
         
            +
                    @formats.dxf_index_by_key(get_format_key)
         
     | 
| 
       470 
462 
     | 
    
         
             
                  else
         
     | 
| 
       471 
     | 
    
         
            -
                     
     | 
| 
       472 
     | 
    
         
            -
                    indices = @dxf_format_indices
         
     | 
| 
       473 
     | 
    
         
            -
             
     | 
| 
       474 
     | 
    
         
            -
                    if indices[key]
         
     | 
| 
       475 
     | 
    
         
            -
                      indices[key]
         
     | 
| 
       476 
     | 
    
         
            -
                    else
         
     | 
| 
       477 
     | 
    
         
            -
                      index = indices.size
         
     | 
| 
       478 
     | 
    
         
            -
                      indices[key] = index
         
     | 
| 
       479 
     | 
    
         
            -
                      @dxf_index = index
         
     | 
| 
       480 
     | 
    
         
            -
                      index
         
     | 
| 
       481 
     | 
    
         
            -
                    end
         
     | 
| 
      
 463 
     | 
    
         
            +
                    @dxf_index = @formats.set_dxf_index_by_key(get_format_key)
         
     | 
| 
       482 
464 
     | 
    
         
             
                  end
         
     | 
| 
       483 
465 
     | 
    
         
             
                end
         
     | 
| 
       484 
466 
     | 
    
         | 
| 
         @@ -752,5 +734,46 @@ module Writexlsx 
     | 
|
| 
       752 
734 
     | 
    
         
             
                def [](attr)
         
     | 
| 
       753 
735 
     | 
    
         
             
                  self.instance_variable_get("@#{attr}")
         
     | 
| 
       754 
736 
     | 
    
         
             
                end
         
     | 
| 
      
 737 
     | 
    
         
            +
             
     | 
| 
      
 738 
     | 
    
         
            +
                def write_font(writer, worksheet) #:nodoc:
         
     | 
| 
      
 739 
     | 
    
         
            +
                  writer.tag_elements('rPr') do
         
     | 
| 
      
 740 
     | 
    
         
            +
                    writer.empty_tag('b')       if bold?
         
     | 
| 
      
 741 
     | 
    
         
            +
                    writer.empty_tag('i')       if italic?
         
     | 
| 
      
 742 
     | 
    
         
            +
                    writer.empty_tag('strike')  if strikeout?
         
     | 
| 
      
 743 
     | 
    
         
            +
                    writer.empty_tag('outline') if outline?
         
     | 
| 
      
 744 
     | 
    
         
            +
                    writer.empty_tag('shadow')  if shadow?
         
     | 
| 
      
 745 
     | 
    
         
            +
             
     | 
| 
      
 746 
     | 
    
         
            +
                    # Handle the underline variants.
         
     | 
| 
      
 747 
     | 
    
         
            +
                    write_underline(writer, underline) if underline?
         
     | 
| 
      
 748 
     | 
    
         
            +
             
     | 
| 
      
 749 
     | 
    
         
            +
                    write_vert_align(writer, 'superscript') if font_script == 1
         
     | 
| 
      
 750 
     | 
    
         
            +
                    write_vert_align(writer, 'subscript')   if font_script == 2
         
     | 
| 
      
 751 
     | 
    
         
            +
             
     | 
| 
      
 752 
     | 
    
         
            +
                    writer.empty_tag('sz', ['val', size])
         
     | 
| 
      
 753 
     | 
    
         
            +
             
     | 
| 
      
 754 
     | 
    
         
            +
                    if ptrue?(theme)
         
     | 
| 
      
 755 
     | 
    
         
            +
                      write_color(writer, 'theme', theme)
         
     | 
| 
      
 756 
     | 
    
         
            +
                    elsif ptrue?(@color)
         
     | 
| 
      
 757 
     | 
    
         
            +
                      color = worksheet.get_palette_color(@color)
         
     | 
| 
      
 758 
     | 
    
         
            +
                      write_color(writer, 'rgb', color)
         
     | 
| 
      
 759 
     | 
    
         
            +
                    else
         
     | 
| 
      
 760 
     | 
    
         
            +
                      write_color(writer, 'theme', 1)
         
     | 
| 
      
 761 
     | 
    
         
            +
                    end
         
     | 
| 
      
 762 
     | 
    
         
            +
             
     | 
| 
      
 763 
     | 
    
         
            +
                    writer.empty_tag('rFont',  ['val', font])
         
     | 
| 
      
 764 
     | 
    
         
            +
                    writer.empty_tag('family', ['val', font_family])
         
     | 
| 
      
 765 
     | 
    
         
            +
             
     | 
| 
      
 766 
     | 
    
         
            +
                    if font == 'Calibri' && hyperlink == 0
         
     | 
| 
      
 767 
     | 
    
         
            +
                      writer.empty_tag('scheme', ['val', font_scheme])
         
     | 
| 
      
 768 
     | 
    
         
            +
                    end
         
     | 
| 
      
 769 
     | 
    
         
            +
                  end
         
     | 
| 
      
 770 
     | 
    
         
            +
                end
         
     | 
| 
      
 771 
     | 
    
         
            +
             
     | 
| 
      
 772 
     | 
    
         
            +
                #
         
     | 
| 
      
 773 
     | 
    
         
            +
                # Write the <vertAlign> font sub-element.
         
     | 
| 
      
 774 
     | 
    
         
            +
                #
         
     | 
| 
      
 775 
     | 
    
         
            +
                def write_vert_align(writer, val) #:nodoc:
         
     | 
| 
      
 776 
     | 
    
         
            +
                  writer.empty_tag('vertAlign', ['val', val])
         
     | 
| 
      
 777 
     | 
    
         
            +
                end
         
     | 
| 
       755 
778 
     | 
    
         
             
              end
         
     | 
| 
       756 
779 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,32 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # -*- encoding: utf-8 -*-
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'write_xlsx/package/xml_writer_simple'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module Writexlsx
         
     | 
| 
      
 5 
     | 
    
         
            +
              class Formats
         
     | 
| 
      
 6 
     | 
    
         
            +
                include Writexlsx::Utility
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                attr_reader :formats, :xf_format_indices, :dxf_format_indices
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                def initialize
         
     | 
| 
      
 11 
     | 
    
         
            +
                  @formats = []
         
     | 
| 
      
 12 
     | 
    
         
            +
                  @xf_format_indices = {}
         
     | 
| 
      
 13 
     | 
    
         
            +
                  @dxf_format_indices = {}
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                def xf_index_by_key(key)
         
     | 
| 
      
 17 
     | 
    
         
            +
                  @xf_format_indices[key]
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                def set_xf_index_by_key(key)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  @xf_format_indices[key] ||= 1 + @xf_format_indices.size
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                def dxf_index_by_key(key)
         
     | 
| 
      
 25 
     | 
    
         
            +
                  @dxf_format_indices[key]
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                def set_dxf_index_by_key(key)
         
     | 
| 
      
 29 
     | 
    
         
            +
                  @dxf_format_indices[key] ||= @dxf_format_indices.size
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -18,43 +18,17 @@ module Writexlsx 
     | 
|
| 
       18 
18 
     | 
    
         | 
| 
       19 
19 
     | 
    
         
             
                  include Writexlsx::Utility
         
     | 
| 
       20 
20 
     | 
    
         | 
| 
       21 
     | 
    
         
            -
                  def initialize
         
     | 
| 
       22 
     | 
    
         
            -
                    @ 
     | 
| 
       23 
     | 
    
         
            -
                    @ 
     | 
| 
       24 
     | 
    
         
            -
                    @ 
     | 
| 
       25 
     | 
    
         
            -
                    @ 
     | 
| 
       26 
     | 
    
         
            -
                    @chartsheet_count = 0
         
     | 
| 
       27 
     | 
    
         
            -
                    @chart_count      = 0
         
     | 
| 
       28 
     | 
    
         
            -
                    @drawing_count    = 0
         
     | 
| 
       29 
     | 
    
         
            -
                    @table_count      = 0
         
     | 
| 
       30 
     | 
    
         
            -
                    @named_ranges     = []
         
     | 
| 
      
 21 
     | 
    
         
            +
                  def initialize(workbook)
         
     | 
| 
      
 22 
     | 
    
         
            +
                    @workbook     = workbook
         
     | 
| 
      
 23 
     | 
    
         
            +
                    @package_dir  = ''
         
     | 
| 
      
 24 
     | 
    
         
            +
                    @table_count  = @workbook.worksheets.tables_count
         
     | 
| 
      
 25 
     | 
    
         
            +
                    @named_ranges = []
         
     | 
| 
       31 
26 
     | 
    
         
             
                  end
         
     | 
| 
       32 
27 
     | 
    
         | 
| 
       33 
28 
     | 
    
         
             
                  def set_package_dir(package_dir)
         
     | 
| 
       34 
29 
     | 
    
         
             
                    @package_dir = package_dir
         
     | 
| 
       35 
30 
     | 
    
         
             
                  end
         
     | 
| 
       36 
31 
     | 
    
         | 
| 
       37 
     | 
    
         
            -
                  #
         
     | 
| 
       38 
     | 
    
         
            -
                  # Add the Workbook object to the package.
         
     | 
| 
       39 
     | 
    
         
            -
                  #
         
     | 
| 
       40 
     | 
    
         
            -
                  def add_workbook(workbook)
         
     | 
| 
       41 
     | 
    
         
            -
                    @workbook          = workbook
         
     | 
| 
       42 
     | 
    
         
            -
                    @sheet_names       = workbook.sheetnames
         
     | 
| 
       43 
     | 
    
         
            -
                    @chart_count       = workbook.charts.size
         
     | 
| 
       44 
     | 
    
         
            -
                    @drawing_count     = workbook.drawings.size
         
     | 
| 
       45 
     | 
    
         
            -
                    @num_vml_files     = workbook.num_vml_files
         
     | 
| 
       46 
     | 
    
         
            -
                    @num_comment_files = workbook.num_comment_files
         
     | 
| 
       47 
     | 
    
         
            -
                    @named_ranges      = workbook.named_ranges
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                    workbook.worksheets.each do |worksheet|
         
     | 
| 
       50 
     | 
    
         
            -
                      if worksheet.is_chartsheet?
         
     | 
| 
       51 
     | 
    
         
            -
                        @chartsheet_count += 1
         
     | 
| 
       52 
     | 
    
         
            -
                      else
         
     | 
| 
       53 
     | 
    
         
            -
                        @worksheet_count += 1
         
     | 
| 
       54 
     | 
    
         
            -
                      end
         
     | 
| 
       55 
     | 
    
         
            -
                    end
         
     | 
| 
       56 
     | 
    
         
            -
                  end
         
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
32 
     | 
    
         
             
                  #
         
     | 
| 
       59 
33 
     | 
    
         
             
                  # Write the xml files that make up the XLXS OPC package.
         
     | 
| 
       60 
34 
     | 
    
         
             
                  #
         
     | 
| 
         @@ -98,27 +72,12 @@ module Writexlsx 
     | 
|
| 
       98 
72 
     | 
    
         
             
                  # Write the worksheet files.
         
     | 
| 
       99 
73 
     | 
    
         
             
                  #
         
     | 
| 
       100 
74 
     | 
    
         
             
                  def write_worksheet_files
         
     | 
| 
       101 
     | 
    
         
            -
                     
     | 
| 
       102 
     | 
    
         
            -
             
     | 
| 
       103 
     | 
    
         
            -
                    index = 1
         
     | 
| 
       104 
     | 
    
         
            -
                    @workbook.worksheets.each do |worksheet|
         
     | 
| 
       105 
     | 
    
         
            -
                      next if worksheet.is_chartsheet?
         
     | 
| 
       106 
     | 
    
         
            -
                      worksheet.set_xml_writer("#{@package_dir}/xl/worksheets/sheet#{index}.xml")
         
     | 
| 
       107 
     | 
    
         
            -
                      index += 1
         
     | 
| 
       108 
     | 
    
         
            -
                      worksheet.assemble_xml_file
         
     | 
| 
       109 
     | 
    
         
            -
                    end
         
     | 
| 
      
 75 
     | 
    
         
            +
                    @workbook.worksheets.write_worksheet_files(@package_dir)
         
     | 
| 
       110 
76 
     | 
    
         
             
                  end
         
     | 
| 
       111 
77 
     | 
    
         | 
| 
       112 
78 
     | 
    
         
             
                  #
         
     | 
| 
       113 
79 
     | 
    
         
             
                  def write_chartsheet_files
         
     | 
| 
       114 
     | 
    
         
            -
                     
     | 
| 
       115 
     | 
    
         
            -
                    @workbook.worksheets.each do |worksheet|
         
     | 
| 
       116 
     | 
    
         
            -
                      next unless worksheet.is_chartsheet?
         
     | 
| 
       117 
     | 
    
         
            -
                      FileUtils.mkdir_p("#{@package_dir}/xl/chartsheets")
         
     | 
| 
       118 
     | 
    
         
            -
                      worksheet.set_xml_writer("#{@package_dir}/xl/chartsheets/sheet#{index}.xml")
         
     | 
| 
       119 
     | 
    
         
            -
                      index += 1
         
     | 
| 
       120 
     | 
    
         
            -
                      worksheet.assemble_xml_file
         
     | 
| 
       121 
     | 
    
         
            -
                    end
         
     | 
| 
      
 80 
     | 
    
         
            +
                    @workbook.worksheets.write_chartsheet_files(@package_dir)
         
     | 
| 
       122 
81 
     | 
    
         
             
                  end
         
     | 
| 
       123 
82 
     | 
    
         | 
| 
       124 
83 
     | 
    
         
             
                  #
         
     | 
| 
         @@ -136,14 +95,11 @@ module Writexlsx 
     | 
|
| 
       136 
95 
     | 
    
         
             
                  end
         
     | 
| 
       137 
96 
     | 
    
         | 
| 
       138 
97 
     | 
    
         
             
                  def write_chart_or_drawing_files(objects, filename)
         
     | 
| 
       139 
     | 
    
         
            -
                     
     | 
| 
       140 
     | 
    
         
            -
             
     | 
| 
       141 
     | 
    
         
            -
                    FileUtils.mkdir_p("#{@package_dir}/xl/#{filename}s")
         
     | 
| 
      
 98 
     | 
    
         
            +
                    dir = "#{@package_dir}/xl/#{filename}s"
         
     | 
| 
       142 
99 
     | 
    
         | 
| 
       143 
     | 
    
         
            -
                     
     | 
| 
       144 
     | 
    
         
            -
             
     | 
| 
       145 
     | 
    
         
            -
                      object.set_xml_writer("#{ 
     | 
| 
       146 
     | 
    
         
            -
                      index += 1
         
     | 
| 
      
 100 
     | 
    
         
            +
                    objects.each_with_index do |object, index|
         
     | 
| 
      
 101 
     | 
    
         
            +
                      FileUtils.mkdir_p(dir)
         
     | 
| 
      
 102 
     | 
    
         
            +
                      object.set_xml_writer("#{dir}/#{filename}#{index+1}.xml")
         
     | 
| 
       147 
103 
     | 
    
         
             
                      object.assemble_xml_file
         
     | 
| 
       148 
104 
     | 
    
         
             
                    end
         
     | 
| 
       149 
105 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -152,33 +108,14 @@ module Writexlsx 
     | 
|
| 
       152 
108 
     | 
    
         
             
                  # Write the comment VML files.
         
     | 
| 
       153 
109 
     | 
    
         
             
                  #
         
     | 
| 
       154 
110 
     | 
    
         
             
                  def write_vml_files
         
     | 
| 
       155 
     | 
    
         
            -
                     
     | 
| 
       156 
     | 
    
         
            -
                    @workbook.worksheets.each do |worksheet|
         
     | 
| 
       157 
     | 
    
         
            -
                      next unless worksheet.has_vml?
         
     | 
| 
       158 
     | 
    
         
            -
                      FileUtils.mkdir_p("#{@package_dir}/xl/drawings")
         
     | 
| 
       159 
     | 
    
         
            -
             
     | 
| 
       160 
     | 
    
         
            -
                      vml = Package::Vml.new
         
     | 
| 
       161 
     | 
    
         
            -
                      vml.set_xml_writer("#{@package_dir}/xl/drawings/vmlDrawing#{index}.vml")
         
     | 
| 
       162 
     | 
    
         
            -
                      index += 1
         
     | 
| 
       163 
     | 
    
         
            -
                      vml.assemble_xml_file(worksheet)
         
     | 
| 
       164 
     | 
    
         
            -
                    end
         
     | 
| 
      
 111 
     | 
    
         
            +
                    @workbook.worksheets.write_vml_files(@package_dir)
         
     | 
| 
       165 
112 
     | 
    
         
             
                  end
         
     | 
| 
       166 
113 
     | 
    
         | 
| 
       167 
114 
     | 
    
         
             
                  #
         
     | 
| 
       168 
115 
     | 
    
         
             
                  # Write the comment files.
         
     | 
| 
       169 
116 
     | 
    
         
             
                  #
         
     | 
| 
       170 
117 
     | 
    
         
             
                  def write_comment_files
         
     | 
| 
       171 
     | 
    
         
            -
                     
     | 
| 
       172 
     | 
    
         
            -
                    @workbook.worksheets.each do |worksheet|
         
     | 
| 
       173 
     | 
    
         
            -
                      next unless worksheet.has_comments?
         
     | 
| 
       174 
     | 
    
         
            -
             
     | 
| 
       175 
     | 
    
         
            -
                      FileUtils.mkdir_p("#{@package_dir}/xl/drawings")
         
     | 
| 
       176 
     | 
    
         
            -
             
     | 
| 
       177 
     | 
    
         
            -
                      worksheet.comments_xml_writer = "#{@package_dir}/xl/comments#{index}.xml"
         
     | 
| 
       178 
     | 
    
         
            -
                      index += 1
         
     | 
| 
       179 
     | 
    
         
            -
             
     | 
| 
       180 
     | 
    
         
            -
                      worksheet.comments_assemble_xml_file
         
     | 
| 
       181 
     | 
    
         
            -
                    end
         
     | 
| 
      
 118 
     | 
    
         
            +
                    @workbook.worksheets.write_comment_files(@package_dir)
         
     | 
| 
       182 
119 
     | 
    
         
             
                  end
         
     | 
| 
       183 
120 
     | 
    
         | 
| 
       184 
121 
     | 
    
         
             
                  #
         
     | 
| 
         @@ -206,31 +143,27 @@ module Writexlsx 
     | 
|
| 
       206 
143 
     | 
    
         
             
                    FileUtils.mkdir_p("#{@package_dir}/docProps")
         
     | 
| 
       207 
144 
     | 
    
         | 
| 
       208 
145 
     | 
    
         
             
                    # Add the Worksheet heading pairs.
         
     | 
| 
       209 
     | 
    
         
            -
                    app.add_heading_pair(['Worksheets', @ 
     | 
| 
      
 146 
     | 
    
         
            +
                    app.add_heading_pair(['Worksheets', @workbook.worksheets.reject {|s| s.is_chartsheet?}.count])
         
     | 
| 
       210 
147 
     | 
    
         | 
| 
       211 
148 
     | 
    
         
             
                    # Add the Chartsheet heading pairs.
         
     | 
| 
       212 
     | 
    
         
            -
                    app.add_heading_pair(['Charts', @chartsheet_count])
         
     | 
| 
      
 149 
     | 
    
         
            +
                    app.add_heading_pair(['Charts', @workbook.chartsheet_count])
         
     | 
| 
       213 
150 
     | 
    
         | 
| 
       214 
151 
     | 
    
         
             
                    # Add the Worksheet parts.
         
     | 
| 
       215 
     | 
    
         
            -
                    @workbook.worksheets. 
     | 
| 
       216 
     | 
    
         
            -
                       
     | 
| 
       217 
     | 
    
         
            -
                      app.add_part_name(worksheet.name)
         
     | 
| 
       218 
     | 
    
         
            -
                    end
         
     | 
| 
      
 152 
     | 
    
         
            +
                    @workbook.worksheets.reject { |sheet| sheet.is_chartsheet? }.
         
     | 
| 
      
 153 
     | 
    
         
            +
                      each { |sheet| app.add_part_name(sheet.name) }
         
     | 
| 
       219 
154 
     | 
    
         | 
| 
       220 
155 
     | 
    
         
             
                    # Add the Chartsheet parts.
         
     | 
| 
       221 
     | 
    
         
            -
                    @workbook.worksheets. 
     | 
| 
       222 
     | 
    
         
            -
                       
     | 
| 
       223 
     | 
    
         
            -
                      app.add_part_name(worksheet.name)
         
     | 
| 
       224 
     | 
    
         
            -
                    end
         
     | 
| 
      
 156 
     | 
    
         
            +
                    @workbook.worksheets.select { |sheet| sheet.is_chartsheet? }.
         
     | 
| 
      
 157 
     | 
    
         
            +
                      each { |sheet| app.add_part_name(sheet.name) }
         
     | 
| 
       225 
158 
     | 
    
         | 
| 
       226 
159 
     | 
    
         
             
                    # Add the Named Range heading pairs.
         
     | 
| 
       227 
     | 
    
         
            -
                    range_count = @named_ranges.size
         
     | 
| 
      
 160 
     | 
    
         
            +
                    range_count = @workbook.named_ranges.size
         
     | 
| 
       228 
161 
     | 
    
         
             
                    if range_count != 0
         
     | 
| 
       229 
162 
     | 
    
         
             
                      app.add_heading_pair([ 'Named Ranges', range_count ])
         
     | 
| 
       230 
163 
     | 
    
         
             
                    end
         
     | 
| 
       231 
164 
     | 
    
         | 
| 
       232 
165 
     | 
    
         
             
                    # Add the Named Ranges parts.
         
     | 
| 
       233 
     | 
    
         
            -
                    @named_ranges.each { |named_range| app.add_part_name(named_range) }
         
     | 
| 
      
 166 
     | 
    
         
            +
                    @workbook.named_ranges.each { |named_range| app.add_part_name(named_range) }
         
     | 
| 
       234 
167 
     | 
    
         | 
| 
       235 
168 
     | 
    
         
             
                    app.set_properties(properties)
         
     | 
| 
       236 
169 
     | 
    
         | 
| 
         @@ -258,27 +191,23 @@ module Writexlsx 
     | 
|
| 
       258 
191 
     | 
    
         
             
                    content = Package::ContentTypes.new
         
     | 
| 
       259 
192 
     | 
    
         | 
| 
       260 
193 
     | 
    
         
             
                    content.add_image_types(@workbook.image_types)
         
     | 
| 
       261 
     | 
    
         
            -
             
     | 
| 
       262 
     | 
    
         
            -
             
     | 
| 
       263 
     | 
    
         
            -
             
     | 
| 
       264 
     | 
    
         
            -
                     
     | 
| 
       265 
     | 
    
         
            -
             
     | 
| 
       266 
     | 
    
         
            -
             
     | 
| 
       267 
     | 
    
         
            -
             
     | 
| 
       268 
     | 
    
         
            -
                      else
         
     | 
| 
       269 
     | 
    
         
            -
                        content.add_worksheet_name("sheet#{worksheet_index}")
         
     | 
| 
       270 
     | 
    
         
            -
                        worksheet_index += 1
         
     | 
| 
       271 
     | 
    
         
            -
                      end
         
     | 
| 
      
 194 
     | 
    
         
            +
                    @workbook.worksheets.reject { |sheet| sheet.is_chartsheet? }.
         
     | 
| 
      
 195 
     | 
    
         
            +
                      each_with_index do |sheet, index|
         
     | 
| 
      
 196 
     | 
    
         
            +
                      content.add_worksheet_name("sheet#{index+1}")
         
     | 
| 
      
 197 
     | 
    
         
            +
                    end
         
     | 
| 
      
 198 
     | 
    
         
            +
                    @workbook.worksheets.select { |sheet| sheet.is_chartsheet? }.
         
     | 
| 
      
 199 
     | 
    
         
            +
                      each_with_index do |sheet, index|
         
     | 
| 
      
 200 
     | 
    
         
            +
                      content.add_chartsheet_name("sheet#{index+1}")
         
     | 
| 
       272 
201 
     | 
    
         
             
                    end
         
     | 
| 
       273 
202 
     | 
    
         | 
| 
       274 
     | 
    
         
            -
                    (1 .. @ 
     | 
| 
       275 
     | 
    
         
            -
                    (1 .. @ 
     | 
| 
      
 203 
     | 
    
         
            +
                    (1 .. @workbook.charts.size).each { |i| content.add_chart_name("chart#{i}") }
         
     | 
| 
      
 204 
     | 
    
         
            +
                    (1 .. @workbook.drawings.size).each { |i| content.add_drawing_name("drawing#{i}") }
         
     | 
| 
       276 
205 
     | 
    
         | 
| 
       277 
     | 
    
         
            -
                    content.add_vml_name if @num_vml_files > 0
         
     | 
| 
      
 206 
     | 
    
         
            +
                    content.add_vml_name if @workbook.num_vml_files > 0
         
     | 
| 
       278 
207 
     | 
    
         | 
| 
       279 
208 
     | 
    
         
             
                    (1 .. @table_count).each { |i| content.add_table_name("table#{i}") }
         
     | 
| 
       280 
209 
     | 
    
         | 
| 
       281 
     | 
    
         
            -
                    (1 .. @num_comment_files).each { |i| content.add_comment_name("comments#{i}") }
         
     | 
| 
      
 210 
     | 
    
         
            +
                    (1 .. @workbook.num_comment_files).each { |i| content.add_comment_name("comments#{i}") }
         
     | 
| 
       282 
211 
     | 
    
         | 
| 
       283 
212 
     | 
    
         
             
                    # Add the sharedString rel if there is string data in the workbook.
         
     | 
| 
       284 
213 
     | 
    
         
             
                    content.add_shared_strings unless @workbook.shared_strings_empty?
         
     | 
| 
         @@ -294,32 +223,15 @@ module Writexlsx 
     | 
|
| 
       294 
223 
     | 
    
         
             
                  # Write the style xml file.
         
     | 
| 
       295 
224 
     | 
    
         
             
                  #
         
     | 
| 
       296 
225 
     | 
    
         
             
                  def write_styles_file
         
     | 
| 
       297 
     | 
    
         
            -
                    dir              = @package_dir
         
     | 
| 
       298 
     | 
    
         
            -
                    xf_formats       = @workbook.xf_formats
         
     | 
| 
       299 
     | 
    
         
            -
                    palette          = @workbook.palette
         
     | 
| 
       300 
     | 
    
         
            -
                    font_count       = @workbook.font_count
         
     | 
| 
       301 
     | 
    
         
            -
                    num_format_count = @workbook.num_format_count
         
     | 
| 
       302 
     | 
    
         
            -
                    border_count     = @workbook.border_count
         
     | 
| 
       303 
     | 
    
         
            -
                    fill_count       = @workbook.fill_count
         
     | 
| 
       304 
     | 
    
         
            -
                    custom_colors    = @workbook.custom_colors
         
     | 
| 
       305 
     | 
    
         
            -
                    dxf_formats      = @workbook.dxf_formats
         
     | 
| 
      
 226 
     | 
    
         
            +
                    dir              = "#{@package_dir}/xl"
         
     | 
| 
       306 
227 
     | 
    
         | 
| 
       307 
228 
     | 
    
         
             
                    rels = Package::Styles.new
         
     | 
| 
       308 
229 
     | 
    
         | 
| 
       309 
     | 
    
         
            -
                    FileUtils.mkdir_p( 
     | 
| 
      
 230 
     | 
    
         
            +
                    FileUtils.mkdir_p(dir)
         
     | 
| 
       310 
231 
     | 
    
         | 
| 
       311 
     | 
    
         
            -
                    rels.set_style_properties(
         
     | 
| 
       312 
     | 
    
         
            -
             
     | 
| 
       313 
     | 
    
         
            -
             
     | 
| 
       314 
     | 
    
         
            -
                        font_count,
         
     | 
| 
       315 
     | 
    
         
            -
                        num_format_count,
         
     | 
| 
       316 
     | 
    
         
            -
                        border_count,
         
     | 
| 
       317 
     | 
    
         
            -
                        fill_count,
         
     | 
| 
       318 
     | 
    
         
            -
                        custom_colors,
         
     | 
| 
       319 
     | 
    
         
            -
                        dxf_formats
         
     | 
| 
       320 
     | 
    
         
            -
                    )
         
     | 
| 
       321 
     | 
    
         
            -
             
     | 
| 
       322 
     | 
    
         
            -
                    rels.set_xml_writer("#{@package_dir}/xl/styles.xml" )
         
     | 
| 
      
 232 
     | 
    
         
            +
                    rels.set_style_properties(*@workbook.style_properties)
         
     | 
| 
      
 233 
     | 
    
         
            +
             
     | 
| 
      
 234 
     | 
    
         
            +
                    rels.set_xml_writer("#{dir}/styles.xml" )
         
     | 
| 
       323 
235 
     | 
    
         
             
                    rels.assemble_xml_file
         
     | 
| 
       324 
236 
     | 
    
         
             
                  end
         
     | 
| 
       325 
237 
     | 
    
         | 
| 
         @@ -339,23 +251,7 @@ module Writexlsx 
     | 
|
| 
       339 
251 
     | 
    
         
             
                  # Write the table files.
         
     | 
| 
       340 
252 
     | 
    
         
             
                  #
         
     | 
| 
       341 
253 
     | 
    
         
             
                  def write_table_files
         
     | 
| 
       342 
     | 
    
         
            -
                     
     | 
| 
       343 
     | 
    
         
            -
             
     | 
| 
       344 
     | 
    
         
            -
                    index = 1
         
     | 
| 
       345 
     | 
    
         
            -
                    @workbook.worksheets.each do |worksheet|
         
     | 
| 
       346 
     | 
    
         
            -
                      table_props = worksheet.tables
         
     | 
| 
       347 
     | 
    
         
            -
             
     | 
| 
       348 
     | 
    
         
            -
                      next if table_props.empty?
         
     | 
| 
       349 
     | 
    
         
            -
             
     | 
| 
       350 
     | 
    
         
            -
                      FileUtils.mkdir_p("#{dir}/xl/tables")
         
     | 
| 
       351 
     | 
    
         
            -
             
     | 
| 
       352 
     | 
    
         
            -
                      table_props.each do |table|
         
     | 
| 
       353 
     | 
    
         
            -
                        table.set_xml_writer("#{dir}/xl/tables/table#{index}.xml")
         
     | 
| 
       354 
     | 
    
         
            -
                        table.assemble_xml_file
         
     | 
| 
       355 
     | 
    
         
            -
                        index += 1
         
     | 
| 
       356 
     | 
    
         
            -
                        @table_count += 1
         
     | 
| 
       357 
     | 
    
         
            -
                      end
         
     | 
| 
       358 
     | 
    
         
            -
                    end
         
     | 
| 
      
 254 
     | 
    
         
            +
                    @workbook.worksheets.write_table_files(@package_dir)
         
     | 
| 
       359 
255 
     | 
    
         
             
                  end
         
     | 
| 
       360 
256 
     | 
    
         | 
| 
       361 
257 
     | 
    
         
             
                  #
         
     | 
| 
         @@ -415,103 +311,21 @@ module Writexlsx 
     | 
|
| 
       415 
311 
     | 
    
         
             
                  # data such as hyperlinks or drawings.
         
     | 
| 
       416 
312 
     | 
    
         
             
                  #
         
     | 
| 
       417 
313 
     | 
    
         
             
                  def write_worksheet_rels_files
         
     | 
| 
       418 
     | 
    
         
            -
                     
     | 
| 
       419 
     | 
    
         
            -
             
     | 
| 
       420 
     | 
    
         
            -
                    index = 0
         
     | 
| 
       421 
     | 
    
         
            -
                    @workbook.worksheets.each do |worksheet|
         
     | 
| 
       422 
     | 
    
         
            -
                      next if worksheet.is_chartsheet?
         
     | 
| 
       423 
     | 
    
         
            -
             
     | 
| 
       424 
     | 
    
         
            -
                      index += 1
         
     | 
| 
       425 
     | 
    
         
            -
             
     | 
| 
       426 
     | 
    
         
            -
                      external_links = [
         
     | 
| 
       427 
     | 
    
         
            -
                        worksheet.external_hyper_links,
         
     | 
| 
       428 
     | 
    
         
            -
                        worksheet.external_drawing_links,
         
     | 
| 
       429 
     | 
    
         
            -
                        worksheet.external_vml_links,
         
     | 
| 
       430 
     | 
    
         
            -
                        worksheet.external_table_links,
         
     | 
| 
       431 
     | 
    
         
            -
                        worksheet.external_comment_links
         
     | 
| 
       432 
     | 
    
         
            -
                      ].select {|a| a != []}
         
     | 
| 
       433 
     | 
    
         
            -
             
     | 
| 
       434 
     | 
    
         
            -
                      next if external_links.size == 0
         
     | 
| 
       435 
     | 
    
         
            -
             
     | 
| 
       436 
     | 
    
         
            -
                      # Create the worksheet .rels dir if required.
         
     | 
| 
       437 
     | 
    
         
            -
                      if !existing_rels_dir
         
     | 
| 
       438 
     | 
    
         
            -
                        FileUtils.mkdir_p("#{@package_dir}/xl/worksheets")
         
     | 
| 
       439 
     | 
    
         
            -
                        FileUtils.mkdir_p("#{@package_dir}/xl/worksheets/_rels")
         
     | 
| 
       440 
     | 
    
         
            -
                        existing_rels_dir = true
         
     | 
| 
       441 
     | 
    
         
            -
                      end
         
     | 
| 
       442 
     | 
    
         
            -
             
     | 
| 
       443 
     | 
    
         
            -
                      rels = Package::Relationships.new
         
     | 
| 
       444 
     | 
    
         
            -
             
     | 
| 
       445 
     | 
    
         
            -
                      external_links.each do |link_datas|
         
     | 
| 
       446 
     | 
    
         
            -
                        link_datas.each do |link_data|
         
     | 
| 
       447 
     | 
    
         
            -
                          type, target, target_mode = link_data
         
     | 
| 
       448 
     | 
    
         
            -
                          rels.add_worksheet_relationship(type, target, target_mode)
         
     | 
| 
       449 
     | 
    
         
            -
                        end
         
     | 
| 
       450 
     | 
    
         
            -
                      end
         
     | 
| 
       451 
     | 
    
         
            -
             
     | 
| 
       452 
     | 
    
         
            -
                      # Create the .rels file such as /xl/worksheets/_rels/sheet1.xml.rels.
         
     | 
| 
       453 
     | 
    
         
            -
                      rels.set_xml_writer(
         
     | 
| 
       454 
     | 
    
         
            -
                        "#{@package_dir}/xl/worksheets/_rels/sheet#{index}.xml.rels")
         
     | 
| 
       455 
     | 
    
         
            -
                      rels.assemble_xml_file
         
     | 
| 
       456 
     | 
    
         
            -
                    end
         
     | 
| 
      
 314 
     | 
    
         
            +
                    @workbook.worksheets.write_worksheet_rels_files(@package_dir)
         
     | 
| 
       457 
315 
     | 
    
         
             
                  end
         
     | 
| 
       458 
316 
     | 
    
         | 
| 
       459 
317 
     | 
    
         
             
                  #
         
     | 
| 
       460 
318 
     | 
    
         
             
                  # Write the chartsheet .rels files for links to drawing files.
         
     | 
| 
       461 
319 
     | 
    
         
             
                  #
         
     | 
| 
       462 
320 
     | 
    
         
             
                  def write_chartsheet_rels_files
         
     | 
| 
       463 
     | 
    
         
            -
                     
     | 
| 
       464 
     | 
    
         
            -
                    index = 0
         
     | 
| 
       465 
     | 
    
         
            -
                    @workbook.worksheets.each do |worksheet|
         
     | 
| 
       466 
     | 
    
         
            -
                      next unless worksheet.is_chartsheet?
         
     | 
| 
       467 
     | 
    
         
            -
                      index += 1
         
     | 
| 
       468 
     | 
    
         
            -
             
     | 
| 
       469 
     | 
    
         
            -
                      external_links = worksheet.external_drawing_links
         
     | 
| 
       470 
     | 
    
         
            -
             
     | 
| 
       471 
     | 
    
         
            -
                      next if external_links.empty?
         
     | 
| 
       472 
     | 
    
         
            -
             
     | 
| 
       473 
     | 
    
         
            -
                      # Create the chartsheet .rels dir if required.
         
     | 
| 
       474 
     | 
    
         
            -
                      if !existing_rels_dir
         
     | 
| 
       475 
     | 
    
         
            -
                        FileUtils.mkdir_p("#{@package_dir}/xl/chartsheets/_rels")
         
     | 
| 
       476 
     | 
    
         
            -
                        existing_rels_dir = true
         
     | 
| 
       477 
     | 
    
         
            -
                      end
         
     | 
| 
       478 
     | 
    
         
            -
             
     | 
| 
       479 
     | 
    
         
            -
                      rels = Package::Relationships.new
         
     | 
| 
       480 
     | 
    
         
            -
             
     | 
| 
       481 
     | 
    
         
            -
                      external_links.each do |link_data|
         
     | 
| 
       482 
     | 
    
         
            -
                        rels.add_worksheet_relationship(*link_data)
         
     | 
| 
       483 
     | 
    
         
            -
                      end
         
     | 
| 
       484 
     | 
    
         
            -
             
     | 
| 
       485 
     | 
    
         
            -
                      # Create the .rels file such as /xl/chartsheets/_rels/sheet1.xml.rels.
         
     | 
| 
       486 
     | 
    
         
            -
                      rels.set_xml_writer(
         
     | 
| 
       487 
     | 
    
         
            -
                          "#{@package_dir}/xl/chartsheets/_rels/sheet#{index}.xml.rels")
         
     | 
| 
       488 
     | 
    
         
            -
                      rels.assemble_xml_file
         
     | 
| 
       489 
     | 
    
         
            -
                    end
         
     | 
| 
      
 321 
     | 
    
         
            +
                    @workbook.worksheets.write_chartsheet_rels_files(@package_dir)
         
     | 
| 
       490 
322 
     | 
    
         
             
                  end
         
     | 
| 
       491 
323 
     | 
    
         | 
| 
       492 
324 
     | 
    
         
             
                  #
         
     | 
| 
       493 
325 
     | 
    
         
             
                  # Write the drawing .rels files for worksheets that contain charts or drawings.
         
     | 
| 
       494 
326 
     | 
    
         
             
                  #
         
     | 
| 
       495 
327 
     | 
    
         
             
                  def write_drawing_rels_files
         
     | 
| 
       496 
     | 
    
         
            -
                     
     | 
| 
       497 
     | 
    
         
            -
                    @workbook.worksheets.each do |worksheet|
         
     | 
| 
       498 
     | 
    
         
            -
                      next if worksheet.drawing_links.empty?
         
     | 
| 
       499 
     | 
    
         
            -
                      index += 1
         
     | 
| 
       500 
     | 
    
         
            -
             
     | 
| 
       501 
     | 
    
         
            -
                      # Create the drawing .rels dir if required.
         
     | 
| 
       502 
     | 
    
         
            -
                      FileUtils.mkdir_p("#{@package_dir}/xl/drawings/_rels")
         
     | 
| 
       503 
     | 
    
         
            -
             
     | 
| 
       504 
     | 
    
         
            -
                      rels = Package::Relationships.new
         
     | 
| 
       505 
     | 
    
         
            -
             
     | 
| 
       506 
     | 
    
         
            -
                      worksheet.drawing_links.each do |drawing_data|
         
     | 
| 
       507 
     | 
    
         
            -
                        rels.add_document_relationship(*drawing_data)
         
     | 
| 
       508 
     | 
    
         
            -
                      end
         
     | 
| 
       509 
     | 
    
         
            -
             
     | 
| 
       510 
     | 
    
         
            -
                      # Create the .rels file such as /xl/drawings/_rels/sheet1.xml.rels.
         
     | 
| 
       511 
     | 
    
         
            -
                      rels.set_xml_writer(
         
     | 
| 
       512 
     | 
    
         
            -
                                          "#{@package_dir}/xl/drawings/_rels/drawing#{index}.xml.rels")
         
     | 
| 
       513 
     | 
    
         
            -
                      rels.assemble_xml_file
         
     | 
| 
       514 
     | 
    
         
            -
                    end
         
     | 
| 
      
 328 
     | 
    
         
            +
                    @workbook.worksheets.write_drawing_rels_files(@package_dir)
         
     | 
| 
       515 
329 
     | 
    
         
             
                  end
         
     | 
| 
       516 
330 
     | 
    
         | 
| 
       517 
331 
     | 
    
         | 
| 
         @@ -519,18 +333,11 @@ module Writexlsx 
     | 
|
| 
       519 
333 
     | 
    
         
             
                  # Write the /xl/media/image?.xml files.
         
     | 
| 
       520 
334 
     | 
    
         
             
                  #
         
     | 
| 
       521 
335 
     | 
    
         
             
                  def add_image_files
         
     | 
| 
       522 
     | 
    
         
            -
                     
     | 
| 
       523 
     | 
    
         
            -
             
     | 
| 
       524 
     | 
    
         
            -
                    index    = 1
         
     | 
| 
       525 
     | 
    
         
            -
             
     | 
| 
       526 
     | 
    
         
            -
                    FileUtils.mkdir_p("#{@package_dir}/xl/media")
         
     | 
| 
       527 
     | 
    
         
            -
             
     | 
| 
       528 
     | 
    
         
            -
                    @workbook.images.each do |image|
         
     | 
| 
       529 
     | 
    
         
            -
                      filename  = image[0]
         
     | 
| 
       530 
     | 
    
         
            -
                      extension = ".#{image[1]}"
         
     | 
| 
      
 336 
     | 
    
         
            +
                    dir = "#{@package_dir}/xl/media"
         
     | 
| 
       531 
337 
     | 
    
         | 
| 
       532 
     | 
    
         
            -
             
     | 
| 
       533 
     | 
    
         
            -
                       
     | 
| 
      
 338 
     | 
    
         
            +
                    @workbook.images.each_with_index do |image, index|
         
     | 
| 
      
 339 
     | 
    
         
            +
                      FileUtils.mkdir_p(dir)
         
     | 
| 
      
 340 
     | 
    
         
            +
                      FileUtils.cp(image[0], "#{dir}/image#{index+1}.#{image[1]}")
         
     | 
| 
       534 
341 
     | 
    
         
             
                    end
         
     | 
| 
       535 
342 
     | 
    
         
             
                  end
         
     | 
| 
       536 
343 
     | 
    
         | 
| 
         @@ -24,7 +24,7 @@ module Writexlsx 
     | 
|
| 
       24 
24 
     | 
    
         
             
                    end
         
     | 
| 
       25 
25 
     | 
    
         
             
                  end
         
     | 
| 
       26 
26 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
                  attr_reader :id
         
     | 
| 
      
 27 
     | 
    
         
            +
            #      attr_reader :id
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
       29 
29 
     | 
    
         
             
                  def initialize(worksheet, id, *args)
         
     | 
| 
       30 
30 
     | 
    
         
             
                    @worksheet = worksheet
         
     | 
| 
         @@ -61,16 +61,11 @@ module Writexlsx 
     | 
|
| 
       61 
61 
     | 
    
         
             
                  def assemble_xml_file
         
     | 
| 
       62 
62 
     | 
    
         
             
                    write_xml_declaration
         
     | 
| 
       63 
63 
     | 
    
         
             
                    # Write the table element.
         
     | 
| 
       64 
     | 
    
         
            -
                     
     | 
| 
       65 
     | 
    
         
            -
             
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
                     
     | 
| 
       69 
     | 
    
         
            -
                    # Write the tableStyleInfo element.
         
     | 
| 
       70 
     | 
    
         
            -
                    write_table_style_info
         
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
                    # Close the table tag
         
     | 
| 
       73 
     | 
    
         
            -
                    @writer.end_tag('table')
         
     | 
| 
      
 64 
     | 
    
         
            +
                    @writer.tag_elements('table', write_table_attributes) do
         
     | 
| 
      
 65 
     | 
    
         
            +
                      write_auto_filter
         
     | 
| 
      
 66 
     | 
    
         
            +
                      write_table_columns
         
     | 
| 
      
 67 
     | 
    
         
            +
                      write_table_style_info
         
     | 
| 
      
 68 
     | 
    
         
            +
                    end
         
     | 
| 
       74 
69 
     | 
    
         | 
| 
       75 
70 
     | 
    
         
             
                    # Close the XML writer object and filehandle.
         
     | 
| 
       76 
71 
     | 
    
         
             
                    @writer.crlf
         
     | 
| 
         @@ -290,7 +285,7 @@ module Writexlsx 
     | 
|
| 
       290 
285 
     | 
    
         
             
                      @name = @param[:name]
         
     | 
| 
       291 
286 
     | 
    
         
             
                    else
         
     | 
| 
       292 
287 
     | 
    
         
             
                      # Set a default name.
         
     | 
| 
       293 
     | 
    
         
            -
                      @name = "Table#{id}"
         
     | 
| 
      
 288 
     | 
    
         
            +
                      @name = "Table#{@id}"
         
     | 
| 
       294 
289 
     | 
    
         
             
                    end
         
     | 
| 
       295 
290 
     | 
    
         
             
                  end
         
     | 
| 
       296 
291 
     | 
    
         | 
| 
         @@ -310,16 +305,13 @@ module Writexlsx 
     | 
|
| 
       310 
305 
     | 
    
         
             
                    @writer.xml_decl('UTF-8', 1)
         
     | 
| 
       311 
306 
     | 
    
         
             
                  end
         
     | 
| 
       312 
307 
     | 
    
         | 
| 
       313 
     | 
    
         
            -
                   
     | 
| 
       314 
     | 
    
         
            -
                  # Write the <table> element.
         
     | 
| 
       315 
     | 
    
         
            -
                  #
         
     | 
| 
       316 
     | 
    
         
            -
                  def write_table
         
     | 
| 
      
 308 
     | 
    
         
            +
                  def write_table_attributes
         
     | 
| 
       317 
309 
     | 
    
         
             
                    schema           = 'http://schemas.openxmlformats.org/'
         
     | 
| 
       318 
310 
     | 
    
         
             
                    xmlns            = "#{schema}spreadsheetml/2006/main"
         
     | 
| 
       319 
311 
     | 
    
         | 
| 
       320 
312 
     | 
    
         
             
                    attributes = [
         
     | 
| 
       321 
313 
     | 
    
         
             
                                  'xmlns',       xmlns,
         
     | 
| 
       322 
     | 
    
         
            -
                                  'id',          id,
         
     | 
| 
      
 314 
     | 
    
         
            +
                                  'id',          @id,
         
     | 
| 
       323 
315 
     | 
    
         
             
                                  'name',        @name,
         
     | 
| 
       324 
316 
     | 
    
         
             
                                  'displayName', @name,
         
     | 
| 
       325 
317 
     | 
    
         
             
                                  'ref',         @range
         
     | 
| 
         @@ -334,7 +326,6 @@ module Writexlsx 
     | 
|
| 
       334 
326 
     | 
    
         
             
                    else
         
     | 
| 
       335 
327 
     | 
    
         
             
                      attributes << 'totalsRowShown' << 0
         
     | 
| 
       336 
328 
     | 
    
         
             
                    end
         
     | 
| 
       337 
     | 
    
         
            -
                    @writer.start_tag('table', attributes)
         
     | 
| 
       338 
329 
     | 
    
         
             
                  end
         
     | 
| 
       339 
330 
     | 
    
         | 
| 
       340 
331 
     | 
    
         
             
                  #
         
     |