rubyXL 1.1.11 → 1.1.12

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.11
1
+ 1.1.12
data/lib/rubyXL/cell.rb CHANGED
@@ -101,82 +101,91 @@ module RubyXL
101
101
  @style_index = modify_fill(@workbook, @style_index,rgb)
102
102
  end
103
103
 
104
- # changes font name of cell
104
+ # Changes font name of cell
105
105
  def change_font_name(font_name='Verdana')
106
106
  validate_worksheet
107
- @style_index = modify_font(@workbook,@style_index)
108
- @workbook.fonts[font_id()][:font][:name][:attributes][:val] = font_name.to_s
107
+ # Get copy of font object with modified name
108
+ font = deep_copy(workbook.fonts[font_id().to_s][:font])
109
+ font[:name][:attributes][:val] = font_name.to_s
110
+ # Update font and xf array
111
+ change_font(font)
109
112
  end
110
113
 
111
- # changes font size of cell
114
+ # Changes font size of cell
112
115
  def change_font_size(font_size=10)
113
116
  validate_worksheet
114
117
  if font_size.is_a?(Integer) || font_size.is_a?(Float)
115
- @style_index = modify_font(@workbook, @style_index)
116
- @workbook.fonts[font_id()][:font][:sz][:attributes][:val] = font_size
118
+ # Get copy of font object with modified size
119
+ font = deep_copy(workbook.fonts[font_id().to_s][:font])
120
+ font[:sz][:attributes][:val] = font_size
121
+ # Update font and xf array
122
+ change_font(font)
117
123
  else
118
124
  raise 'Argument must be a number'
119
125
  end
120
126
  end
121
127
 
122
- # changes font color of cell
128
+ # Changes font color of cell
123
129
  def change_font_color(font_color='000000')
124
130
  validate_worksheet
125
131
  #if arg is a color name, convert to integer
126
132
  Color.validate_color(font_color)
127
-
128
- @style_index = modify_font(@workbook,@style_index)
129
- font_id = font_id()
130
- if @workbook.fonts[font_id][:font][:color].nil?
131
- @workbook.fonts[font_id][:font][:color] = {:attributes => {:rgb => ''}}
132
- end
133
- @workbook.fonts[font_id][:font][:color][:attributes][:rgb] = font_color.to_s
133
+ # Get copy of font object with modified color
134
+ font = deep_copy(workbook.fonts[font_id().to_s][:font])
135
+ font = modify_font_color(font, font_color.to_s)
136
+ # Update font and xf array
137
+ change_font(font)
134
138
  end
135
139
 
136
- # changes if font is italicized or not
140
+ # Changes font italics settings of cell
137
141
  def change_font_italics(italicized=false)
138
142
  validate_worksheet
139
- @style_index = modify_font(@workbook,@style_index)
140
- if italicized
141
- @workbook.fonts[font_id()][:font][:i] = {}
142
- else
143
- @workbook.fonts[font_id()][:font][:i] = nil
144
- end
143
+ # Get copy of font object with modified italics settings
144
+ font = deep_copy(workbook.fonts[font_id().to_s][:font])
145
+ font = modify_font_italics(font, italicized)
146
+ # Update font and xf array
147
+ change_font(font)
145
148
  end
146
149
 
147
- # changes if font is bolded or not
150
+ # Changes font bold settings of cell
148
151
  def change_font_bold(bolded=false)
149
152
  validate_worksheet
150
- @style_index = modify_font(@workbook,@style_index)
151
- if bolded
152
- @workbook.fonts[font_id()][:font][:b] = {}
153
- else
154
- @workbook.fonts[font_id()][:font][:b] = nil
155
- end
153
+ # Get copy of font object with modified bold settings
154
+ font = deep_copy(workbook.fonts[font_id().to_s][:font])
155
+ font = modify_font_bold(font, bolded)
156
+ # Update font and xf array
157
+ change_font(font)
156
158
  end
