Class: Writexlsx::Sheets

Inherits:
Array
  • Object
show all
Includes:
Utility
Defined in:
lib/write_xlsx/sheets.rb

Constant Summary collapse

BASE_NAME =

:nodoc:

{ sheet: 'Sheet', chart: 'Chart' }

Constants included from Utility

Utility::CHAR_WIDTHS, Utility::COL_MAX, Utility::PERL_TRUE_VALUES, Utility::ROW_MAX, Utility::SHEETNAME_MAX, Utility::STR_MAX

Instance Method Summary collapse

Methods included from Utility

#absolute_char, #check_dimensions, #check_dimensions_and_update_max_min_values, #check_parameter, #color, #convert_date_time, #convert_font_args, #dash_types, delete_files, #escape_url, #fill_properties, #float_to_str, #get_font_latin_attributes, #get_font_style_attributes, #get_image_properties, #layout_properties, #legend_properties, #line_fill_properties, #line_properties, #palette_color, #params_to_font, #pattern_properties, #pixels_to_points, #process_bmp, #process_gif, #process_jpg, #process_png, #process_workbook_options, #ptrue?, #put_deprecate_message, #quote_sheetname, #r_id_attributes, #row_col_notation, #shape_style_base, #store_col_max_min_values, #store_row_max_min_values, #substitute_cellref, #underline_attributes, #v_shape_attributes_base, #v_shape_style_base, #value_or_raise, #write_a_body_pr, #write_a_def_rpr, #write_a_end_para_rpr, #write_a_lst_style, #write_a_p_formula, #write_a_p_pr_formula, #write_a_solid_fill, #write_a_srgb_clr, #write_anchor, #write_auto_fill, #write_color, #write_comment_path, #write_def_rpr_r_pr_common, #write_div, #write_fill, #write_font, #write_stroke, #write_tx_pr, #write_xml_declaration, #xl_cell_to_rowcol, #xl_col_to_name, #xl_range, #xl_range_formula, #xl_rowcol_to_cell, #xl_string_pixel_width, #xml_str

Constructor Details

#initializeSheets

Returns a new instance of Sheets.



13
14
15
# File 'lib/write_xlsx/sheets.rb', line 13

def initialize
  super([])
end

Instance Method Details

#chartname_countObject



25
26
27
# File 'lib/write_xlsx/sheets.rb', line 25

def chartname_count
  chartsheet_count
end

#chartsheet_countObject



17
18
19
# File 'lib/write_xlsx/sheets.rb', line 17

def chartsheet_count
  chartsheets.count
end

#chartsheetsObject



201
202
203
# File 'lib/write_xlsx/sheets.rb', line 201

def chartsheets
  self.select { |worksheet| worksheet.is_chartsheet? }
end

#index_by_name(sheetname) ⇒ Object



192
193
194
195
# File 'lib/write_xlsx/sheets.rb', line 192

def index_by_name(sheetname)
  name = sheetname.sub(/^'/, '').sub(/'$/, '')
  collect { |sheet| sheet.name }.index(name)
end

#make_and_check_sheet_chart_name(type, name) ⇒ Object



29
30
31
32
33
34
35
# File 'lib/write_xlsx/sheets.rb', line 29

def make_and_check_sheet_chart_name(type, name)
  count = sheet_chart_count(type)
  name = "#{BASE_NAME[type]}#{count + 1}" unless ptrue?(name)

  check_valid_sheetname(name)
  name
end

#sheetname_countObject



21
22
23
# File 'lib/write_xlsx/sheets.rb', line 21

def sheetname_count
  count - chartname_count
end

#tablesObject



184
185
186
# File 'lib/write_xlsx/sheets.rb', line 184

def tables
  inject([]) { |tables, sheet| tables + sheet.tables }.flatten
end

#tables_countObject



188
189
190
# File 'lib/write_xlsx/sheets.rb', line 188

def tables_count
  tables.count
end

#visible_firstObject



205
206
207
# File 'lib/write_xlsx/sheets.rb', line 205

def visible_first
  reject { |worksheet| worksheet.hidden? }.first
end

#worksheetsObject



197
198
199
# File 'lib/write_xlsx/sheets.rb', line 197

def worksheets
  reject { |worksheet| worksheet.is_chartsheet? }
end

#write_chartsheet_files(package_dir) ⇒ Object



54
55
56
57
58
59
# File 'lib/write_xlsx/sheets.rb', line 54

def write_chartsheet_files(package_dir)
  dir = "#{package_dir}/xl/chartsheets"
  chartsheets.each_with_index do |sheet, index|
    write_sheet_files(dir, sheet, index)
  end
end

#write_chartsheet_rels_files(package_dir) ⇒ Object



111
112
113
114
115
# File 'lib/write_xlsx/sheets.rb', line 111

def write_chartsheet_rels_files(package_dir)
  write_sheet_rels_files_base(
    chartsheets, "#{package_dir}/xl/chartsheets/_rels", 'sheet'
  )
end

#write_comment_files(package_dir) ⇒ Object



91
92
93
94
95
96
97
98
# File 'lib/write_xlsx/sheets.rb', line 91

