write_xlsx 1.11.0 → 1.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/Changes +12 -0
- data/examples/shape_all.rb +1 -1
- data/lib/write_xlsx/chart/area.rb +1 -0
- data/lib/write_xlsx/chart/axis.rb +1 -0
- data/lib/write_xlsx/chart/bar.rb +1 -0
- data/lib/write_xlsx/chart/caption.rb +1 -0
- data/lib/write_xlsx/chart/column.rb +1 -0
- data/lib/write_xlsx/chart/doughnut.rb +1 -0
- data/lib/write_xlsx/chart/legend.rb +1 -0
- data/lib/write_xlsx/chart/line.rb +1 -0
- data/lib/write_xlsx/chart/pie.rb +15 -2
- data/lib/write_xlsx/chart/radar.rb +1 -0
- data/lib/write_xlsx/chart/scatter.rb +1 -0
- data/lib/write_xlsx/chart/series.rb +56 -4
- data/lib/write_xlsx/chart/stock.rb +1 -0
- data/lib/write_xlsx/chart.rb +107 -23
- data/lib/write_xlsx/chartsheet.rb +10 -1
- data/lib/write_xlsx/col_name.rb +7 -3
- data/lib/write_xlsx/colors.rb +20 -19
- data/lib/write_xlsx/format.rb +10 -8
- data/lib/write_xlsx/package/app.rb +9 -5
- data/lib/write_xlsx/package/comments.rb +2 -1
- data/lib/write_xlsx/package/conditional_format.rb +6 -6
- data/lib/write_xlsx/package/packager.rb +2 -3
- data/lib/write_xlsx/package/styles.rb +11 -13
- data/lib/write_xlsx/package/table.rb +74 -20
- data/lib/write_xlsx/package/xml_writer_simple.rb +32 -44
- data/lib/write_xlsx/sheets.rb +6 -2
- data/lib/write_xlsx/sparkline.rb +2 -2
- data/lib/write_xlsx/utility.rb +14 -12
- data/lib/write_xlsx/version.rb +1 -1
- data/lib/write_xlsx/workbook.rb +2 -3
- data/lib/write_xlsx/worksheet/cell_data.rb +17 -18
- data/lib/write_xlsx/worksheet/hyperlink.rb +2 -2
- data/lib/write_xlsx/worksheet.rb +90 -39
- data/write_xlsx.gemspec +2 -0
- metadata +31 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9dae4b31e210af6cea2f7df87d92e29d48e8b36d7408cfc0c542b4aa0fe4ea22
|
4
|
+
data.tar.gz: 3c1be9afcd157d1c7a4aabf6f0688b049a80699133e6a3d31d17874bce453b5a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7975e43767efe81a4d32819a62ce805d88c51c879e7456f9ea653be43521501bf79612d61ea95ab065efcf5bf7c43fa7f4c2e657a0ab09e211310200237faceb
|
7
|
+
data.tar.gz: 03f711b7f01ba88e9e84676ce442737bf8c7cd14db67cd04bdd50aa30eddaad850133d476e11b7a0c0ed25f485740810d6724e0449f7343cc10345bc67ba9c5c
|
data/.rubocop.yml
CHANGED
data/Changes
CHANGED
@@ -1,5 +1,17 @@
|
|
1
1
|
Change history of write_xlsx rubygem.
|
2
2
|
|
3
|
+
2023-12-26 v1.11.2
|
4
|
+
Fix issue where header images in chartsheets weren't displayed.
|
5
|
+
Add support for custom table total functions.
|
6
|
+
Add chart option to display N/A as empty cells.
|
7
|
+
Add support for leader lines to all chart types.
|
8
|
+
Fix issue where column formulas were overwritten by table data
|
9
|
+
add Worksheet#very_hidden method.
|
10
|
+
Add add trendline equation formatting for chart.
|
11
|
+
|
12
|
+
2023-08-09 v1.11.1
|
13
|
+
Fixed issue #110. Redefining costant Struct::ColInfo
|
14
|
+
|
3
15
|
2023-05-06 v1.11.0
|
4
16
|
Added support for simulated worksheet `autofit()`.
|
5
17
|
|
data/examples/shape_all.rb
CHANGED
@@ -218,7 +218,7 @@ shapes_list.each_line do |line|
|
|
218
218
|
line = line.chomp
|
219
219
|
next unless line =~ /^\w/ # Skip blank lines and comments.
|
220
220
|
|
221
|
-
sheet, name = line.split(
|
221
|
+
sheet, name = line.split("\t")
|
222
222
|
if last_sheet != sheet
|
223
223
|
worksheet = workbook.add_worksheet(sheet)
|
224
224
|
row = 2
|
data/lib/write_xlsx/chart/bar.rb
CHANGED
data/lib/write_xlsx/chart/pie.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
###############################################################################
|
4
5
|
#
|
@@ -122,8 +123,7 @@ module Writexlsx
|
|
122
123
|
# Write the <c:legend> element.
|
123
124
|
#
|
124
125
|
def write_legend
|
125
|
-
|
126
|
-
allowed = %w[right left top bottom]
|
126
|
+
allowed = %w[right left top bottom]
|
127
127
|
delete_series = @legend.delete_series || []
|
128
128
|
|
129
129
|
if @legend.position =~ /^overlay_/
|
@@ -206,6 +206,19 @@ module Writexlsx
|
|
206
206
|
def write_first_slice_ang
|
207
207
|
@writer.empty_tag('c:firstSliceAng', [['val', @rotation]])
|
208
208
|
end
|
209
|
+
|
210
|
+
#
|
211
|
+
# Write the <c:showLeaderLines> element. This is for Pie/Doughnut charts.
|
212
|
+
# Other chart types only supported leader lines after Excel 2015 via an
|
213
|
+
# extension element.
|
214
|
+
#
|
215
|
+
def write_show_leader_lines
|
216
|
+
val = 1
|
217
|
+
|
218
|
+
attributes = [['val', val]]
|
219
|
+
|
220
|
+
@writer.empty_tag('c:showLeaderLines', attributes)
|
221
|
+
end
|
209
222
|
end
|
210
223
|
end
|
211
224
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
+
# frozen_string_literal: true
|
2
3
|
|
3
4
|
module Writexlsx
|
4
5
|
class Chart
|
@@ -58,10 +59,13 @@ module Writexlsx
|
|
58
59
|
class Trendline < Chartline
|
59
60
|
attr_reader :name, :forward, :backward, :order, :period
|
60
61
|
attr_reader :intercept, :display_equation, :display_r_squared
|
62
|
+
attr_reader :label
|
61
63
|
|
62
64
|
def initialize(params)
|
63
65
|
super(params)
|
64
66
|
|
67
|
+
@label = trendline_label_properties(params[:label])
|
68
|
+
|
65
69
|
@name = params[:name]
|
66
70
|
@forward = params[:forward]
|
67
71
|
@backward = params[:backward]
|
@@ -75,6 +79,51 @@ module Writexlsx
|
|
75
79
|
|
76
80
|
private
|
77
81
|
|
82
|
+
#
|
83
|
+
# Convert user defined trendline label properties to the structure required
|
84
|
+
# internally.
|
85
|
+
#
|
86
|
+
def trendline_label_properties(_label)
|
87
|
+
return unless _label || _label.is_a?(Hash)
|
88
|
+
|
89
|
+
# Copy the user supplied properties.
|
90
|
+
label = {}
|
91
|
+
|
92
|
+
# Set the font properties for the label.
|
93
|
+
label[:font] = convert_font_args(_label[:font]) if ptrue?(_label[:font])
|
94
|
+
|
95
|
+
# Set the line properties for the label.
|
96
|
+
line = line_properties(_label[:line])
|
97
|
+
|
98
|
+
# Allow 'border' as a synonym for 'line'.
|
99
|
+
line = line_properties(_label[:border]) if ptrue?(_label[:border])
|
100
|
+
|
101
|
+
# Set the fill properties for the label.
|
102
|
+
fill = fill_properties(_label[:fill])
|
103
|
+
|
104
|
+
# Set the pattern properties for the label.
|
105
|
+
pattern = pattern_properties(_label[:pattern])
|
106
|
+
|
107
|
+
# Set the gradient fill properties for the label.
|
108
|
+
gradient = gradient_properties(_label[:gradient])
|
109
|
+
|
110
|
+
# Pattern fill overrides solid fill.
|
111
|
+
fill = nil if ptrue?(pattern)
|
112
|
+
|
113
|
+
# Gradient fill overrides solid and pattern fills.
|
114
|
+
if ptrue?(gradient)
|
115
|
+
pattern = nil
|
116
|
+
fill = nil
|
117
|
+
end
|
118
|
+
|
119
|
+
label[:line] = line
|
120
|
+
label[:fill] = fill
|
121
|
+
label[:pattern] = pattern
|
122
|
+
label[:gradient] = gradient
|
123
|
+
|
124
|
+
label
|
125
|
+
end
|
126
|
+
|
78
127
|
def types
|
79
128
|
{
|
80
129
|
exponential: 'exp',
|
@@ -182,6 +231,7 @@ module Writexlsx
|
|
182
231
|
attr_reader :values, :categories, :name, :name_formula, :name_id
|
183
232
|
attr_reader :cat_data_id, :val_data_id, :fill, :pattern, :gradient
|
184
233
|
attr_reader :trendline, :smooth, :labels, :invert_if_negative
|
234
|
+
attr_reader :inverted_color
|
185
235
|
attr_reader :x2_axis, :y2_axis, :error_bars, :points
|
186
236
|
attr_accessor :line, :marker
|
187
237
|
|
@@ -217,10 +267,12 @@ module Writexlsx
|
|
217
267
|
|
218
268
|
@label_positions = chart.label_positions
|
219
269
|
@label_position_default = chart.label_position_default
|
220
|
-
@labels
|
270
|
+
@labels = labels_properties(params[:data_labels])
|
271
|
+
@inverted_color = params[:invert_if_negative_color]
|
221
272
|
|
222
|
-
%i[
|
223
|
-
|
273
|
+
%i[
|
274
|
+
smooth invert_if_negative x2_axis y2_axis
|
275
|
+
].each { |key| instance_variable_set("@#{key}", params[key]) }
|
224
276
|
end
|
225
277
|
|
226
278
|
def ==(other)
|
@@ -228,7 +280,7 @@ module Writexlsx
|
|
228
280
|
categories values name name_formula name_id
|
229
281
|
cat_data_id val_data_id
|
230
282
|
line fill gradient marker trendline
|
231
|
-
smooth labels
|
283
|
+
smooth labels inverted_color
|
232
284
|
x2_axis y2_axis error_bars points
|
233
285
|
]
|
234
286
|
methods.each do |method|
|
data/lib/write_xlsx/chart.rb
CHANGED
@@ -568,6 +568,13 @@ module Writexlsx
|
|
568
568
|
@is_secondary
|
569
569
|
end
|
570
570
|
|
571
|
+
#
|
572
|
+
# Set the option for displaying #N/A as an empty cell in a chart.
|
573
|
+
#
|
574
|
+
def show_na_as_empty_cell
|
575
|
+
@show_na_as_empty = true
|
576
|
+
end
|
577
|
+
|
571
578
|
private
|
572
579
|
|
573
580
|
def axis_setup
|
@@ -598,6 +605,7 @@ module Writexlsx
|
|
598
605
|
@cross_between = 'between'
|
599
606
|
@date_category = false
|
600
607
|
@show_blanks = 'gap'
|
608
|
+
@show_na_as_empty = false
|
601
609
|
@show_hidden_data = false
|
602
610
|
@show_crosses = true
|
603
611
|
end
|
@@ -782,6 +790,9 @@ module Writexlsx
|
|
782
790
|
|
783
791
|
# Write the c:dispBlanksAs element.
|
784
792
|
write_disp_blanks_as
|
793
|
+
|
794
|
+
# Write the c:extLst element.
|
795
|
+
write_ext_lst_display_na if @show_na_as_empty
|
785
796
|
end
|
786
797
|
end
|
787
798
|
|
@@ -950,10 +961,62 @@ module Writexlsx
|
|
950
961
|
write_val(series)
|
951
962
|
# Write the c:smooth element.
|
952
963
|
write_c_smooth(series.smooth) if ptrue?(@smooth_allowed)
|
964
|
+
# Write the c:extLst element.
|
965
|
+
write_ext_lst_inverted_fill(series.inverted_color) if series.inverted_color
|
953
966
|
end
|
954
967
|
@series_index += 1
|
955
968
|
end
|
956
969
|
|
970
|
+
def write_ext_lst_inverted_fill(color)
|
971
|
+
uri = '{6F2FDCE9-48DA-4B69-8628-5D25D57E5C99}'
|
972
|
+
xmlns_c_14 =
|
973
|
+
'http://schemas.microsoft.com/office/drawing/2007/8/2/chart'
|
974
|
+
|
975
|
+
attributes_1 = [
|
976
|
+
['uri', uri],
|
977
|
+
['xmlns:c14', xmlns_c_14]
|
978
|
+
]
|
979
|
+
|
980
|
+
attributes_2 = [
|
981
|
+
['xmlns:c14', xmlns_c_14]
|
982
|
+
]
|
983
|
+
|
984
|
+
@writer.tag_elements('c:extLst') do
|
985
|
+
@writer.tag_elements('c:ext', attributes_1) do
|
986
|
+
@writer.tag_elements('c14:invertSolidFillFmt') do
|
987
|
+
@writer.tag_elements('c14:spPr', attributes_2) do
|
988
|
+
write_a_solid_fill(color: color)
|
989
|
+
end
|
990
|
+
end
|
991
|
+
end
|
992
|
+
end
|
993
|
+
end
|
994
|
+
|
995
|
+
#
|
996
|
+
# Write the <c:extLst> element for the display N/A as empty cell option.
|
997
|
+
#
|
998
|
+
def write_ext_lst_display_na
|
999
|
+
uri = '{56B9EC1D-385E-4148-901F-78D8002777C0}'
|
1000
|
+
xmlns_c_16 = 'http://schemas.microsoft.com/office/drawing/2017/03/chart'
|
1001
|
+
|
1002
|
+
attributes1 = [
|
1003
|
+
['uri', uri],
|
1004
|
+
['xmlns:c16r3', xmlns_c_16]
|
1005
|
+
]
|
1006
|
+
|
1007
|
+
attributes2 = [
|
1008
|
+
['val', 1]
|
1009
|
+
]
|
1010
|
+
|
1011
|
+
@writer.tag_elements('c:extLst') do
|
1012
|
+
@writer.tag_elements('c:ext', attributes1) do
|
1013
|
+
@writer.tag_elements('c16r3:dataDisplayOptions16') do
|
1014
|
+
@writer.empty_tag('c16r3:dispNaAsBlank', attributes2)
|
1015
|
+
end
|
1016
|
+
end
|
1017
|
+
end
|
1018
|
+
end
|
1019
|
+
|
957
1020
|
def write_ser_base(series)
|
958
1021
|
# Write the c:idx element.
|
959
1022
|
write_idx(@series_index)
|
@@ -2018,20 +2081,25 @@ module Writexlsx
|
|
2018
2081
|
attributes << ['w', width]
|
2019
2082
|
end
|
2020
2083
|
|
2021
|
-
|
2022
|
-
|
2023
|
-
|
2024
|
-
|
2025
|
-
|
2026
|
-
|
2027
|
-
|
2028
|
-
|
2029
|
-
|
2030
|
-
|
2031
|
-
|
2032
|
-
# Write the
|
2033
|
-
|
2084
|
+
if ptrue?(line[:none]) || ptrue?(line[:color]) || line[:dash_type]
|
2085
|
+
@writer.tag_elements('a:ln', attributes) do
|
2086
|
+
# Write the line fill.
|
2087
|
+
if ptrue?(line[:none])
|
2088
|
+
# Write the a:noFill element.
|
2089
|
+
write_a_no_fill
|
2090
|
+
elsif ptrue?(line[:color])
|
2091
|
+
# Write the a:solidFill element.
|
2092
|
+
write_a_solid_fill(line)
|
2093
|
+
end
|
2094
|
+
|
2095
|
+
# Write the line/dash type.
|
2096
|
+
if line[:dash_type]
|
2097
|
+
# Write the a:prstDash element.
|
2098
|
+
write_a_prst_dash(line[:dash_type])
|
2099
|
+
end
|
2034
2100
|
end
|
2101
|
+
else
|
2102
|
+
@writer.empty_tag('a:ln', attributes)
|
2035
2103
|
end
|
2036
2104
|
end
|
2037
2105
|
|
@@ -2091,7 +2159,7 @@ module Writexlsx
|
|
2091
2159
|
# Write the c:dispEq element.
|
2092
2160
|
write_disp_eq
|
2093
2161
|
# Write the c:trendlineLbl element.
|
2094
|
-
write_trendline_lbl
|
2162
|
+
write_trendline_lbl(trendline)
|
2095
2163
|
end
|
2096
2164
|
end
|
2097
2165
|
end
|
@@ -2168,12 +2236,18 @@ module Writexlsx
|
|
2168
2236
|
#
|
2169
2237
|
# Write the <c:trendlineLbl> element.
|
2170
2238
|
#
|
2171
|
-
def write_trendline_lbl
|
2239
|
+
def write_trendline_lbl(trendline)
|
2172
2240
|
@writer.tag_elements('c:trendlineLbl') do
|
2173
2241
|
# Write the c:layout element.
|
2174
2242
|
write_layout
|
2175
2243
|
# Write the c:numFmt element.
|
2176
2244
|
write_trendline_num_fmt
|
2245
|
+
# Write the c:spPr element for the label formatting.
|
2246
|
+
write_sp_pr(trendline.label)
|
2247
|
+
# Write the data label font elements.
|
2248
|
+
if trendline.label && ptrue?(trendline.label[:font])
|
2249
|
+
write_axis_font(trendline.label[:font])
|
2250
|
+
end
|
2177
2251
|
end
|
2178
2252
|
end
|
2179
2253
|
|
@@ -2513,11 +2587,25 @@ module Writexlsx
|
|
2513
2587
|
@writer.data_element('c:separator', data)
|
2514
2588
|
end
|
2515
2589
|
|
2516
|
-
#
|
2517
|
-
#
|
2518
|
-
#
|
2590
|
+
# Write the <c:showLeaderLines> element. This is different for Pie/Doughnut
|
2591
|
+
# charts. Other chart types only supported leader lines after Excel 2015 via
|
2592
|
+
# an extension element.
|
2519
2593
|
def write_show_leader_lines
|
2520
|
-
|
2594
|
+
uri = '{CE6537A1-D6FC-4f65-9D91-7224C49458BB}'
|
2595
|
+
xmlns_c_15 = 'http://schemas.microsoft.com/office/drawing/2012/chart'
|
2596
|
+
|
2597
|
+
attributes1 = [
|
2598
|
+
['uri', uri],
|
2599
|
+
['xmlns:c15', xmlns_c_15]
|
2600
|
+
]
|
2601
|
+
|
2602
|
+
attributes2 = [['val', 1]]
|
2603
|
+
|
2604
|
+
@writer.tag_elements('c:extLst') do
|
2605
|
+
@writer.tag_elements('c:ext', attributes1) do
|
2606
|
+
@writer.empty_tag('c15:showLeaderLines', attributes2)
|
2607
|
+
end
|
2608
|
+
end
|
2521
2609
|
end
|
2522
2610
|
|
2523
2611
|
#
|
@@ -2831,8 +2919,6 @@ module Writexlsx
|
|
2831
2919
|
# Write the <a:fillToRect> element.
|
2832
2920
|
#
|
2833
2921
|
def write_a_fill_to_rect(type)
|
2834
|
-
attributes = []
|
2835
|
-
|
2836
2922
|
attributes = if type == 'shape'
|
2837
2923
|
[
|
2838
2924
|
['l', 50000],
|
@@ -2854,8 +2940,6 @@ module Writexlsx
|
|
2854
2940
|
# Write the <a:tileRect> element.
|
2855
2941
|
#
|
2856
2942
|
def write_a_tile_rect(type)
|
2857
|
-
attributes = []
|
2858
|
-
|
2859
2943
|
attributes = if type == 'shape'
|
2860
2944
|
[]
|
2861
2945
|
else
|
@@ -54,6 +54,8 @@ module Writexlsx
|
|
54
54
|
write_header_footer
|
55
55
|
# Write the drawing element.
|
56
56
|
write_drawings
|
57
|
+
# Write the legaacyDrawingHF element.
|
58
|
+
write_legacy_drawing_hf
|
57
59
|
# Close the worksheet tag.
|
58
60
|
end
|
59
61
|
end
|
@@ -145,6 +147,10 @@ module Writexlsx
|
|
145
147
|
@chart.show_blanks_as(*args)
|
146
148
|
end
|
147
149
|
|
150
|
+
def show_na_as_empty_cell
|
151
|
+
@chart.show_na_as_empty_cell(*args)
|
152
|
+
end
|
153
|
+
|
148
154
|
def show_hidden_data(*args)
|
149
155
|
@chart.show_hidden_data(*args)
|
150
156
|
end
|
@@ -185,7 +191,10 @@ module Writexlsx
|
|
185
191
|
end
|
186
192
|
|
187
193
|
def external_links
|
188
|
-
[
|
194
|
+
[
|
195
|
+
@external_drawing_links,
|
196
|
+
@external_vml_links
|
197
|
+
]
|
189
198
|
end
|
190
199
|
|
191
200
|
private
|
data/lib/write_xlsx/col_name.rb
CHANGED
@@ -7,12 +7,16 @@ class ColName
|
|
7
7
|
include Singleton
|
8
8
|
|
9
9
|
def initialize
|
10
|
-
@col_str_table =
|
10
|
+
@col_str_table = []
|
11
|
+
@row_str_table = []
|
11
12
|
end
|
12
13
|
|
13
14
|
def col_str(col)
|
14
|
-
@col_str_table[col]
|
15
|
-
|
15
|
+
@col_str_table[col] ||= col_str_build(col)
|
16
|
+
end
|
17
|
+
|
18
|
+
def row_str(row)
|
19
|
+
@row_str_table[row] ||= row.to_s
|
16
20
|
end
|
17
21
|
|
18
22
|
private
|
data/lib/write_xlsx/colors.rb
CHANGED
@@ -4,25 +4,26 @@
|
|
4
4
|
module Writexlsx
|
5
5
|
class Colors
|
6
6
|
COLORS = {
|
7
|
-
aqua:
|
8
|
-
cyan:
|
9
|
-
black:
|
10
|
-
blue:
|
11
|
-
brown:
|
12
|
-
magenta:
|
13
|
-
fuchsia:
|
14
|
-
gray:
|
15
|
-
grey:
|
16
|
-
green:
|
17
|
-
lime:
|
18
|
-
navy:
|
19
|
-
orange:
|
20
|
-
pink:
|
21
|
-
purple:
|
22
|
-
red:
|
23
|
-
silver:
|
24
|
-
white:
|
25
|
-
yellow:
|
7
|
+
aqua: 0x0F,
|
8
|
+
cyan: 0x0F,
|
9
|
+
black: 0x08,
|
10
|
+
blue: 0x0C,
|
11
|
+
brown: 0x10,
|
12
|
+
magenta: 0x0E,
|
13
|
+
fuchsia: 0x0E,
|
14
|
+
gray: 0x17,
|
15
|
+
grey: 0x17,
|
16
|
+
green: 0x11,
|
17
|
+
lime: 0x0B,
|
18
|
+
navy: 0x12,
|
19
|
+
orange: 0x35,
|
20
|
+
pink: 0x21,
|
21
|
+
purple: 0x14,
|
22
|
+
red: 0x0A,
|
23
|
+
silver: 0x16,
|
24
|
+
white: 0x09,
|
25
|
+
yellow: 0x0D,
|
26
|
+
automatic: 0x40
|
26
27
|
} # :nodoc:
|
27
28
|
|
28
29
|
###############################################################################
|
data/lib/write_xlsx/format.rb
CHANGED
@@ -324,7 +324,7 @@ module Writexlsx
|
|
324
324
|
return colors[color_code.downcase.to_sym] if colors[color_code.downcase.to_sym]
|
325
325
|
|
326
326
|
# or the default color if string is unrecognised,
|
327
|
-
|
327
|
+
0x00 if color_code =~ /\D/
|
328
328
|
else
|
329
329
|
# or an index < 8 mapped into the correct range,
|
330
330
|
return color_code + 8 if color_code < 8
|
@@ -584,14 +584,16 @@ module Writexlsx
|
|
584
584
|
if theme == -1
|
585
585
|
# Ignore for excel2003_style
|
586
586
|
elsif ptrue?(theme)
|
587
|
-
write_color(
|
587
|
+
write_color('theme', theme, writer)
|
588
588
|
elsif ptrue?(@color_indexed)
|
589
|
-
write_color(
|
589
|
+
write_color('indexed', @color_indexed, writer)
|
590
590
|
elsif ptrue?(@color)
|
591
591
|
color = worksheet.palette_color(@color)
|
592
|
-
|
592
|
+
if color != 'Automatic'
|
593
|
+
write_color('rgb', color, writer)
|
594
|
+
end
|
593
595
|
elsif !ptrue?(dxf_format)
|
594
|
-
write_color(
|
596
|
+
write_color('theme', 1, writer)
|
595
597
|
end
|
596
598
|
|
597
599
|
unless ptrue?(dxf_format)
|
@@ -607,12 +609,12 @@ module Writexlsx
|
|
607
609
|
writer.empty_tag('sz', [['val', size]])
|
608
610
|
|
609
611
|
if ptrue?(theme)
|
610
|
-
write_color(
|
612
|
+
write_color('theme', theme, writer)
|
611
613
|
elsif ptrue?(@color)
|
612
614
|
color = worksheet.palette_color(@color)
|
613
|
-
write_color(
|
615
|
+
write_color('rgb', color, writer)
|
614
616
|
else
|
615
|
-
write_color(
|
617
|
+
write_color('theme', 1, writer)
|
616
618
|
end
|
617
619
|
|
618
620
|
writer.empty_tag('rFont', [['val', @font]])
|
@@ -46,7 +46,9 @@ module Writexlsx
|
|
46
46
|
add_heading_pair(
|
47
47
|
[
|
48
48
|
'Worksheets',
|
49
|
-
@workbook.worksheets.reject
|
49
|
+
@workbook.worksheets.reject do |s|
|
50
|
+
s.is_chartsheet? || s.very_hidden?
|
51
|
+
end.count
|
50
52
|
]
|
51
53
|
)
|
52
54
|
end
|
@@ -57,14 +59,16 @@ module Writexlsx
|
|
57
59
|
|
58
60
|
def add_worksheet_part_names
|
59
61
|
@workbook.worksheets
|
60
|
-
|
61
|
-
|
62
|
+
.reject { |sheet| sheet.is_chartsheet? || sheet.very_hidden? }
|
63
|
+
.each do |sheet|
|
64
|
+
add_part_name(sheet.name)
|
65
|
+
end
|
62
66
|
end
|
63
67
|
|
64
68
|
def add_chartsheet_part_names
|
65
69
|
@workbook.worksheets
|
66
|
-
|
67
|
-
|
70
|
+
.select { |sheet| sheet.is_chartsheet? }
|
71
|
+
.each { |sheet| add_part_name(sheet.name) }
|
68
72
|
end
|
69
73
|
|
70
74
|
def add_part_name(part_name)
|
@@ -57,7 +57,8 @@ module Writexlsx
|
|
57
57
|
# Minor modification to allow comparison testing. Change RGB colors
|
58
58
|
# from long format, ffcc00 to short format fc0 used by VML.
|
59
59
|
def rgb_color(rgb)
|
60
|
-
|
60
|
+
r, g, b = rgb
|
61
|
+
result = sprintf("%02x%02x%02x", r, g, b)
|
61
62
|
result = "#{::Regexp.last_match(1)}#{::Regexp.last_match(2)}#{::Regexp.last_match(3)}" if result =~ /^([0-9a-f])\1([0-9a-f])\2([0-9a-f])\3$/
|
62
63
|
result
|
63
64
|
end
|