157
159
 
158
- # changes if font is underlined or not
160
+ # Changes font underline settings of cell
159
161
  def change_font_underline(underlined=false)
160
162
  validate_worksheet
161
- @style_index = modify_font(@workbook,@style_index)
162
-
163
- if underlined
164
- @workbook.fonts[font_id()][:font][:u] = {}
165
- else
166
- @workbook.fonts[font_id()][:font][:u] = nil
167
- end
163
+ # Get copy of font object with modified underline settings
164
+ font = deep_copy(workbook.fonts[font_id().to_s][:font])
165
+ font = modify_font_underline(font, underlined)
166
+ # Update font and xf array
167
+ change_font(font)
168
168
  end
169
169
 
170
- # changes if font has a strikethrough or not
170
+ # Changes font strikethrough settings of cell
171
171
  def change_font_strikethrough(struckthrough=false)
172
172
  validate_worksheet
173
- @style_index = modify_font(@workbook,@style_index)
173
+ # Get copy of font object with modified strikethrough settings
174
+ font = deep_copy(workbook.fonts[font_id().to_s][:font])
175
+ font = modify_font_strikethrough(font, struckthrough)
176
+ # Update font and xf array
177
+ change_font(font)
178
+ end
174
179
 
175
- if struckthrough
176
- @workbook.fonts[font_id()][:font][:strike] = {}
177
- else
178
- @workbook.fonts[font_id()][:font][:strike] = nil
179
- end
180
+ # Helper method to update the font array and xf array
181
+ def change_font(font)
182
+ # Modify font array and retrieve new font id
183
+ font_id = modify_font(@workbook, font, font_id())
184
+ # Get copy of xf object with modified font id
185
+ xf = deep_copy(xf_id())
186
+ xf[:fontId] = Integer(font_id.to_i)
187
+ # Modify xf array and retrieve new xf id
188
+ @style_index = modify_xf(@workbook, xf)
180
189
  end
181
190
 
182
191
  # changes horizontal alignment of cell
@@ -385,7 +394,7 @@ module RubyXL
385
394
  end
386
395
 
387
396
  def inspect
388
- str = "(#{@row},#{@column}): #{@value}"
397
+ str = "(#{@row},#{@column}): #{@value}"
389
398
  str += " =#{@formula}" if @formula
390
399
  str += ", datatype = #{@datatype}, style_index = #{@style_index}"
391
400
  return str
@@ -30,42 +30,125 @@ module RubyXL
30
30
  end
31
31
  end
32
32
 
33
- #modifies font array (copies,appends) then styles array (copies,appends)
34
- #does not actually modify font object,
35
- #allows method caller to do that (cell or worksheet)
36
- def modify_font(workbook, style_index)
37
- # xf_obj = workbook.get_style(style_index)
38
- xf = workbook.get_style_attributes(workbook.get_style(style_index))
39
-
40
- #modify fonts array
41
- font_id = xf[:fontId]
42
- font = workbook.fonts[font_id.to_s][:font]
43
-
44
- #else, just change the attribute itself, done in calling method.
45
- if workbook.fonts[font_id.to_s][:count] > 1 || font_id == 0
46
- old_size = workbook.fonts.size.to_s
47
- workbook.fonts[old_size] = {}
48
- workbook.fonts[old_size][:font] = deep_copy(font)
49
- workbook.fonts[old_size][:count] = 1
50
- workbook.fonts[font_id.to_s][:count] -= 1
33
+ # This method checks to see if there is an equivalent font that exists
34
+ def find_font(workbook, font)
35
+ workbook.fonts.each {|font_id, f|
36
+ if f[:font][:i] == font[:i] &&
37
+ f[:font][:b] == font[:b] &&
38
+ f[:font][:u] == font[:u] &&
39
+ f[:font][:strike] == font[:strike] &&
40
+ f[:font][:name][:attributes][:val] == font[:name][:attributes][:val] &&
41
+ f[:font][:sz][:attributes][:val] == font[:sz][:attributes][:val] &&
42
+ (f[:font][:color] && f[:font][:color][:attributes][:rgb]) == (font[:color] && font[:color][:attributes][:rgb])
43
+ return font_id
44
+ end
45
+ }
46
+ return nil
47
+ end
51
48
 
