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
|
#
|