def write_comment_files(package_dir)
  self.select { |sheet| sheet.has_comments? }
      .each_with_index do |sheet, index|
    FileUtils.mkdir_p("#{package_dir}/xl/drawings")
    sheet.comments.set_xml_writer("#{package_dir}/xl/comments#{index + 1}.xml")
    sheet.comments.assemble_xml_file
  end
end

#write_drawing_rels_files(package_dir) ⇒ Object



117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/write_xlsx/sheets.rb', line 117

def write_drawing_rels_files(package_dir)
  dir = "#{package_dir}/xl/drawings/_rels"

  index = 0
  each do |sheet|
    index += 1 if !sheet.drawing_links[0].empty? || sheet.has_shapes?

    next if sheet.drawing_links[0].empty?

    FileUtils.mkdir_p(dir)

    rels = Package::Relationships.new

    sheet.drawing_links.each do |drawing_datas|
      drawing_datas.each do |drawing_data|
        rels.add_document_relationship(*drawing_data)
      end
    end

    # Create the .rels file such as /xl/drawings/_rels/sheet1.xml.rels.
    rels.set_xml_writer("#{dir}/drawing#{index}.xml.rels")
    rels.assemble_xml_file
  end
end

#write_sheet_rels_files_base(sheets, dir, body) ⇒ Object



164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
# File 'lib/write_xlsx/sheets.rb', line 164

def write_sheet_rels_files_base(sheets, dir, body)
  sheets.each_with_index do |sheet, index|
    next if sheet.external_links.empty?

    FileUtils.mkdir_p(dir)

    rels = Package::Relationships.new

    sheet.external_links.each do |link_datas|
      link_datas.each do |link_data|
        rels.add_worksheet_relationship(*link_data)
      end
    end

    # Create the .rels file such as /xl/worksheets/_rels/sheet1.xml.rels.
    rels.set_xml_writer("#{dir}/#{body}#{index + 1}.xml.rels")
    rels.assemble_xml_file
  end
end

#write_sheets(writer) ⇒ Object



37
38
39
40
41
42
43
44
45
# File 'lib/write_xlsx/sheets.rb', line 37

def write_sheets(writer)
  writer.tag_elements('sheets') do
    id_num = 1
    each do |sheet|
      write_sheet(writer, sheet, id_num)
      id_num += 1
    end
  end
end

#write_table_files(package_dir) ⇒ Object



100
101
102
103
104
105
106
107
108
109
# File 'lib/write_xlsx/sheets.rb', line 100

def write_table_files(package_dir)
  unless tables.empty?
    dir = "#{package_dir}/xl/tables"
    FileUtils.mkdir_p(dir)
    tables.each_with_index do |table, index|
      table.set_xml_writer("#{dir}/table#{index + 1}.xml")
      table.assemble_xml_file
    end
  end
end

#write_vml_drawing_rels_files(package_dir, worksheet, index) ⇒ Object



142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# File 'lib/write_xlsx/sheets.rb', line 142

def write_vml_drawing_rels_files(package_dir, worksheet, index)
  # Create the drawing .rels dir.
  dir = "#{package_dir}/xl/drawings/_rels"
  FileUtils.mkdir_p(dir)

  rels = Package::Relationships.new

  worksheet.vml_drawing_links.each do |drawing_data|
    rels.add_document_relationship(*drawing_data)
  end

  # Create the .rels file such as /xl/drawings/_rels/vmlDrawing1.vml.rels.
  rels.set_xml_writer("#{dir}/vmlDrawing#{index}.vml.rels")
  rels.assemble_xml_file
end

#write_vml_files(package_dir) ⇒ Object



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/write_xlsx/sheets.rb', line 61

def write_vml_files(package_dir)
  dir = "#{package_dir}/xl/drawings"
  index = 1
  each do |sheet|
    next if !sheet.has_vml? and !sheet.has_header_vml?

    FileUtils.mkdir_p(dir)

    if sheet.has_vml?
      vml = Package::Vml.new
      vml.set_xml_writer("#{dir}/vmlDrawing#{index}.vml")
      vml.assemble_xml_file(
        sheet.vml_data_id, sheet.vml_shape_id,
        sheet.sorted_comments, sheet.buttons_data
      )
      index += 1
    end
    next unless sheet.has_header_vml?

    vml = Package::Vml.new
    vml.set_xml_writer("#{dir}/vmlDrawing#{index}.vml")
    vml.assemble_xml_file(
      sheet.vml_header_id, sheet.vml_header_id * 1024,
      [], [], sheet.header_images_data
    )
    write_vml_drawing_rels_files(package_dir, sheet, index)
    index += 1
  end
end

#write_worksheet_files(package_dir) ⇒ Object



47
48
49
50
51
52
# File 'lib/write_xlsx/sheets.rb', line 47

def write_worksheet_files(package_dir)
  dir = "#{package_dir}/xl/worksheets"
  worksheets.each_with_index do |sheet, index|
    write_sheet_files(dir, sheet, index)
  end
end

#write_worksheet_rels_files(package_dir) ⇒ Object



158
159
160
161
162
# File 'lib/write_xlsx/sheets.rb', line 158

def write_worksheet_rels_files(package_dir)
  write_sheet_rels_files_base(
    worksheets, "#{package_dir}/xl/worksheets/_rels", 'sheet'
  )
end