52
- #modify styles array
53
- font_id = old_size
49
+ # Helper method to modify the font color
50
+ def modify_font_color(font, font_color)
51
+ if font[:color].nil?
52
+ font[:color] = {:attributes => {:rgb => ''}}
53
+ end
54
+ font[:color][:attributes][:rgb] = font_color.to_s
55
+ return font
56
+ end
57
+
58
+ # Helper method to modify the font's italics settings
59
+ def modify_font_italics(font, italicized)
60
+ if italicized
61
+ font[:i] = {}
62
+ else
63
+ font[:i] = nil
64
+ end
65
+ return font
66
+ end
54
67
 
68
+ # Helper method to modify the font's bold settings
69
+ def modify_font_bold(font, bolded)
70
+ if bolded
71
+ font[:b] = {}
72
+ else
73
+ font[:b] = nil
74
+ end
75
+ return font
76
+ end
77
+
78
+ # Helper method to modify the font's underline settings
79
+ def modify_font_underline(font, underlined)
80
+ if underlined
81
+ font[:u] = {}
82
+ else
83
+ font[:u] = nil
84
+ end
85
+ return font
86
+ end
87
+
88
+ # Helper method to modify the font's strikethrough settings
89
+ def modify_font_strikethrough(font, struckthrough)
90
+ if struckthrough
91
+ font[:strike] = {}
92
+ else
93
+ font[:strike] = nil
94
+ end
95
+ return font
96
+ end
97
+
98
+ # Determines if font exists
99
+ # If yes, return id of existing font
100
+ # If no, appends font to font array
101
+ def modify_font(workbook, font, old_font_id)
102
+ font_id = old_font_id
103
+ existing_font_id = find_font(workbook, font)
104
+ if !existing_font_id.nil?
105
+ font_id = existing_font_id
106
+ workbook.fonts[font_id][:count] += 1
107
+ workbook.fonts[old_font_id][:count] -= 1
108
+ elsif workbook.fonts[old_font_id.to_s][:count] > 1 || old_font_id == '0'
109
+ font_id = workbook.fonts.size.to_s
110
+ workbook.fonts[font_id] = {}
111
+ workbook.fonts[font_id][:font] = font
112
+ workbook.fonts[font_id][:count] = 1
113
+ workbook.fonts[old_font_id][:count] -= 1
114
+ else
115
+ workbook.fonts[font_id][:font] = font
116
+ end
117
+ return font_id
118
+ end
119
+
120
+ # This method checks to see if there is an equivalent xf that exists
121
+ def find_xf(workbook, xf)
122
+ workbook.cell_xfs[:xf].each_with_index {|xfs, index|
123
+ if xfs[:attributes][:borderId] == xf[:borderId] &&
124
+ xfs[:attributes][:xfId] == xf[:xfId] &&
125
+ xfs[:attributes][:fillId] == xf[:fillId] &&
126
+ xfs[:attributes][:numFmtId] == xf[:numFmtId] &&
127
+ xfs[:attributes][:fontId] == xf[:fontId]
128
+ return index
129
+ end
130
+ }
131
+ return nil
132
+ end
133
+
134
+ # Determines if xf exists
135
+ # If yes, return id of existing xf
136
+ # If no, appends xf to xf array
137
+ def modify_xf(workbook, xf)
138
+ existing_xf_id = find_xf(workbook, xf)
139
+ if !existing_xf_id.nil?
140
+ xf_id = existing_xf_id
141
+ else
55
142
  if workbook.cell_xfs[:xf].is_a?Array
56
- workbook.cell_xfs[:xf] << deep_copy({:attributes=>xf})
143
+ workbook.cell_xfs[:xf] << {:attributes=>xf}
57
144
  else
58
- workbook.cell_xfs[:xf] = [workbook.cell_xfs[:xf], deep_copy({:attributes=>xf})]
145
+ workbook.cell_xfs[:xf] = [workbook.cell_xfs[:xf], {:attributes=>xf}]
59
146
  end
60
-
61
- xf = workbook.get_style_attributes(workbook.cell_xfs[:xf].last)
62
- xf[:fontId] = font_id
63
147
  xf[:applyFont] = '1'
64
148
  workbook.cell_xfs[:attributes][:count] += 1
65
- return workbook.cell_xfs[:xf].size-1 #returns new style_index
66
- else
67
- return style_index
149
+ xf_id = workbook.cell_xfs[:xf].size - 1
68
150
  end
151
+ return xf_id
69
152
  end
70
153
 
71
154
  #modifies fill array (copies, appends, adds color and solid attribute)
@@ -103,46 +103,82 @@ class Worksheet < PrivateClass
103
103
  end
104
104
  end
105
105
 
106
- def change_row_font_name(row=0,font_name='Verdana')
107
- change_row_font(row,Worksheet::NAME,font_name)
108
- @workbook.fonts[font_id(@row_styles[(row+1).to_s][:style])][:font][:name][:attributes][:val] = font_name.to_s
109
- end
110
-
111
- def change_row_font_size(row=0,font_size=10)
112
- change_row_font(row,Worksheet::SIZE,font_size)
113
- @workbook.fonts[font_id(@row_styles[(row+1).to_s][:style])][:font][:sz][:attributes][:val] = font_size
114
- end
115
-
116
- def change_row_font_color(row=0,font_color='000000')
106
+ # Changes font name of row
107
+ def change_row_font_name(row=0, font_name='Verdana')
108
+ # Get style object
109
+ xf_id = xf_id(get_row_style(row))
110
+ # Get copy of font object with modified name
111
+ font = deep_copy(@workbook.fonts[xf_id[:fontId].to_s][:font])
112
+ font[:name][:attributes][:val] = font_name.to_s
113
+ # Update font and xf array
114
+ change_row_font(row, Worksheet::NAME, font_name, font, xf_id)
115
+ end
116
+
117
+ # Changes font size of row
118
+ def change_row_font_size(row=0, font_size=10)
119
+ # Get style object
120
+ xf_id = xf_id(get_row_style(row))
121
+ # Get copy of font object with modified size
122
+ font = deep_copy(@workbook.fonts[xf_id[:fontId].to_s][:font])
123
+ font[:sz][:attributes][:val] = font_size
124
+ # Update font and xf array
125
+ change_row_font(row, Worksheet::SIZE, font_size, font, xf_id)
126
+ end
127
+
128
+ # Changes font color of row
129
+ def change_row_font_color(row=0, font_color='000000')
117
130
  Color.validate_color(font_color)
118
-
119
- change_row_font(row,Worksheet::COLOR,font_color)
120
-
121
- font = @workbook.fonts[font_id(@row_styles[(row+1).to_s][:style])][:font]
122
- if font[:color].nil? || font[:color][:attributes].nil?
123
- font[:color] = { :attributes => { :rgb => nil } }
124
- end
125
- font[:color][:attributes][:rgb] = font_color.to_s
126
- end
127
-
128
- def change_row_italics(row=0,italicized=false)
129
- change_row_font(row,Worksheet::ITALICS,italicized)
130
- @workbook.fonts[font_id(@row_styles[(row+1).to_s][:style])][:font][:i] = italicized ? {} : nil
131
- end
132
-
133
- def change_row_bold(row=0,bolded=false)
134
- change_row_font(row,Worksheet::BOLD,bolded)
135
- @workbook.fonts[font_id(@row_styles[(row+1).to_s][:style])][:font][:b] = bolded ? {} : nil
136
- end
137
-
138
- def change_row_underline(row=0,underlined=false)
139
- change_row_font(row,Worksheet::UNDERLINE,underlined)
140
- @workbook.fonts[font_id(@row_styles[(row+1).to_s][:style])][:font][:u] = underlined ? {} : nil
141
- end
142
-
143
- def change_row_strikethrough(row=0,struckthrough=false)
144
- change_row_font(row,Worksheet::STRIKETHROUGH,struckthrough)
145
- @workbook.fonts[font_id(@row_styles[(row+1).to_s][:style])][:font][:strike] = struckthrough ? {} : nil
131
+ # Get style object
132
+ xf_id = xf_id(get_row_style(row))
133
+ # Get copy of font object with modified color
134
+ font = deep_copy(@workbook.fonts[xf_id[:fontId].to_s][:font])
135
+ font = modify_font_color(font, font_color.to_s)
136
+ # Update font and xf array
137
+ change_row_font(row, Worksheet::COLOR, font_color, font, xf_id)
138
+ end
139
+
140
+ # Changes font italics settings of row
141
+ def change_row_italics(row=0, italicized=false)
142
+ # Get style object
143
+ xf_id = xf_id(get_row_style(row))
144
+ # Get copy of font object with modified italics settings
145
+ font = deep_copy(@workbook.fonts[xf_id[:fontId].to_s][:font])
146
+ font = modify_font_italics(font, italicized)
147
+ # Update font and xf array
148
+ change_row_font(row, Worksheet::ITALICS, italicized, font, xf_id)
149
+ end
150
+
151
+ # Changes font bold settings of row
152
+ def change_row_bold(row=0, bolded=false)
153
+ # Get style object
154
+ xf_id = xf_id(get_row_style(row))
155
+ # Get copy of font object with modified bold settings
156
+ font = deep_copy(@workbook.fonts[xf_id[:fontId].to_s][:font])
157
+ font = modify_font_bold(font, bolded)
158
+ # Update font and xf array
159
+ change_row_font(row, Worksheet::BOLD, bolded, font, xf_id)
160
+ end
161
+
162
+ # Changes font underline settings of row
163
+ def change_row_underline(row=0, underlined=false)
164
+ # Get style object
165
+ xf_id = xf_id(get_row_style(row))
166
+ # Get copy of font object with modified underline settings
167
+ font = deep_copy(@workbook.fonts[xf_id[:fontId].to_s][:font])
168
+ font = modify_font_underline(font, underlined)
169
+ # Update font and xf array
170
+ change_row_font(row, Worksheet::UNDERLINE, underlined, font, xf_id)
171
+ end
172
+
173
+ # Changes font strikethrough settings of row
174
+ def change_row_strikethrough(row=0, struckthrough=false)
175
+ # Get style object
176
+ xf_id = xf_id(get_row_style(row))
177
+ # Get copy of font object with modified strikethrough settings
178
+ font = deep_copy(@workbook.fonts[xf_id[:fontId].to_s][:font])
179
+ font = modify_font_strikethrough(font, struckthrough)
180
+ # Update font and xf array
181
+ change_row_font(row, Worksheet::STRIKETHROUGH, struckthrough, font, xf_id)
146
182
  end
147
183
 
148
184
  def change_row_height(row=0,height=10)
@@ -201,46 +237,82 @@ class Worksheet < PrivateClass
201
237
  change_row_border(row, :diagonal, weight)
202
238
  end
203
239
 
204
- def change_column_font_name(col=0,font_name='Verdana')
205
- s = change_column_font(col,Worksheet::NAME,font_name)
206
- @workbook.fonts[font_id(s)][:font][:name][:attributes][:val] = font_name.to_s
240
+ # Changes font name of column
241
+ def change_column_font_name(col=0, font_name='Verdana')
242
+ # Get style object
243
+ xf_id = xf_id(get_col_style(col))
244
+ # Get copy of font object with modified name
245
+ font = deep_copy(@workbook.fonts[xf_id[:fontId].to_s][:font])
246
+ font[:name][:attributes][:val] = font_name.to_s
247
+ # Update font and xf array
248
+ change_column_font(col, Worksheet::NAME, font_name, font, xf_id)
207
249
  end
208
250
 
209
- def change_column_font_size(col=0,font_size=10)
210
- s = change_column_font(col,Worksheet::SIZE,font_size)
211
- @workbook.fonts[font_id(s)][:font][:sz][:attributes][:val] = font_size
251
+ # Changes font size of column
252
+ def change_column_font_size(col=0, font_size=10)
253
+ # Get style object
254
+ xf_id = xf_id(get_col_style(col))
255
+ # Get copy of font object with modified size
256
+ font = deep_copy(@workbook.fonts[xf_id[:fontId].to_s][:font])
257
+ font[:sz][:attributes][:val] = font_size
258
+ # Update font and xf array
259
+ change_column_font(col, Worksheet::SIZE, font_size, font, xf_id)
212
260
  end
213
261
 
214
- def change_column_font_color(col=0,font_color='000000')
262
+ # Changes font color of column
263
+ def change_column_font_color(col=0, font_color='000000')
215
264
  Color.validate_color(font_color)
216
- s = change_column_font(col,Worksheet::COLOR,font_color)
217
-
218
- font = @workbook.fonts[font_id(s)][:font]
219
- if font[:color].nil? || font[:color][:attributes].nil?
220
- font[:color] = { :attributes => { :rgb => nil } }
221
- end
222
-
223
- font[:color][:attributes][:rgb] = font_color.to_s
224
- end
225
-
226
- def change_column_italics(col=0,italicized=false)
227
- s = change_column_font(col,Worksheet::ITALICS,italicized)
228
- @workbook.fonts[font_id(s)][:font][:i] = italicized ? {} : nil
229
- end
230
-
231
- def change_column_bold(col=0,bolded=false)
232
- s = change_column_font(col,Worksheet::BOLD,bolded)
233
- @workbook.fonts[font_id(s)][:font][:b] = bolded ? {} : nil
234
- end
235
-
236
- def change_column_underline(col=0,underlined=false)
237
- s = change_column_font(col,Worksheet::UNDERLINE,underlined)
238
- @workbook.fonts[font_id(s)][:font][:u] = underlined ? {} : nil
239
- end
240
-
241
- def change_column_strikethrough(col=0,struckthrough=false)
242
- s = change_column_font(col,Worksheet::STRIKETHROUGH,struckthrough)
243
- @workbook.fonts[font_id(s)][:font][:strike] = struckthrough ? {} : nil
265
+ # Get style object
266
+ xf_id = xf_id(get_col_style(col))
267
+ # Get copy of font object with modified color
268
+ font = deep_copy(@workbook.fonts[xf_id[:fontId].to_s][:font])
269
+ font = modify_font_color(font, font_color.to_s)
270
+ # Update font and xf array
271
+ change_column_font(col, Worksheet::COLOR, font_color, font, xf_id)
272
+ end
273
+
274
+ # Changes font italics settings of column
275
+ def change_column_italics(col=0, italicized=false)
276
+ # Get style object
277
+ xf_id = xf_id(get_col_style(col))
278
+ # Get copy of font object with modified italics settings
279
+ font = deep_copy(@workbook.fonts[xf_id[:fontId].to_s][:font])
280
+ font = modify_font_italics(font, italicized)
281
+ # Update font and xf array
282
+ change_column_font(col, Worksheet::ITALICS, italicized, font, xf_id)
283
+ end
284
+
285
+ # Changes font bold settings of column
286
+ def change_column_bold(col=0, bolded=false)
287
+ # Get style object
288
+ xf_id = xf_id(get_col_style(col))
289
+ # Get copy of font object with modified bold settings
290
+ font = deep_copy(@workbook.fonts[xf_id[:fontId].to_s][:font])
291
+ font = modify_font_bold(font, bolded)
292
+ # Update font and xf array
293
+ change_column_font(col, Worksheet::BOLD, bolded, font, xf_id)
294
+ end
295
+
296
+ # Changes font underline settings of column
297
+ def change_column_underline(col=0, underlined=false)
298
+ # Get style object
299
+ xf_id = xf_id(get_col_style(col))
300
+ # Get copy of font object with modified underline settings
301
+ font = deep_copy(@workbook.fonts[xf_id[:fontId].to_s][:font])
302
+ font = modify_font_underline(font, underlined)
303
+ # Update font and xf array
304
+ change_column_font(col, Worksheet::UNDERLINE, underlined, font, xf_id)
305
+ end
306
+
307
+ # Changes font strikethrough settings of column
308
+ def change_column_strikethrough(col=0, struckthrough=false)
309
+ # Get style object
310
+ xf_id = xf_id(get_col_style(col))
311
+ # Get copy of font object with modified strikethrough settings
312
+ font = deep_copy(@workbook.fonts[xf_id[:fontId].to_s][:font])
313
+ font = modify_font_strikethrough(font, struckthrough)
314
+ # Update font and xf array
315
+ change_column_font(col, Worksheet::STRIKETHROUGH, struckthrough, font, xf_id)
244
316
  end
245
317
 
246
318
  def change_column_width(col=0,width=13)
@@ -1100,60 +1172,58 @@ class Worksheet < PrivateClass
1100
1172
  @cols.last[:attributes][:customWidth] = '0'
1101
1173
  end
1102
1174
 
1103
- # row - zer0 indexed int
1175
+ # Helper method to update the row styles array
1104
1176
  # change_type - NAME or SIZE or COLOR etc
1105
1177
  # main method to change font, called from each separate font mutator method
1106
- def change_row_font(row,change_type,arg)
1178
+ def change_row_font(row, change_type, arg, font, xf_id)
1107
1179
  validate_workbook
1108
1180
  validate_nonnegative(row)
1109
-
1110
1181
  increase_rows(row)
1111
1182
 
1112
- if @row_styles[(row+1).to_s].nil?
1113
- @row_styles[(row+1).to_s] = {}
1114
- end
1115
-
1116
- @row_styles[(row+1).to_s][:style] =
1117
- modify_font(@workbook,(@row_styles[(row+1).to_s][:style]).to_i)
1183
+ # Modify font array and retrieve new font id
1184
+ font_id = modify_font(@workbook, font, xf_id[:fontId].to_s)
1185
+ # Get copy of xf object with modified font id
1186
+ xf = deep_copy(xf_id)
1187
+ xf[:fontId] = Integer(font_id)
1188
+ # Modify xf array and retrieve new xf id
1189
+ @row_styles[(row+1).to_s][:style] = modify_xf(@workbook, xf)
1118
1190
 
1119
1191
  if @sheet_data[row].nil?
1120
1192
  @sheet_data[row] = []
1121
1193
  end
1194
+
1122
1195
  @sheet_data[Integer(row)].each do |c|
1123
1196
  unless c.nil?
1124
- font_switch(c,change_type,arg)
1197
+ font_switch(c, change_type, arg)
1125
1198
  end
1126
1199
  end
1127
1200
  end
1128
1201
 
1129
- #main method to change font, called from each separate font mutator method
1130
- def change_column_font(col, change_type, arg)
1202
+ # Helper method to update the fonts and cell styles array
1203
+ # main method to change font, called from each separate font mutator method
1204
+ def change_column_font(col, change_type, arg, font, xf_id)
1131
1205
  validate_workbook
1132
1206
  validate_nonnegative(col)
1133
-
1134
1207
  increase_columns(col)
1135
1208
 
1136
1209
  i = get_cols_index(col)
1137
1210
 
1138
- #just copies any style if there is none which already exists for this col
1139
- #while it changes style/min/max, width *might* be preserved
1140
- if @cols[i].nil?
1141
- style_index = 0
1142
- else
1143
- style_index = Integer(@cols[i][:attributes][:style])
1144
- end
1211
+ # Modify font array and retrieve new font id
1212
+ font_id = modify_font(@workbook, font, xf_id[:fontId].to_s)
1213
+ # Get copy of xf object with modified font id
1214
+ xf = deep_copy(xf_id)
1215
+ xf[:fontId] = Integer(font_id)
1216
+ # Modify xf array and retrieve new xf id
1217
+ modify_xf(@workbook, xf)
1145
1218
 
1146
- style_index = modify_font(@workbook,style_index)
1219
+ change_cols(i, col)
1147
1220
 
1148
- change_cols(i,col)
1149
-
1150
- @sheet_data.each_with_index do |row,i|
1221
+ @sheet_data.each_with_index do |row, i|
1151
1222
  c = row[col]
1152
1223
  unless c.nil?
1153
- font_switch(c,change_type,arg)
1224
+ font_switch(c, change_type, arg)
1154
1225
  end
1155
1226
  end
1156
- style_index
1157
1227
  end
1158
1228
 
1159
1229
  #performs correct modification based on what type of change_type is specified
@@ -1213,8 +1283,35 @@ class Worksheet < PrivateClass
1213
1283
  end
1214
1284
  end
1215
1285
 
1286
+ # Helper method to get the font id for a style index
1216
1287
  def font_id(style_index)
1217
- @workbook.get_style_attributes(@workbook.get_style(style_index))[:fontId]
1288
+ xf_id(style_index)[:fontId]
1289
+ end
1290
+
1291
+ # Helper method to get the style attributes for a style index
1292
+ def xf_id(style_index)
1293
+ @workbook.get_style_attributes(@workbook.get_style(style_index))
1294
+ end
1295
+
1296
+ # Helper method to get the style index for a row
1297
+ def get_row_style(row)
1298
+ if @row_styles[(row+1).to_s].nil?
1299
+ @row_styles[(row+1).to_s] = {}
1300
+ @row_styles[(row+1).to_s][:style] = '0'
1301
+ @workbook.fonts['0'][:count] += 1
1302
+ end
1303
+ return @row_styles[(row+1).to_s][:style]
1304
+ end
1305
+
1306
+ # Helper method to get the style index for a column
1307
+ def get_col_style(col)
1308
+ i = get_cols_index(col)
1309
+ if @cols[i].nil?
1310
+ @workbook.fonts['0'][:count] += 1
1311
+ return 0
1312
+ else
1313
+ return Integer(@cols[i][:attributes][:style])
1314
+ end
1218
1315
  end
1219
1316
 
1220
1317
  def change_row_alignment(row,alignment,is_horizontal)
data/rubyXL.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rubyXL}
8
- s.version = "1.1.11"
8
+ s.version = "1.1.12"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Vivek Bhagwat"]
12
- s.date = %q{2011-11-23}
12
+ s.date = %q{2011-11-29}
13
13
  s.description = %q{rubyXL is a gem which allows the parsing, creation, and manipulation of Microsoft Excel (.xlsx/.xlsm) Documents}
14
14
  s.email = %q{bhagwat.vivek@gmail.com}
15
15
  s.extra_rdoc_files = [
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubyXL
3
3
  version: !ruby/object:Gem::Version
4
- hash: 5
4
+ hash: 11
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 1
9
- - 11
10
- version: 1.1.11
9
+ - 12
10
+ version: 1.1.12
11
11
  platform: ruby
12
12
  authors:
13
13
  - Vivek Bhagwat
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-11-23 00:00:00 -05:00
18
+ date: 2011-11-29 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency