writeexcel 0.4.2 → 0.4.3
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/README.rdoc +149 -144
- data/VERSION +1 -1
- data/lib/writeexcel/format.rb +1600 -1600
- data/lib/writeexcel/formula.rb +1051 -1051
- data/lib/writeexcel/worksheet.rb +8801 -8801
- data/test/test_format.rb +1192 -1192
- data/writeexcel.gemspec +2 -2
- data/writeexcel.rdoc +1382 -1382
- metadata +3 -3
data/README.rdoc
CHANGED
|
@@ -1,144 +1,149 @@
|
|
|
1
|
-
= writeexcel
|
|
2
|
-
|
|
3
|
-
Write to a cross-platform Excel binary file.
|
|
4
|
-
|
|
5
|
-
== Recent Changes
|
|
6
|
-
|
|
7
|
-
v0.4.
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
*
|
|
16
|
-
* Bug fix. Worksheet#
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
*
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
* Bug fix.
|
|
33
|
-
*
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
worksheet.write('
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
*
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
==
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
*
|
|
1
|
+
= writeexcel
|
|
2
|
+
|
|
3
|
+
Write to a cross-platform Excel binary file.
|
|
4
|
+
|
|
5
|
+
== Recent Changes
|
|
6
|
+
|
|
7
|
+
v0.4.3
|
|
8
|
+
* test passed under Ruby 1.9.2
|
|
9
|
+
* Bug fix. Format#set_format_properties, Formula#convert_number found under Ruby 1.9.2
|
|
10
|
+
* Bug fix in test_set_rolation().
|
|
11
|
+
|
|
12
|
+
v0.4.2
|
|
13
|
+
* use namespace 'Writeexcel::' to Chart(::*), Colors, Format, Formula, Worksheet.
|
|
14
|
+
* add_chart() parameter of :type changed . ex) Chart::Bar => 'Chart::Bar'
|
|
15
|
+
* almost complete japanese document : writeexcel.doc
|
|
16
|
+
* Bug fix. typo in Worksheet#set_zoom()
|
|
17
|
+
* some refactoring.
|
|
18
|
+
|
|
19
|
+
v0.4.1
|
|
20
|
+
* Bug fix. Workbook#add_format() doesn't work when received two or more parameters.
|
|
21
|
+
* Bug fix. Worksheet#write_formula() doesn't work when formula contains utf8 string.
|
|
22
|
+
|
|
23
|
+
v0.4.0
|
|
24
|
+
* works also on Ruby 1.9.1.
|
|
25
|
+
* modify README.rdoc below.
|
|
26
|
+
* write source and run in utf8.
|
|
27
|
+
* unary minus supported. but -1 --> -1*1, -SIN() --> -1*SIN()
|
|
28
|
+
|
|
29
|
+
v0.3.5
|
|
30
|
+
* Bug fix. Worksheet#write_comment() doesn't work when value arg is numeric.
|
|
31
|
+
* Bug fix. TRUE/FALSE in formula was misundarstood as :NAME.
|
|
32
|
+
* Bug fix. Worksheet#close() mis-handled @colinfo.
|
|
33
|
+
* Bug fix. Worksheet#set_row() grbit mis-calculate by param hidden.
|
|
34
|
+
* convert examples.(formula_result, indent, merge6, outline, outline_collapsed, panes, right_to_left, row_wrap)
|
|
35
|
+
|
|
36
|
+
v0.3.4
|
|
37
|
+
* Bug fix. add_comment doesn't work.
|
|
38
|
+
* convert examples.(chess, colors, comment1, comment2)
|
|
39
|
+
|
|
40
|
+
v0.3.3
|
|
41
|
+
* add recent change in this document.
|
|
42
|
+
|
|
43
|
+
v0.3.2
|
|
44
|
+
* Bug fix. defined name doesn't work.
|
|
45
|
+
* use jeweler to maintain gem.
|
|
46
|
+
|
|
47
|
+
0.3.0
|
|
48
|
+
* Chart support(Area, Bar, Column, Line, Pie, Scatter, Stock).
|
|
49
|
+
* Document added. See rdoc in your installed gem directory.
|
|
50
|
+
* Change Class name from 'Spreadsheet::WriteExcel' to 'WriteExcel'.
|
|
51
|
+
* many bug fix.
|
|
52
|
+
|
|
53
|
+
== Description
|
|
54
|
+
|
|
55
|
+
This library is converted from Spreadsheet::WriteExcel module of Perl.
|
|
56
|
+
http://search.cpan.org/~jmcnamara/Spreadsheet-WriteExcel-2.37/
|
|
57
|
+
|
|
58
|
+
Some examples written in perl was successfully converted to Ruby. But
|
|
59
|
+
this library written in Ruby has many bugs, I think.
|
|
60
|
+
|
|
61
|
+
Original description is below:
|
|
62
|
+
|
|
63
|
+
The Spreadsheet::WriteExcel module can be used to create a cross-
|
|
64
|
+
platform Excel binary file. Multiple worksheets can be added to a
|
|
65
|
+
workbook and formatting can be applied to cells. Text, numbers,
|
|
66
|
+
formulas, hyperlinks and images can be written to the cells.
|
|
67
|
+
|
|
68
|
+
TThe Excel file produced by this module is compatible with 97,
|
|
69
|
+
2000, 2002, 2003 and 2007.
|
|
70
|
+
|
|
71
|
+
The module will work on the majority of Windows, UNIX and
|
|
72
|
+
Macintosh platforms. Generated files are also compatible with the
|
|
73
|
+
spreadsheet applications Gnumeric and OpenOffice.org.
|
|
74
|
+
|
|
75
|
+
This module cannot be used to read an Excel file.
|
|
76
|
+
|
|
77
|
+
== Usage
|
|
78
|
+
|
|
79
|
+
See rdoc's WriteExcel class document.
|
|
80
|
+
You must save source file in UTF8 and run ruby with -Ku option or set $KCODE='u'.
|
|
81
|
+
|
|
82
|
+
Example Code:
|
|
83
|
+
|
|
84
|
+
require 'writeexcel'
|
|
85
|
+
|
|
86
|
+
# Create a new Excel Workbook
|
|
87
|
+
workbook = WriteExcel.new('ruby.xls')
|
|
88
|
+
|
|
89
|
+
# Add worksheet(s)
|
|
90
|
+
worksheet = workbook.add_worksheet
|
|
91
|
+
worksheet2 = workbook.add_worksheet
|
|
92
|
+
|
|
93
|
+
# Add and define a format
|
|
94
|
+
format = workbook.add_format
|
|
95
|
+
format.set_bold
|
|
96
|
+
format.set_color('red')
|
|
97
|
+
format.set_align('right')
|
|
98
|
+
|
|
99
|
+
# write a formatted and unformatted string.
|
|
100
|
+
worksheet.write(1, 1, 'Hi Excel.', format) # cell B2
|
|
101
|
+
worksheet.write(2, 1, 'Hi Excel.') # cell B3
|
|
102
|
+
|
|
103
|
+
# write a number and formula using A1 notation
|
|
104
|
+
worksheet.write('B4', 3.14159)
|
|
105
|
+
worksheet.write('B5', '=SIN(B4/4)')
|
|
106
|
+
|
|
107
|
+
# write to file
|
|
108
|
+
workbook.close
|
|
109
|
+
|
|
110
|
+
== Difference with Perl module
|
|
111
|
+
|
|
112
|
+
* WriteExcel.new()
|
|
113
|
+
* accept default format parameter such as new('foo.xls', :font => 'Roman', :size => 12)
|
|
114
|
+
* Unary minus is supported, but it will be stored as '-1*'. ex) '=-1' -> '=-1*1', '=-SIN(PI()/2)' => '=-1*SIN(PI()/2)'
|
|
115
|
+
* Worksheet.write(row, col, token, format)
|
|
116
|
+
* if token.kind_of?(Numeric) then call write_number, if token.kind_of?(String) then not call write_number().
|
|
117
|
+
* Worksheet.keep_leading_zeros()
|
|
118
|
+
* ignore. if write 0001, use string such as write(1,2, '0001')
|
|
119
|
+
* and ......
|
|
120
|
+
|
|
121
|
+
== Caution
|
|
122
|
+
|
|
123
|
+
You must save source file in UTF8 and run ruby with -Ku option or set $KCODE='u'
|
|
124
|
+
when use urf8 string data.
|
|
125
|
+
|
|
126
|
+
== Dependencies
|
|
127
|
+
|
|
128
|
+
* ruby 1.8, ruby 1.9.1
|
|
129
|
+
|
|
130
|
+
== Author
|
|
131
|
+
|
|
132
|
+
Original was written in Perl by John McNamara (jmcnamara@cpan.org).
|
|
133
|
+
|
|
134
|
+
Convert to ruby by Hideo Nakamura (cxn03651@msj.biglobe.ne.jp)
|
|
135
|
+
Copyright (c) 2009-2010 Hideo NAKAMURA. See LICENSE for details.
|
|
136
|
+
|
|
137
|
+
== License
|
|
138
|
+
|
|
139
|
+
same as Ruby.
|
|
140
|
+
|
|
141
|
+
== Note on Patches/Pull Requests
|
|
142
|
+
|
|
143
|
+
* Fork the project.
|
|
144
|
+
* Make your feature addition or bug fix.
|
|
145
|
+
* Add tests for it. This is important so I don't break it in a
|
|
146
|
+
future version unintentionally.
|
|
147
|
+
* Commit, do not mess with rakefile, version, or history.
|
|
148
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
|
149
|
+
* Send me a pull request. Bonus points for topic branches.
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.4.
|
|
1
|
+
0.4.3
|
data/lib/writeexcel/format.rb
CHANGED
|
@@ -1,1600 +1,1600 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
##############################################################################
|
|
3
|
-
#
|
|
4
|
-
# Format - A class for defining Excel formatting.
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
# Used in conjunction with WriteExcel
|
|
8
|
-
#
|
|
9
|
-
# Copyright 2000-2010, John McNamara, jmcnamara@cpan.org
|
|
10
|
-
#
|
|
11
|
-
# original written in Perl by John McNamara
|
|
12
|
-
# converted to Ruby by Hideo Nakamura, cxn03651@msj.biglobe.ne.jp
|
|
13
|
-
#
|
|
14
|
-
|
|
15
|
-
#
|
|
16
|
-
# Format - A class for defining Excel formatting.
|
|
17
|
-
#
|
|
18
|
-
# See CELL FORMATTING, FORMAT METHODS, COLOURS IN EXCEL in WriteExcel's rdoc.
|
|
19
|
-
#
|
|
20
|
-
require 'writeexcel/compatibility'
|
|
21
|
-
require 'writeexcel/colors'
|
|
22
|
-
|
|
23
|
-
module Writeexcel
|
|
24
|
-
|
|
25
|
-
class Format < Colors
|
|
26
|
-
|
|
27
|
-
###############################################################################
|
|
28
|
-
#
|
|
29
|
-
# initialize(xf_index=0, properties = {})
|
|
30
|
-
# xf_index :
|
|
31
|
-
# properties : Hash of property => value
|
|
32
|
-
#
|
|
33
|
-
# Constructor
|
|
34
|
-
#
|
|
35
|
-
def initialize(xf_index = 0, properties = {}) # :nodoc:
|
|
36
|
-
@xf_index = xf_index
|
|
37
|
-
|
|
38
|
-
@type = 0
|
|
39
|
-
@font_index = 0
|
|
40
|
-
@font = 'Arial'
|
|
41
|
-
@size = 10
|
|
42
|
-
@bold = 0x0190
|
|
43
|
-
@italic = 0
|
|
44
|
-
@color = 0x7FFF
|
|
45
|
-
@underline = 0
|
|
46
|
-
@font_strikeout = 0
|
|
47
|
-
@font_outline = 0
|
|
48
|
-
@font_shadow = 0
|
|
49
|
-
@font_script = 0
|
|
50
|
-
@font_family = 0
|
|
51
|
-
@font_charset = 0
|
|
52
|
-
@font_encoding = 0
|
|
53
|
-
|
|
54
|
-
@num_format = 0
|
|
55
|
-
@num_format_enc = 0
|
|
56
|
-
|
|
57
|
-
@hidden = 0
|
|
58
|
-
@locked = 1
|
|
59
|
-
|
|
60
|
-
@text_h_align = 0
|
|
61
|
-
@text_wrap = 0
|
|
62
|
-
@text_v_align = 2
|
|
63
|
-
@text_justlast = 0
|
|
64
|
-
@rotation = 0
|
|
65
|
-
|
|
66
|
-
@fg_color = 0x40
|
|
67
|
-
@bg_color = 0x41
|
|
68
|
-
|
|
69
|
-
@pattern = 0
|
|
70
|
-
|
|
71
|
-
@bottom = 0
|
|
72
|
-
@top = 0
|
|
73
|
-
@left = 0
|
|
74
|
-
@right = 0
|
|
75
|
-
|
|
76
|
-
@bottom_color = 0x40
|
|
77
|
-
@top_color = 0x40
|
|
78
|
-
@left_color = 0x40
|
|
79
|
-
@right_color = 0x40
|
|
80
|
-
|
|
81
|
-
@indent = 0
|
|
82
|
-
@shrink = 0
|
|
83
|
-
@merge_range = 0
|
|
84
|
-
@reading_order = 0
|
|
85
|
-
|
|
86
|
-
@diag_type = 0
|
|
87
|
-
@diag_color = 0x40
|
|
88
|
-
@diag_border = 0
|
|
89
|
-
|
|
90
|
-
@font_only = 0
|
|
91
|
-
|
|
92
|
-
# Temp code to prevent merged formats in non-merged cells.
|
|
93
|
-
@used_merge = 0
|
|
94
|
-
|
|
95
|
-
set_format_properties(properties) unless properties.empty?
|
|
96
|
-
end
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
#
|
|
100
|
-
# :call-seq:
|
|
101
|
-
# copy(format)
|
|
102
|
-
#
|
|
103
|
-
# Copy the attributes of another Format object.
|
|
104
|
-
#
|
|
105
|
-
# This method is used to copy all of the properties from one Format object
|
|
106
|
-
# to another:
|
|
107
|
-
#
|
|
108
|
-
# lorry1 = workbook.add_format
|
|
109
|
-
# lorry1.set_bold
|
|
110
|
-
# lorry1.set_italic
|
|
111
|
-
# lorry1.set_color('red') # lorry1 is bold, italic and red
|
|
112
|
-
#
|
|
113
|
-
# lorry2 = workbook.add_format
|
|
114
|
-
# lorry2.copy(lorry1)
|
|
115
|
-
# lorry2.set_color('yellow') # lorry2 is bold, italic and yellow
|
|
116
|
-
#
|
|
117
|
-
# The copy() method is only useful if you are using the method interface
|
|
118
|
-
# to Format properties. It generally isn't required if you are setting
|
|
119
|
-
# Format properties directly using hashes.
|
|
120
|
-
#
|
|
121
|
-
# Note: this is not a copy constructor, both objects must exist prior to
|
|
122
|
-
# copying.
|
|
123
|
-
#
|
|
124
|
-
def copy(other)
|
|
125
|
-
# copy properties except xf, merge_range, used_merge
|
|
126
|
-
# Copy properties
|
|
127
|
-
@type = other.type
|
|
128
|
-
@font_index = other.font_index
|
|
129
|
-
@font = other.font
|
|
130
|
-
@size = other.size
|
|
131
|
-
@bold = other.bold
|
|
132
|
-
@italic = other.italic
|
|
133
|
-
@color = other.color
|
|
134
|
-
@underline = other.underline
|
|
135
|
-
@font_strikeout = other.font_strikeout
|
|
136
|
-
@font_outline = other.font_outline
|
|
137
|
-
@font_shadow = other.font_shadow
|
|
138
|
-
@font_script = other.font_script
|
|
139
|
-
@font_family = other.font_family
|
|
140
|
-
@font_charset = other.font_charset
|
|
141
|
-
@font_encoding = other.font_encoding
|
|
142
|
-
|
|
143
|
-
@num_format = other.num_format
|
|
144
|
-
@num_format_enc = other.num_format_enc
|
|
145
|
-
|
|
146
|
-
@hidden = other.hidden
|
|
147
|
-
@locked = other.locked
|
|
148
|
-
|
|
149
|
-
@text_h_align = other.text_h_align
|
|
150
|
-
@text_wrap = other.text_wrap
|
|
151
|
-
@text_v_align = other.text_v_align
|
|
152
|
-
@text_justlast = other.text_justlast
|
|
153
|
-
@rotation = other.rotation
|
|
154
|
-
|
|
155
|
-
@fg_color = other.fg_color
|
|
156
|
-
@bg_color = other.bg_color
|
|
157
|
-
|
|
158
|
-
@pattern = other.pattern
|
|
159
|
-
|
|
160
|
-
@bottom = other.bottom
|
|
161
|
-
@top = other.top
|
|
162
|
-
@left = other.left
|
|
163
|
-
@right = other.right
|
|
164
|
-
|
|
165
|
-
@bottom_color = other.bottom_color
|
|
166
|
-
@top_color = other.top_color
|
|
167
|
-
@left_color = other.left_color
|
|
168
|
-
@right_color = other.right_color
|
|
169
|
-
|
|
170
|
-
@indent = other.indent
|
|
171
|
-
@shrink = other.shrink
|
|
172
|
-
@reading_order = other.reading_order
|
|
173
|
-
|
|
174
|
-
@diag_type = other.diag_type
|
|
175
|
-
@diag_color = other.diag_color
|
|
176
|
-
@diag_border = other.diag_border
|
|
177
|
-
|
|
178
|
-
@font_only = other.font_only
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
###############################################################################
|
|
182
|
-
#
|
|
183
|
-
# get_xf($style)
|
|
184
|
-
#
|
|
185
|
-
# Generate an Excel BIFF XF record.
|
|
186
|
-
#
|
|
187
|
-
def get_xf # :nodoc:
|
|
188
|
-
|
|
189
|
-
# Local Variable
|
|
190
|
-
# record; # Record identifier
|
|
191
|
-
# length; # Number of bytes to follow
|
|
192
|
-
#
|
|
193
|
-
# ifnt; # Index to FONT record
|
|
194
|
-
# ifmt; # Index to FORMAT record
|
|
195
|
-
# style; # Style and other options
|
|
196
|
-
# align; # Alignment
|
|
197
|
-
# indent; #
|
|
198
|
-
# icv; # fg and bg pattern colors
|
|
199
|
-
# border1; # Border line options
|
|
200
|
-
# border2; # Border line options
|
|
201
|
-
# border3; # Border line options
|
|
202
|
-
|
|
203
|
-
# Set the type of the XF record and some of the attributes.
|
|
204
|
-
if @type == 0xFFF5 then
|
|
205
|
-
style = 0xFFF5
|
|
206
|
-
else
|
|
207
|
-
style = @locked
|
|
208
|
-
style |= @hidden << 1
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
# Flags to indicate if attributes have been set.
|
|
212
|
-
atr_num = (@num_format != 0) ? 1 : 0
|
|
213
|
-
atr_fnt = (@font_index != 0) ? 1 : 0
|
|
214
|
-
atr_alc = (@text_h_align != 0 ||
|
|
215
|
-
@text_v_align != 2 ||
|
|
216
|
-
@shrink != 0 ||
|
|
217
|
-
@merge_range != 0 ||
|
|
218
|
-
@text_wrap != 0 ||
|
|
219
|
-
@indent != 0) ? 1 : 0
|
|
220
|
-
atr_bdr = (@bottom != 0 ||
|
|
221
|
-
@top != 0 ||
|
|
222
|
-
@left != 0 ||
|
|
223
|
-
@right != 0 ||
|
|
224
|
-
@diag_type != 0) ? 1 : 0
|
|
225
|
-
atr_pat = (@fg_color != 0x40 ||
|
|
226
|
-
@bg_color != 0x41 ||
|
|
227
|
-
@pattern != 0x00) ? 1 : 0
|
|
228
|
-
atr_prot = (@hidden != 0 ||
|
|
229
|
-
@locked != 1) ? 1 : 0
|
|
230
|
-
|
|
231
|
-
# Set attribute changed flags for the style formats.
|
|
232
|
-
if @xf_index != 0 and @type == 0xFFF5
|
|
233
|
-
if @xf_index >= 16
|
|
234
|
-
atr_num = 0
|
|
235
|
-
atr_fnt = 1
|
|
236
|
-
else
|
|
237
|
-
atr_num = 1
|
|
238
|
-
atr_fnt = 0
|
|
239
|
-
end
|
|
240
|
-
atr_alc = 1
|
|
241
|
-
atr_bdr = 1
|
|
242
|
-
atr_pat = 1
|
|
243
|
-
atr_prot = 1
|
|
244
|
-
end
|
|
245
|
-
|
|
246
|
-
# Set a default diagonal border style if none was specified.
|
|
247
|
-
@diag_border = 1 if (@diag_border ==0 and @diag_type != 0)
|
|
248
|
-
|
|
249
|
-
# Reset the default colours for the non-font properties
|
|
250
|
-
@fg_color = 0x40 if @fg_color == 0x7FFF
|
|
251
|
-
@bg_color = 0x41 if @bg_color == 0x7FFF
|
|
252
|
-
@bottom_color = 0x40 if @bottom_color == 0x7FFF
|
|
253
|
-
@top_color = 0x40 if @top_color == 0x7FFF
|
|
254
|
-
@left_color = 0x40 if @left_color == 0x7FFF
|
|
255
|
-
@right_color = 0x40 if @right_color == 0x7FFF
|
|
256
|
-
@diag_color = 0x40 if @diag_color == 0x7FFF
|
|
257
|
-
|
|
258
|
-
# Zero the default border colour if the border has not been set.
|
|
259
|
-
@bottom_color = 0 if @bottom == 0
|
|
260
|
-
@top_color = 0 if @top == 0
|
|
261
|
-
@right_color = 0 if @right == 0
|
|
262
|
-
@left_color = 0 if @left == 0
|
|
263
|
-
@diag_color = 0 if @diag_type == 0
|
|
264
|
-
|
|
265
|
-
# The following 2 logical statements take care of special cases in relation
|
|
266
|
-
# to cell colours and patterns:
|
|
267
|
-
# 1. For a solid fill (_pattern == 1) Excel reverses the role of foreground
|
|
268
|
-
# and background colours.
|
|
269
|
-
# 2. If the user specifies a foreground or background colour without a
|
|
270
|
-
# pattern they probably wanted a solid fill, so we fill in the defaults.
|
|
271
|
-
#
|
|
272
|
-
if (@pattern <= 0x01 && @bg_color != 0x41 && @fg_color == 0x40)
|
|
273
|
-
@fg_color = @bg_color
|
|
274
|
-
@bg_color = 0x40
|
|
275
|
-
@pattern = 1
|
|
276
|
-
end
|
|
277
|
-
|
|
278
|
-
if (@pattern <= 0x01 && @bg_color == 0x41 && @fg_color != 0x40)
|
|
279
|
-
@bg_color = 0x40
|
|
280
|
-
@pattern = 1
|
|
281
|
-
end
|
|
282
|
-
|
|
283
|
-
# Set default alignment if indent is set.
|
|
284
|
-
@text_h_align = 1 if @indent != 0 and @text_h_align == 0
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
record = 0x00E0
|
|
288
|
-
length = 0x0014
|
|
289
|
-
|
|
290
|
-
ifnt = @font_index
|
|
291
|
-
ifmt = @num_format
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
align = @text_h_align
|
|
295
|
-
align |= @text_wrap << 3
|
|
296
|
-
align |= @text_v_align << 4
|
|
297
|
-
align |= @text_justlast << 7
|
|
298
|
-
align |= @rotation << 8
|
|
299
|
-
|
|
300
|
-
indent = @indent
|
|
301
|
-
indent |= @shrink << 4
|
|
302
|
-
indent |= @merge_range << 5
|
|
303
|
-
indent |= @reading_order << 6
|
|
304
|
-
indent |= atr_num << 10
|
|
305
|
-
indent |= atr_fnt << 11
|
|
306
|
-
indent |= atr_alc << 12
|
|
307
|
-
indent |= atr_bdr << 13
|
|
308
|
-
indent |= atr_pat << 14
|
|
309
|
-
indent |= atr_prot << 15
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
border1 = @left
|
|
313
|
-
border1 |= @right << 4
|
|
314
|
-
border1 |= @top << 8
|
|
315
|
-
border1 |= @bottom << 12
|
|
316
|
-
|
|
317
|
-
border2 = @left_color
|
|
318
|
-
border2 |= @right_color << 7
|
|
319
|
-
border2 |= @diag_type << 14
|
|
320
|
-
|
|
321
|
-
border3 = @top_color
|
|
322
|
-
border3 |= @bottom_color << 7
|
|
323
|
-
border3 |= @diag_color << 14
|
|
324
|
-
border3 |= @diag_border << 21
|
|
325
|
-
border3 |= @pattern << 26
|
|
326
|
-
|
|
327
|
-
icv = @fg_color
|
|
328
|
-
icv |= @bg_color << 7
|
|
329
|
-
|
|
330
|
-
header = [record, length].pack("vv")
|
|
331
|
-
data = [ifnt, ifmt, style, align, indent,
|
|
332
|
-
border1, border2, border3, icv].pack("vvvvvvvVv")
|
|
333
|
-
|
|
334
|
-
header + data
|
|
335
|
-
end
|
|
336
|
-
|
|
337
|
-
###############################################################################
|
|
338
|
-
#
|
|
339
|
-
# get_font()
|
|
340
|
-
#
|
|
341
|
-
# Generate an Excel BIFF FONT record.
|
|
342
|
-
#
|
|
343
|
-
def get_font # :nodoc:
|
|
344
|
-
|
|
345
|
-
# my $record; # Record identifier
|
|
346
|
-
# my $length; # Record length
|
|
347
|
-
|
|
348
|
-
# my $dyHeight; # Height of font (1/20 of a point)
|
|
349
|
-
# my $grbit; # Font attributes
|
|
350
|
-
# my $icv; # Index to color palette
|
|
351
|
-
# my $bls; # Bold style
|
|
352
|
-
# my $sss; # Superscript/subscript
|
|
353
|
-
# my $uls; # Underline
|
|
354
|
-
# my $bFamily; # Font family
|
|
355
|
-
# my $bCharSet; # Character set
|
|
356
|
-
# my $reserved; # Reserved
|
|
357
|
-
# my $cch; # Length of font name
|
|
358
|
-
# my $rgch; # Font name
|
|
359
|
-
# my $encoding; # Font name character encoding
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
dyHeight = @size * 20
|
|
363
|
-
icv = @color
|
|
364
|
-
bls = @bold
|
|
365
|
-
sss = @font_script
|
|
366
|
-
uls = @underline
|
|
367
|
-
bFamily = @font_family
|
|
368
|
-
bCharSet = @font_charset
|
|
369
|
-
rgch = @font
|
|
370
|
-
encoding = @font_encoding
|
|
371
|
-
|
|
372
|
-
rgch = convert_to_ascii_if_ascii(rgch)
|
|
373
|
-
|
|
374
|
-
# Handle utf8 strings
|
|
375
|
-
if rgch.encoding == Encoding::UTF_8
|
|
376
|
-
rgch = utf8_to_16be(rgch)
|
|
377
|
-
encoding = 1
|
|
378
|
-
end
|
|
379
|
-
|
|
380
|
-
cch = rgch.bytesize
|
|
381
|
-
#
|
|
382
|
-
# Handle Unicode font names.
|
|
383
|
-
if (encoding == 1)
|
|
384
|
-
raise "Uneven number of bytes in Unicode font name" if cch % 2 != 0
|
|
385
|
-
cch /= 2 if encoding !=0
|
|
386
|
-
rgch = rgch.unpack('n*').pack('v*')
|
|
387
|
-
end
|
|
388
|
-
|
|
389
|
-
record = 0x31
|
|
390
|
-
length = 0x10 + rgch.bytesize
|
|
391
|
-
reserved = 0x00
|
|
392
|
-
|
|
393
|
-
grbit = 0x00
|
|
394
|
-
grbit |= 0x02 if @italic != 0
|
|
395
|
-
grbit |= 0x08 if @font_strikeout != 0
|
|
396
|
-
grbit |= 0x10 if @font_outline != 0
|
|
397
|
-
grbit |= 0x20 if @font_shadow != 0
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
header = [record, length].pack("vv")
|
|
401
|
-
data = [dyHeight, grbit, icv, bls,
|
|
402
|
-
sss, uls, bFamily,
|
|
403
|
-
bCharSet, reserved, cch, encoding].pack('vvvvvCCCCCC')
|
|
404
|
-
|
|
405
|
-
header + data + rgch
|
|
406
|
-
end
|
|
407
|
-
|
|
408
|
-
###############################################################################
|
|
409
|
-
#
|
|
410
|
-
# get_font_key()
|
|
411
|
-
#
|
|
412
|
-
# Returns a unique hash key for a font. Used by Workbook->_store_all_fonts()
|
|
413
|
-
#
|
|
414
|
-
def get_font_key # :nodoc:
|
|
415
|
-
# The following elements are arranged to increase the probability of
|
|
416
|
-
# generating a unique key. Elements that hold a large range of numbers
|
|
417
|
-
# e.g. _color are placed between two binary elements such as _italic
|
|
418
|
-
|
|
419
|
-
key = "#{@font}#{@size}#{@font_script}#{@underline}#{@font_strikeout}#{@bold}#{@font_outline}"
|
|
420
|
-
key += "#{@font_family}#{@font_charset}#{@font_shadow}#{@color}#{@italic}#{@font_encoding}"
|
|
421
|
-
key.gsub(' ', '_') # Convert the key to a single word
|
|
422
|
-
end
|
|
423
|
-
|
|
424
|
-
###############################################################################
|
|
425
|
-
#
|
|
426
|
-
# xf_index()
|
|
427
|
-
#
|
|
428
|
-
# Returns the used by Worksheet->_XF()
|
|
429
|
-
#
|
|
430
|
-
def xf_index # :nodoc:
|
|
431
|
-
@xf_index
|
|
432
|
-
end
|
|
433
|
-
|
|
434
|
-
def used_merge # :nodoc:
|
|
435
|
-
@used_merge
|
|
436
|
-
end
|
|
437
|
-
|
|
438
|
-
def used_merge=(val) # :nodoc:
|
|
439
|
-
@used_merge = val
|
|
440
|
-
end
|
|
441
|
-
|
|
442
|
-
def type # :nodoc:
|
|
443
|
-
@type
|
|
444
|
-
end
|
|
445
|
-
|
|
446
|
-
def font_index # :nodoc:
|
|
447
|
-
@font_index
|
|
448
|
-
end
|
|
449
|
-
|
|
450
|
-
def font_index=(val) # :nodoc:
|
|
451
|
-
@font_index = val
|
|
452
|
-
end
|
|
453
|
-
|
|
454
|
-
def font # :nodoc:
|
|
455
|
-
@font
|
|
456
|
-
end
|
|
457
|
-
|
|
458
|
-
def size # :nodoc:
|
|
459
|
-
@size
|
|
460
|
-
end
|
|
461
|
-
|
|
462
|
-
def bold # :nodoc:
|
|
463
|
-
@bold
|
|
464
|
-
end
|
|
465
|
-
|
|
466
|
-
def italic # :nodoc:
|
|
467
|
-
@italic
|
|
468
|
-
end
|
|
469
|
-
|
|
470
|
-
def color # :nodoc:
|
|
471
|
-
@color
|
|
472
|
-
end
|
|
473
|
-
|
|
474
|
-
def underline # :nodoc:
|
|
475
|
-
@underline
|
|
476
|
-
end
|
|
477
|
-
|
|
478
|
-
def font_strikeout # :nodoc:
|
|
479
|
-
@font_strikeout
|
|
480
|
-
end
|
|
481
|
-
|
|
482
|
-
def font_outline # :nodoc:
|
|
483
|
-
@font_outline
|
|
484
|
-
end
|
|
485
|
-
|
|
486
|
-
def font_shadow # :nodoc:
|
|
487
|
-
@font_shadow
|
|
488
|
-
end
|
|
489
|
-
|
|
490
|
-
def font_script # :nodoc:
|
|
491
|
-
@font_script
|
|
492
|
-
end
|
|
493
|
-
|
|
494
|
-
def font_family # :nodoc:
|
|
495
|
-
@font_family
|
|
496
|
-
end
|
|
497
|
-
|
|
498
|
-
def font_charset # :nodoc:
|
|
499
|
-
@font_charset
|
|
500
|
-
end
|
|
501
|
-
|
|
502
|
-
def font_encoding # :nodoc:
|
|
503
|
-
@font_encoding
|
|
504
|
-
end
|
|
505
|
-
|
|
506
|
-
def num_format # :nodoc:
|
|
507
|
-
@num_format
|
|
508
|
-
end
|
|
509
|
-
|
|
510
|
-
def num_format=(val) # :nodoc:
|
|
511
|
-
@num_format = val
|
|
512
|
-
end
|
|
513
|
-
|
|
514
|
-
def num_format_enc # :nodoc:
|
|
515
|
-
@num_format_enc
|
|
516
|
-
end
|
|
517
|
-
|
|
518
|
-
def hidden # :nodoc:
|
|
519
|
-
@hidden
|
|
520
|
-
end
|
|
521
|
-
|
|
522
|
-
def locked # :nodoc:
|
|
523
|
-
@locked
|
|
524
|
-
end
|
|
525
|
-
|
|
526
|
-
def text_h_align # :nodoc:
|
|
527
|
-
@text_h_align
|
|
528
|
-
end
|
|
529
|
-
|
|
530
|
-
def text_wrap # :nodoc:
|
|
531
|
-
@text_wrap
|
|
532
|
-
end
|
|
533
|
-
|
|
534
|
-
def text_v_align # :nodoc:
|
|
535
|
-
@text_v_align
|
|
536
|
-
end
|
|
537
|
-
|
|
538
|
-
def text_justlast # :nodoc:
|
|
539
|
-
@text_justlast
|
|
540
|
-
end
|
|
541
|
-
|
|
542
|
-
def rotation # :nodoc:
|
|
543
|
-
@rotation
|
|
544
|
-
end
|
|
545
|
-
|
|
546
|
-
def fg_color # :nodoc:
|
|
547
|
-
@fg_color
|
|
548
|
-
end
|
|
549
|
-
|
|
550
|
-
def bg_color # :nodoc:
|
|
551
|
-
@bg_color
|
|
552
|
-
end
|
|
553
|
-
|
|
554
|
-
def pattern # :nodoc:
|
|
555
|
-
@pattern
|
|
556
|
-
end
|
|
557
|
-
|
|
558
|
-
def bottom # :nodoc:
|
|
559
|
-
@bottom
|
|
560
|
-
end
|
|
561
|
-
|
|
562
|
-
def top # :nodoc:
|
|
563
|
-
@top
|
|
564
|
-
end
|
|
565
|
-
|
|
566
|
-
def left # :nodoc:
|
|
567
|
-
@left
|
|
568
|
-
end
|
|
569
|
-
|
|
570
|
-
def right # :nodoc:
|
|
571
|
-
@right
|
|
572
|
-
end
|
|
573
|
-
|
|
574
|
-
def bottom_color # :nodoc:
|
|
575
|
-
@bottom_color
|
|
576
|
-
end
|
|
577
|
-
|
|
578
|
-
def top_color # :nodoc:
|
|
579
|
-
@top_color
|
|
580
|
-
end
|
|
581
|
-
|
|
582
|
-
def left_color # :nodoc:
|
|
583
|
-
@left_color
|
|
584
|
-
end
|
|
585
|
-
|
|
586
|
-
def right_color # :nodoc:
|
|
587
|
-
@right_color
|
|
588
|
-
end
|
|
589
|
-
|
|
590
|
-
def indent # :nodoc:
|
|
591
|
-
@indent
|
|
592
|
-
end
|
|
593
|
-
|
|
594
|
-
def shrink # :nodoc:
|
|
595
|
-
@shrink
|
|
596
|
-
end
|
|
597
|
-
|
|
598
|
-
def reading_order # :nodoc:
|
|
599
|
-
@reading_order
|
|
600
|
-
end
|
|
601
|
-
|
|
602
|
-
def diag_type # :nodoc:
|
|
603
|
-
@diag_type
|
|
604
|
-
end
|
|
605
|
-
|
|
606
|
-
def diag_color # :nodoc:
|
|
607
|
-
@diag_color
|
|
608
|
-
end
|
|
609
|
-
|
|
610
|
-
def diag_border # :nodoc:
|
|
611
|
-
@diag_border
|
|
612
|
-
end
|
|
613
|
-
|
|
614
|
-
def font_only # :nodoc:
|
|
615
|
-
@font_only
|
|
616
|
-
end
|
|
617
|
-
|
|
618
|
-
###############################################################################
|
|
619
|
-
#
|
|
620
|
-
# class method Format._get_color(colour)
|
|
621
|
-
#
|
|
622
|
-
# used from Worksheet.rb
|
|
623
|
-
#
|
|
624
|
-
# this is cut & copy of get_color().
|
|
625
|
-
#
|
|
626
|
-
def self._get_color(color) # :nodoc:
|
|
627
|
-
Colors.new.get_color(color)
|
|
628
|
-
end
|
|
629
|
-
|
|
630
|
-
###############################################################################
|
|
631
|
-
#
|
|
632
|
-
# set_type()
|
|
633
|
-
#
|
|
634
|
-
# Set the XF object type as 0 = cell XF or 0xFFF5 = style XF.
|
|
635
|
-
#
|
|
636
|
-
def set_type(type = nil) # :nodoc:
|
|
637
|
-
|
|
638
|
-
if !type.nil? and type == 0
|
|
639
|
-
@type = 0x0000
|
|
640
|
-
else
|
|
641
|
-
@type = 0xFFF5
|
|
642
|
-
end
|
|
643
|
-
end
|
|
644
|
-
|
|
645
|
-
#
|
|
646
|
-
# Default state: Font size is 10
|
|
647
|
-
# Default action: Set font size to 1
|
|
648
|
-
# Valid args: Integer values from 1 to as big as your screen.
|
|
649
|
-
#
|
|
650
|
-
# Set the font size. Excel adjusts the height of a row to accommodate the
|
|
651
|
-
# largest font size in the row. You can also explicitly specify the height
|
|
652
|
-
# of a row using the set_row() worksheet method.
|
|
653
|
-
#
|
|
654
|
-
# format = workbook.add_format
|
|
655
|
-
# format.set_size(30)
|
|
656
|
-
#
|
|
657
|
-
def set_size(size = 1)
|
|
658
|
-
if size.respond_to?(:to_int) && size.respond_to?(:+) && size >= 1 # avoid Symbol
|
|
659
|
-
@size = size.to_int
|
|
660
|
-
end
|
|
661
|
-
end
|
|
662
|
-
|
|
663
|
-
#
|
|
664
|
-
# Set the font colour.
|
|
665
|
-
#
|
|
666
|
-
# Default state: Excels default color, usually black
|
|
667
|
-
# Default action: Set the default color
|
|
668
|
-
# Valid args: Integers from 8..63 or the following strings:
|
|
669
|
-
# 'black', 'blue', 'brown', 'cyan', 'gray'
|
|
670
|
-
# 'green', 'lime', 'magenta', 'navy', 'orange'
|
|
671
|
-
# 'pink', 'purple', 'red', 'silver', 'white', 'yellow'
|
|
672
|
-
#
|
|
673
|
-
# The set_color() method is used as follows:
|
|
674
|
-
#
|
|
675
|
-
# format = workbook.add_format()
|
|
676
|
-
# format.set_color('red')
|
|
677
|
-
# worksheet.write(0, 0, 'wheelbarrow', format)
|
|
678
|
-
#
|
|
679
|
-
# Note: The set_color() method is used to set the colour of the font in a cell.
|
|
680
|
-
# To set the colour of a cell use the set_bg_color()
|
|
681
|
-
# and set_pattern() methods.
|
|
682
|
-
#
|
|
683
|
-
def set_color(color = 0x7FFF)
|
|
684
|
-
@color = get_color(color)
|
|
685
|
-
end
|
|
686
|
-
|
|
687
|
-
#
|
|
688
|
-
# Set the italic property of the font:
|
|
689
|
-
#
|
|
690
|
-
# Default state: Italic is off
|
|
691
|
-
# Default action: Turn italic on
|
|
692
|
-
# Valid args: 0, 1
|
|
693
|
-
#
|
|
694
|
-
# format.set_italic # Turn italic on
|
|
695
|
-
#
|
|
696
|
-
def set_italic(arg = 1)
|
|
697
|
-
begin
|
|
698
|
-
if arg == 1 then @italic = 1 # italic on
|
|
699
|
-
elsif arg == 0 then @italic = 0 # italic off
|
|
700
|
-
else
|
|
701
|
-
raise ArgumentError,
|
|
702
|
-
"\n\n set_italic(#{arg.inspect})\n arg must be 0, 1, or none. ( 0:OFF , 1 and none:ON )\n"
|
|
703
|
-
end
|
|
704
|
-
end
|
|
705
|
-
end
|
|
706
|
-
|
|
707
|
-
#
|
|
708
|
-
# Set the bold property of the font:
|
|
709
|
-
#
|
|
710
|
-
# Default state: bold is off
|
|
711
|
-
# Default action: Turn bold on
|
|
712
|
-
# Valid args: 0, 1 [1]
|
|
713
|
-
#
|
|
714
|
-
# format.set_bold() # Turn bold on
|
|
715
|
-
#
|
|
716
|
-
# [1] Actually, values in the range 100..1000 are also valid. 400 is normal,
|
|
717
|
-
# 700 is bold and 1000 is very bold indeed. It is probably best to set the
|
|
718
|
-
# value to 1 and use normal bold.
|
|
719
|
-
#
|
|
720
|
-
def set_bold(weight = nil)
|
|
721
|
-
|
|
722
|
-
if weight.nil?
|
|
723
|
-
weight = 0x2BC
|
|
724
|
-
elsif !weight.respond_to?(:to_int) || !weight.respond_to?(:+) # avoid Symbol
|
|
725
|
-
weight = 0x190
|
|
726
|
-
elsif weight == 1 # Bold text
|
|
727
|
-
weight = 0x2BC
|
|
728
|
-
elsif weight == 0 # Normal text
|
|
729
|
-
weight = 0x190
|
|
730
|
-
elsif weight < 0x064 || 0x3E8 < weight # Out bound
|
|
731
|
-
weight = 0x190
|
|
732
|
-
else
|
|
733
|
-
weight = weight.to_i
|
|
734
|
-
end
|
|
735
|
-
|
|
736
|
-
@bold = weight
|
|
737
|
-
end
|
|
738
|
-
|
|
739
|
-
#
|
|
740
|
-
# Set the underline property of the font.
|
|
741
|
-
#
|
|
742
|
-
# Default state: Underline is off
|
|
743
|
-
# Default action: Turn on single underline
|
|
744
|
-
# Valid args: 0 = No underline
|
|
745
|
-
# 1 = Single underline
|
|
746
|
-
# 2 = Double underline
|
|
747
|
-
# 33 = Single accounting underline
|
|
748
|
-
# 34 = Double accounting underline
|
|
749
|
-
#
|
|
750
|
-
# format.set_underline(); # Single underline
|
|
751
|
-
#
|
|
752
|
-
def set_underline(arg = 1)
|
|
753
|
-
begin
|
|
754
|
-
case arg
|
|
755
|
-
when 0 then @underline = 0 # off
|
|
756
|
-
when 1 then @underline = 1 # Single
|
|
757
|
-
when 2 then @underline = 2 # Double
|
|
758
|
-
when 33 then @underline = 33 # Single accounting
|
|
759
|
-
when 34 then @underline = 34 # Double accounting
|
|
760
|
-
else
|
|
761
|
-
raise ArgumentError,
|
|
762
|
-
"\n\n set_underline(#{arg.inspect})\n arg must be 0, 1, or none, 2, 33, 34.\n"
|
|
763
|
-
" ( 0:OFF, 1 and none:Single, 2:Double, 33:Single accounting, 34:Double accounting )\n"
|
|
764
|
-
end
|
|
765
|
-
end
|
|
766
|
-
end
|
|
767
|
-
|
|
768
|
-
#
|
|
769
|
-
# Set the strikeout property of the font.
|
|
770
|
-
#
|
|
771
|
-
# Default state: Strikeout is off
|
|
772
|
-
# Default action: Turn strikeout on
|
|
773
|
-
# Valid args: 0, 1
|
|
774
|
-
#
|
|
775
|
-
def set_font_strikeout(arg = 1)
|
|
776
|
-
begin
|
|
777
|
-
if arg == 0 then @font_strikeout = 0
|
|
778
|
-
elsif arg == 1 then @font_strikeout = 1
|
|
779
|
-
else
|
|
780
|
-
raise ArgumentError,
|
|
781
|
-
"\n\n set_font_strikeout(#{arg.inspect})\n arg must be 0, 1, or none.\n"
|
|
782
|
-
" ( 0:OFF, 1 and none:Strikeout )\n"
|
|
783
|
-
end
|
|
784
|
-
end
|
|
785
|
-
end
|
|
786
|
-
|
|
787
|
-
#
|
|
788
|
-
# Set the superscript/subscript property of the font.
|
|
789
|
-
# This format is currently not very useful.
|
|
790
|
-
#
|
|
791
|
-
# Default state: Super/Subscript is off
|
|
792
|
-
# Default action: Turn Superscript on
|
|
793
|
-
# Valid args: 0 = Normal
|
|
794
|
-
# 1 = Superscript
|
|
795
|
-
# 2 = Subscript
|
|
796
|
-
#
|
|
797
|
-
def set_font_script(arg = 1)
|
|
798
|
-
begin
|
|
799
|
-
if arg == 0 then @font_script = 0
|
|
800
|
-
elsif arg == 1 then @font_script = 1
|
|
801
|
-
elsif arg == 2 then @font_script = 2
|
|
802
|
-
else
|
|
803
|
-
raise ArgumentError,
|
|
804
|
-
"\n\n set_font_script(#{arg.inspect})\n arg must be 0, 1, or none. or 2\n"
|
|
805
|
-
" ( 0:OFF, 1 and none:Superscript, 2:Subscript )\n"
|
|
806
|
-
end
|
|
807
|
-
end
|
|
808
|
-
end
|
|
809
|
-
|
|
810
|
-
#
|
|
811
|
-
# Macintosh only.
|
|
812
|
-
#
|
|
813
|
-
# Default state: Outline is off
|
|
814
|
-
# Default action: Turn outline on
|
|
815
|
-
# Valid args: 0, 1
|
|
816
|
-
#
|
|
817
|
-
def set_font_outline(arg = 1)
|
|
818
|
-
begin
|
|
819
|
-
if arg == 0 then @font_outline = 0
|
|
820
|
-
elsif arg == 1 then @font_outline = 1
|
|
821
|
-
else
|
|
822
|
-
raise ArgumentError,
|
|
823
|
-
"\n\n set_font_outline(#{arg.inspect})\n arg must be 0, 1, or none.\n"
|
|
824
|
-
" ( 0:OFF, 1 and none:outline on )\n"
|
|
825
|
-
end
|
|
826
|
-
end
|
|
827
|
-
end
|
|
828
|
-
|
|
829
|
-
#
|
|
830
|
-
# Macintosh only.
|
|
831
|
-
#
|
|
832
|
-
# Default state: Shadow is off
|
|
833
|
-
# Default action: Turn shadow on
|
|
834
|
-
# Valid args: 0, 1
|
|
835
|
-
#
|
|
836
|
-
def set_font_shadow(arg = 1)
|
|
837
|
-
begin
|
|
838
|
-
if arg == 0 then @font_shadow = 0
|
|
839
|
-
elsif arg == 1 then @font_shadow = 1
|
|
840
|
-
else
|
|
841
|
-
raise ArgumentError,
|
|
842
|
-
"\n\n set_font_shadow(#{arg.inspect})\n arg must be 0, 1, or none.\n"
|
|
843
|
-
" ( 0:OFF, 1 and none:shadow on )\n"
|
|
844
|
-
end
|
|
845
|
-
end
|
|
846
|
-
end
|
|
847
|
-
|
|
848
|
-
#
|
|
849
|
-
# prevent modification of a cells contents.
|
|
850
|
-
#
|
|
851
|
-
# Default state: Cell locking is on
|
|
852
|
-
# Default action: Turn locking on
|
|
853
|
-
# Valid args: 0, 1
|
|
854
|
-
#
|
|
855
|
-
# This property can be used to prevent modification of a cells contents.
|
|
856
|
-
# Following Excel's convention, cell locking is turned on by default.
|
|
857
|
-
# However, it only has an effect if the worksheet has been protected,
|
|
858
|
-
# see the worksheet protect() method.
|
|
859
|
-
#
|
|
860
|
-
# locked = workbook.add_format()
|
|
861
|
-
# locked.set_locked(1) # A non-op
|
|
862
|
-
#
|
|
863
|
-
# unlocked = workbook.add_format()
|
|
864
|
-
# locked.set_locked(0)
|
|
865
|
-
#
|
|
866
|
-
# # Enable worksheet protection
|
|
867
|
-
# worksheet.protect()
|
|
868
|
-
#
|
|
869
|
-
# # This cell cannot be edited.
|
|
870
|
-
# worksheet.write('A1', '=1+2', locked)
|
|
871
|
-
#
|
|
872
|
-
# # This cell can be edited.
|
|
873
|
-
# worksheet.write('A2', '=1+2', unlocked)
|
|
874
|
-
#
|
|
875
|
-
# Note: This offers weak protection even with a password, see the note
|
|
876
|
-
# in relation to the protect() method.
|
|
877
|
-
#
|
|
878
|
-
def set_locked(arg = 1)
|
|
879
|
-
begin
|
|
880
|
-
if arg == 0 then @locked = 0
|
|
881
|
-
elsif arg == 1 then @locked = 1
|
|
882
|
-
else
|
|
883
|
-
raise ArgumentError,
|
|
884
|
-
"\n\n set_locked(#{arg.inspect})\n arg must be 0, 1, or none.\n"
|
|
885
|
-
" ( 0:OFF, 1 and none:Lock On )\n"
|
|
886
|
-
end
|
|
887
|
-
end
|
|
888
|
-
end
|
|
889
|
-
|
|
890
|
-
#
|
|
891
|
-
# hide a formula while still displaying its result.
|
|
892
|
-
#
|
|
893
|
-
# Default state: Formula hiding is off
|
|
894
|
-
# Default action: Turn hiding on
|
|
895
|
-
# Valid args: 0, 1
|
|
896
|
-
#
|
|
897
|
-
# This property is used to hide a formula while still displaying
|
|
898
|
-
# its result. This is generally used to hide complex calculations
|
|
899
|
-
# from end users who are only interested in the result. It only has
|
|
900
|
-
# an effect if the worksheet has been protected,
|
|
901
|
-
# see the worksheet protect() method.
|
|
902
|
-
#
|
|
903
|
-
# hidden = workbook.add_format
|
|
904
|
-
# hidden.set_hidden
|
|
905
|
-
#
|
|
906
|
-
# # Enable worksheet protection
|
|
907
|
-
# worksheet.protect
|
|
908
|
-
#
|
|
909
|
-
# # The formula in this cell isn't visible
|
|
910
|
-
# worksheet.write('A1', '=1+2', hidden)
|
|
911
|
-
#
|
|
912
|
-
# Note: This offers weak protection even with a password,
|
|
913
|
-
# see the note in relation to the protect() method .
|
|
914
|
-
#
|
|
915
|
-
def set_hidden(arg = 1)
|
|
916
|
-
begin
|
|
917
|
-
if arg == 0 then @hidden = 0
|
|
918
|
-
elsif arg == 1 then @hidden = 1
|
|
919
|
-
else
|
|
920
|
-
raise ArgumentError,
|
|
921
|
-
"\n\n set_hidden(#{arg.inspect})\n arg must be 0, 1, or none.\n"
|
|
922
|
-
" ( 0:OFF, 1 and none:hiding On )\n"
|
|
923
|
-
end
|
|
924
|
-
end
|
|
925
|
-
end
|
|
926
|
-
|
|
927
|
-
#
|
|
928
|
-
# Set cell alignment.
|
|
929
|
-
#
|
|
930
|
-
# Default state: Alignment is off
|
|
931
|
-
# Default action: Left alignment
|
|
932
|
-
# Valid args: 'left' Horizontal
|
|
933
|
-
# 'center'
|
|
934
|
-
# 'right'
|
|
935
|
-
# 'fill'
|
|
936
|
-
# 'justify'
|
|
937
|
-
# 'center_across'
|
|
938
|
-
#
|
|
939
|
-
# 'top' Vertical
|
|
940
|
-
# 'vcenter'
|
|
941
|
-
# 'bottom'
|
|
942
|
-
# 'vjustify'
|
|
943
|
-
#
|
|
944
|
-
# This method is used to set the horizontal and vertical text alignment
|
|
945
|
-
# within a cell. Vertical and horizontal alignments can be combined.
|
|
946
|
-
# The method is used as follows:
|
|
947
|
-
#
|
|
948
|
-
# format = workbook.add_format
|
|
949
|
-
# format->set_align('center')
|
|
950
|
-
# format->set_align('vcenter')
|
|
951
|
-
# worksheet->set_row(0, 30)
|
|
952
|
-
# worksheet->write(0, 0, 'X', format)
|
|
953
|
-
#
|
|
954
|
-
# Text can be aligned across two or more adjacent cells using
|
|
955
|
-
# the center_across property. However, for genuine merged cells
|
|
956
|
-
# it is better to use the merge_range() worksheet method.
|
|
957
|
-
#
|
|
958
|
-
# The vjustify (vertical justify) option can be used to provide
|
|
959
|
-
# automatic text wrapping in a cell. The height of the cell will be
|
|
960
|
-
# adjusted to accommodate the wrapped text. To specify where the text
|
|
961
|
-
# wraps use the set_text_wrap() method.
|
|
962
|
-
#
|
|
963
|
-
# For further examples see the 'Alignment' worksheet created by formats.rb.
|
|
964
|
-
#
|
|
965
|
-
def set_align(align = 'left')
|
|
966
|
-
case align.to_s.downcase
|
|
967
|
-
when 'left' then set_text_h_align(1)
|
|
968
|
-
when 'centre', 'center' then set_text_h_align(2)
|
|
969
|
-
when 'right' then set_text_h_align(3)
|
|
970
|
-
when 'fill' then set_text_h_align(4)
|
|
971
|
-
when 'justify' then set_text_h_align(5)
|
|
972
|
-
when 'center_across', 'centre_across' then set_text_h_align(6)
|
|
973
|
-
when 'merge' then set_text_h_align(6) # S:WE name
|
|
974
|
-
when 'distributed' then set_text_h_align(7)
|
|
975
|
-
when 'equal_space' then set_text_h_align(7) # ParseExcel
|
|
976
|
-
|
|
977
|
-
when 'top' then set_text_v_align(0)
|
|
978
|
-
when 'vcentre' then set_text_v_align(1)
|
|
979
|
-
when 'vcenter' then set_text_v_align(1)
|
|
980
|
-
when 'bottom' then set_text_v_align(2)
|
|
981
|
-
when 'vjustify' then set_text_v_align(3)
|
|
982
|
-
when 'vdistributed' then set_text_v_align(4)
|
|
983
|
-
when 'vequal_space' then set_text_v_align(4) # ParseExcel
|
|
984
|
-
else nil
|
|
985
|
-
end
|
|
986
|
-
end
|
|
987
|
-
|
|
988
|
-
###############################################################################
|
|
989
|
-
#
|
|
990
|
-
# set_valign()
|
|
991
|
-
#
|
|
992
|
-
# Set vertical cell alignment. This is required by the set_format_properties()
|
|
993
|
-
# method to differentiate between the vertical and horizontal properties.
|
|
994
|
-
#
|
|
995
|
-
def set_valign(alignment) # :nodoc:
|
|
996
|
-
set_align(alignment);
|
|
997
|
-
end
|
|
998
|
-
|
|
999
|
-
#
|
|
1000
|
-
# Implements the Excel5 style "merge".
|
|
1001
|
-
#
|
|
1002
|
-
# Default state: Center across selection is off
|
|
1003
|
-
# Default action: Turn center across on
|
|
1004
|
-
# Valid args: 1
|
|
1005
|
-
#
|
|
1006
|
-
# Text can be aligned across two or more adjacent cells using the
|
|
1007
|
-
# set_center_across() method. This is an alias for the
|
|
1008
|
-
# set_align('center_across') method call.
|
|
1009
|
-
#
|
|
1010
|
-
# Only one cell should contain the text, the other cells should be blank:
|
|
1011
|
-
#
|
|
1012
|
-
# format = workbook.add_format
|
|
1013
|
-
# format.set_center_across
|
|
1014
|
-
#
|
|
1015
|
-
# worksheet.write(1, 1, 'Center across selection', format)
|
|
1016
|
-
# worksheet.write_blank(1, 2, format)
|
|
1017
|
-
#
|
|
1018
|
-
# See also the merge1.pl to merge6.rb programs in the examples directory and
|
|
1019
|
-
# the merge_range() method.
|
|
1020
|
-
#
|
|
1021
|
-
def set_center_across(arg = 1)
|
|
1022
|
-
set_text_h_align(6)
|
|
1023
|
-
end
|
|
1024
|
-
|
|
1025
|
-
###############################################################################
|
|
1026
|
-
#
|
|
1027
|
-
# set_merge()
|
|
1028
|
-
#
|
|
1029
|
-
# This was the way to implement a merge in Excel5. However it should have been
|
|
1030
|
-
# called "center_across" and not "merge".
|
|
1031
|
-
# This is now deprecated. Use set_center_across() or better merge_range().
|
|
1032
|
-
#
|
|
1033
|
-
#
|
|
1034
|
-
def set_merge(val=true) # :nodoc:
|
|
1035
|
-
set_text_h_align(6)
|
|
1036
|
-
end
|
|
1037
|
-
|
|
1038
|
-
#
|
|
1039
|
-
# Default state: Text wrap is off
|
|
1040
|
-
# Default action: Turn text wrap on
|
|
1041
|
-
# Valid args: 0, 1
|
|
1042
|
-
#
|
|
1043
|
-
# Here is an example using the text wrap property, the escape
|
|
1044
|
-
# character \n is used to indicate the end of line:
|
|
1045
|
-
#
|
|
1046
|
-
# format = workbook.add_format()
|
|
1047
|
-
# format.set_text_wrap()
|
|
1048
|
-
# worksheet.write(0, 0, "It's\na bum\nwrap", format)
|
|
1049
|
-
#
|
|
1050
|
-
def set_text_wrap(arg = 1)
|
|
1051
|
-
begin
|
|
1052
|
-
if arg == 0 then @text_wrap = 0
|
|
1053
|
-
elsif arg == 1 then @text_wrap = 1
|
|
1054
|
-
else
|
|
1055
|
-
raise ArgumentError,
|
|
1056
|
-
"\n\n set_text_wrap(#{arg.inspect})\n arg must be 0, 1, or none.\n"
|
|
1057
|
-
" ( 0:OFF, 1 and none:text wrap On )\n"
|
|
1058
|
-
end
|
|
1059
|
-
end
|
|
1060
|
-
end
|
|
1061
|
-
|
|
1062
|
-
#
|
|
1063
|
-
# Set cells borders to the same style
|
|
1064
|
-
#
|
|
1065
|
-
# Also applies to: set_bottom()
|
|
1066
|
-
# set_top()
|
|
1067
|
-
# set_left()
|
|
1068
|
-
# set_right()
|
|
1069
|
-
#
|
|
1070
|
-
# Default state: Border is off
|
|
1071
|
-
# Default action: Set border type 1
|
|
1072
|
-
# Valid args: 0-13, See below.
|
|
1073
|
-
#
|
|
1074
|
-
# A cell border is comprised of a border on the bottom, top, left and right.
|
|
1075
|
-
# These can be set to the same value using set_border() or individually
|
|
1076
|
-
# using the relevant method calls shown above.
|
|
1077
|
-
#
|
|
1078
|
-
# The following shows the border styles sorted by WriteExcel index number:
|
|
1079
|
-
#
|
|
1080
|
-
# Index Name Weight Style
|
|
1081
|
-
# ===== ============= ====== ===========
|
|
1082
|
-
# 0 None 0
|
|
1083
|
-
# 1 Continuous 1 -----------
|
|
1084
|
-
# 2 Continuous 2 -----------
|
|
1085
|
-
# 3 Dash 1 - - - - - -
|
|
1086
|
-
# 4 Dot 1 . . . . . .
|
|
1087
|
-
# 5 Continuous 3 -----------
|
|
1088
|
-
# 6 Double 3 ===========
|
|
1089
|
-
# 7 Continuous 0 -----------
|
|
1090
|
-
# 8 Dash 2 - - - - - -
|
|
1091
|
-
# 9 Dash Dot 1 - . - . - .
|
|
1092
|
-
# 10 Dash Dot 2 - . - . - .
|
|
1093
|
-
# 11 Dash Dot Dot 1 - . . - . .
|
|
1094
|
-
# 12 Dash Dot Dot 2 - . . - . .
|
|
1095
|
-
# 13 SlantDash Dot 2 / - . / - .
|
|
1096
|
-
#
|
|
1097
|
-
# The following shows the borders sorted by style:
|
|
1098
|
-
#
|
|
1099
|
-
# Name Weight Style Index
|
|
1100
|
-
# ============= ====== =========== =====
|
|
1101
|
-
# Continuous 0 ----------- 7
|
|
1102
|
-
# Continuous 1 ----------- 1
|
|
1103
|
-
# Continuous 2 ----------- 2
|
|
1104
|
-
# Continuous 3 ----------- 5
|
|
1105
|
-
# Dash 1 - - - - - - 3
|
|
1106
|
-
# Dash 2 - - - - - - 8
|
|
1107
|
-
# Dash Dot 1 - . - . - . 9
|
|
1108
|
-
# Dash Dot 2 - . - . - . 10
|
|
1109
|
-
# Dash Dot Dot 1 - . . - . . 11
|
|
1110
|
-
# Dash Dot Dot 2 - . . - . . 12
|
|
1111
|
-
# Dot 1 . . . . . . 4
|
|
1112
|
-
# Double 3 =========== 6
|
|
1113
|
-
# None 0 0
|
|
1114
|
-
# SlantDash Dot 2 / - . / - . 13
|
|
1115
|
-
#
|
|
1116
|
-
# The following shows the borders in the order shown in the Excel Dialog.
|
|
1117
|
-
#
|
|
1118
|
-
# Index Style Index Style
|
|
1119
|
-
# ===== ===== ===== =====
|
|
1120
|
-
# 0 None 12 - . . - . .
|
|
1121
|
-
# 7 ----------- 13 / - . / - .
|
|
1122
|
-
# 4 . . . . . . 10 - . - . - .
|
|
1123
|
-
# 11 - . . - . . 8 - - - - - -
|
|
1124
|
-
# 9 - . - . - . 2 -----------
|
|
1125
|
-
# 3 - - - - - - 5 -----------
|
|
1126
|
-
# 1 ----------- 6 ===========
|
|
1127
|
-
#
|
|
1128
|
-
# Examples of the available border styles are shown in the 'Borders' worksheet
|
|
1129
|
-
# created by formats.rb.
|
|
1130
|
-
#
|
|
1131
|
-
def set_border(style)
|
|
1132
|
-
set_bottom(style)
|
|
1133
|
-
set_top(style)
|
|
1134
|
-
set_left(style)
|
|
1135
|
-
set_right(style)
|
|
1136
|
-
end
|
|
1137
|
-
|
|
1138
|
-
#
|
|
1139
|
-
# set bottom border of the cell.
|
|
1140
|
-
# see set_border() about style.
|
|
1141
|
-
#
|
|
1142
|
-
def set_bottom(style)
|
|
1143
|
-
@bottom = style
|
|
1144
|
-
end
|
|
1145
|
-
|
|
1146
|
-
#
|
|
1147
|
-
# set top border of the cell.
|
|
1148
|
-
# see set_border() about style.
|
|
1149
|
-
#
|
|
1150
|
-
def set_top(style)
|
|
1151
|
-
@top = style
|
|
1152
|
-
end
|
|
1153
|
-
|
|
1154
|
-
#
|
|
1155
|
-
# set left border of the cell.
|
|
1156
|
-
# see set_border() about style.
|
|
1157
|
-
#
|
|
1158
|
-
def set_left(style)
|
|
1159
|
-
@left = style
|
|
1160
|
-
end
|
|
1161
|
-
|
|
1162
|
-
#
|
|
1163
|
-
# set right border of the cell.
|
|
1164
|
-
# see set_border() about style.
|
|
1165
|
-
#
|
|
1166
|
-
def set_right(style)
|
|
1167
|
-
@right = style
|
|
1168
|
-
end
|
|
1169
|
-
|
|
1170
|
-
#
|
|
1171
|
-
# Set cells border to the same color
|
|
1172
|
-
#
|
|
1173
|
-
# Also applies to: set_bottom_color()
|
|
1174
|
-
# set_top_color()
|
|
1175
|
-
# set_left_color()
|
|
1176
|
-
# set_right_color()
|
|
1177
|
-
#
|
|
1178
|
-
# Default state: Color is off
|
|
1179
|
-
# Default action: Undefined
|
|
1180
|
-
# Valid args: See set_color()
|
|
1181
|
-
#
|
|
1182
|
-
# Set the colour of the cell borders. A cell border is comprised of a border
|
|
1183
|
-
# on the bottom, top, left and right. These can be set to the same colour
|
|
1184
|
-
# using set_border_color() or individually using the relevant method calls
|
|
1185
|
-
# shown above. Examples of the border styles and colours are shown in the
|
|
1186
|
-
# 'Borders' worksheet created by formats.rb.
|
|
1187
|
-
#
|
|
1188
|
-
def set_border_color(color)
|
|
1189
|
-
set_bottom_color(color);
|
|
1190
|
-
set_top_color(color);
|
|
1191
|
-
set_left_color(color);
|
|
1192
|
-
set_right_color(color);
|
|
1193
|
-
end
|
|
1194
|
-
|
|
1195
|
-
#
|
|
1196
|
-
# set bottom border color of the cell.
|
|
1197
|
-
# see set_border_color() about color.
|
|
1198
|
-
#
|
|
1199
|
-
def set_bottom_color(color)
|
|
1200
|
-
@bottom_color = get_color(color)
|
|
1201
|
-
end
|
|
1202
|
-
|
|
1203
|
-
#
|
|
1204
|
-
# set top border color of the cell.
|
|
1205
|
-
# see set_border_color() about color.
|
|
1206
|
-
#
|
|
1207
|
-
def set_top_color(color)
|
|
1208
|
-
@top_color = get_color(color)
|
|
1209
|
-
end
|
|
1210
|
-
|
|
1211
|
-
#
|
|
1212
|
-
# set left border color of the cell.
|
|
1213
|
-
# see set_border_color() about color.
|
|
1214
|
-
#
|
|
1215
|
-
def set_left_color(color)
|
|
1216
|
-
@left_color = get_color(color)
|
|
1217
|
-
end
|
|
1218
|
-
|
|
1219
|
-
#
|
|
1220
|
-
# set right border color of the cell.
|
|
1221
|
-
# see set_border_color() about color.
|
|
1222
|
-
#
|
|
1223
|
-
def set_right_color(color)
|
|
1224
|
-
@right_color = get_color(color)
|
|
1225
|
-
end
|
|
1226
|
-
|
|
1227
|
-
#
|
|
1228
|
-
# Set the rotation angle of the text. An alignment property.
|
|
1229
|
-
#
|
|
1230
|
-
# Default state: Text rotation is off
|
|
1231
|
-
# Default action: None
|
|
1232
|
-
# Valid args: Integers in the range -90 to 90 and 270
|
|
1233
|
-
#
|
|
1234
|
-
# Set the rotation of the text in a cell. The rotation can be any angle in
|
|
1235
|
-
# the range -90 to 90 degrees.
|
|
1236
|
-
#
|
|
1237
|
-
# format = workbook.add_format
|
|
1238
|
-
# format.set_rotation(30)
|
|
1239
|
-
# worksheet.write(0, 0, 'This text is rotated', format)
|
|
1240
|
-
#
|
|
1241
|
-
# The angle 270 is also supported. This indicates text where the letters run
|
|
1242
|
-
# from top to bottom.
|
|
1243
|
-
#
|
|
1244
|
-
def set_rotation(rotation)
|
|
1245
|
-
# The arg type can be a double but the Excel dialog only allows integers.
|
|
1246
|
-
rotation = rotation.to_i
|
|
1247
|
-
|
|
1248
|
-
# if (rotation == 270)
|
|
1249
|
-
# rotation = 255
|
|
1250
|
-
# elsif (rotation >= -90 or rotation <= 90)
|
|
1251
|
-
# rotation = -rotation +90 if rotation < 0;
|
|
1252
|
-
# else
|
|
1253
|
-
# # carp "Rotation $rotation outside range: -90 <= angle <= 90";
|
|
1254
|
-
# rotation = 0;
|
|
1255
|
-
# end
|
|
1256
|
-
#
|
|
1257
|
-
if rotation == 270
|
|
1258
|
-
rotation = 255
|
|
1259
|
-
elsif rotation >= -90 && rotation <= 90
|
|
1260
|
-
rotation = -rotation + 90 if rotation < 0
|
|
1261
|
-
else
|
|
1262
|
-
rotation = 0
|
|
1263
|
-
end
|
|
1264
|
-
|
|
1265
|
-
@rotation = rotation;
|
|
1266
|
-
end
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
#
|
|
1270
|
-
# :call-seq:
|
|
1271
|
-
# set_format_properties( :bold => 1 [, :color => 'red'..] )
|
|
1272
|
-
# set_format_properties( font [, shade, ..])
|
|
1273
|
-
# set_format_properties( :bold => 1, font, ...)
|
|
1274
|
-
# *) font = { :color => 'red', :bold => 1 }
|
|
1275
|
-
# shade = { :bg_color => 'green', :pattern => 1 }
|
|
1276
|
-
#
|
|
1277
|
-
# Convert hashes of properties to method calls.
|
|
1278
|
-
#
|
|
1279
|
-
# The properties of an existing Format object can be also be set by means
|
|
1280
|
-
# of set_format_properties():
|
|
1281
|
-
#
|
|
1282
|
-
# format = workbook.add_format
|
|
1283
|
-
# format.set_format_properties(:bold => 1, :color => 'red');
|
|
1284
|
-
#
|
|
1285
|
-
# However, this method is here mainly for legacy reasons. It is preferable
|
|
1286
|
-
# to set the properties in the format constructor:
|
|
1287
|
-
#
|
|
1288
|
-
# format = workbook.add_format(:bold => 1, :color => 'red');
|
|
1289
|
-
#
|
|
1290
|
-
def set_format_properties(*properties) # :nodoc:
|
|
1291
|
-
return if properties.empty?
|
|
1292
|
-
properties.each do |property|
|
|
1293
|
-
property.each do |key, value|
|
|
1294
|
-
# Strip leading "-" from Tk style properties e.g. "-color" => 'red'.
|
|
1295
|
-
key.sub
|
|
1296
|
-
|
|
1297
|
-
# Create a sub to set the property.
|
|
1298
|
-
if value.respond_to?(:to_str) || !value.respond_to?(:+)
|
|
1299
|
-
s = "set_#{key}('#{value}')"
|
|
1300
|
-
else
|
|
1301
|
-
s = "set_#{key}(#{value})"
|
|
1302
|
-
end
|
|
1303
|
-
eval s
|
|
1304
|
-
end
|
|
1305
|
-
end
|
|
1306
|
-
end
|
|
1307
|
-
|
|
1308
|
-
#
|
|
1309
|
-
# Default state: Font is Arial
|
|
1310
|
-
# Default action: None
|
|
1311
|
-
# Valid args: Any valid font name
|
|
1312
|
-
#
|
|
1313
|
-
# Specify the font used:
|
|
1314
|
-
#
|
|
1315
|
-
# format.set_font('Times New Roman');
|
|
1316
|
-
#
|
|
1317
|
-
# Excel can only display fonts that are installed on the system that it is
|
|
1318
|
-
# running on. Therefore it is best to use the fonts that come as standard
|
|
1319
|
-
# such as 'Arial', 'Times New Roman' and 'Courier New'. See also the Fonts
|
|
1320
|
-
# worksheet created by formats.rb
|
|
1321
|
-
#
|
|
1322
|
-
def set_font(fontname)
|
|
1323
|
-
@font = fontname
|
|
1324
|
-
end
|
|
1325
|
-
|
|
1326
|
-
#
|
|
1327
|
-
# This method is used to define the numerical format of a number in Excel.
|
|
1328
|
-
#
|
|
1329
|
-
# Default state: General format
|
|
1330
|
-
# Default action: Format index 1
|
|
1331
|
-
# Valid args: See the following table
|
|
1332
|
-
#
|
|
1333
|
-
# It controls whether a number is displayed as an integer, a floating point
|
|
1334
|
-
# number, a date, a currency value or some other user defined format.
|
|
1335
|
-
#
|
|
1336
|
-
# The numerical format of a cell can be specified by using a format string
|
|
1337
|
-
# or an index to one of Excel's built-in formats:
|
|
1338
|
-
#
|
|
1339
|
-
# format1 = workbook.add_format
|
|
1340
|
-
# format2 = workbook.add_format
|
|
1341
|
-
# format1.set_num_format('d mmm yyyy') # Format string
|
|
1342
|
-
# format2.set_num_format(0x0f) # Format index
|
|
1343
|
-
#
|
|
1344
|
-
# worksheet.write(0, 0, 36892.521, format1) # 1 Jan 2001
|
|
1345
|
-
# worksheet.write(0, 0, 36892.521, format2) # 1-Jan-01
|
|
1346
|
-
#
|
|
1347
|
-
# Using format strings you can define very sophisticated formatting of
|
|
1348
|
-
# numbers.
|
|
1349
|
-
#
|
|
1350
|
-
# format01.set_num_format('0.000')
|
|
1351
|
-
# worksheet.write(0, 0, 3.1415926, format01) # 3.142
|
|
1352
|
-
#
|
|
1353
|
-
# format02.set_num_format('#,##0')
|
|
1354
|
-
# worksheet.write(1, 0, 1234.56, format02) # 1,235
|
|
1355
|
-
#
|
|
1356
|
-
# format03.set_num_format('#,##0.00')
|
|
1357
|
-
# worksheet.write(2, 0, 1234.56, format03) # 1,234.56
|
|
1358
|
-
#
|
|
1359
|
-
# format04.set_num_format('0.00')
|
|
1360
|
-
# worksheet.write(3, 0, 49.99, format04) # 49.99
|
|
1361
|
-
#
|
|
1362
|
-
# # Note you can use other currency symbols such as the pound or yen as well.
|
|
1363
|
-
# # Other currencies may require the use of Unicode.
|
|
1364
|
-
#
|
|
1365
|
-
# format07.set_num_format('mm/dd/yy')
|
|
1366
|
-
# worksheet.write(6, 0, 36892.521, format07) # 01/01/01
|
|
1367
|
-
#
|
|
1368
|
-
# format08.set_num_format('mmm d yyyy')
|
|
1369
|
-
# worksheet.write(7, 0, 36892.521, format08) # Jan 1 2001
|
|
1370
|
-
#
|
|
1371
|
-
# format09.set_num_format('d mmmm yyyy')
|
|
1372
|
-
# worksheet.write(8, 0, 36892.521, format09) # 1 January 2001
|
|
1373
|
-
#
|
|
1374
|
-
# format10.set_num_format('dd/mm/yyyy hh:mm AM/PM')
|
|
1375
|
-
# worksheet.write(9, 0, 36892.521, format10) # 01/01/2001 12:30 AM
|
|
1376
|
-
#
|
|
1377
|
-
# format11.set_num_format('0 "dollar and" .00 "cents"')
|
|
1378
|
-
# worksheet.write(10, 0, 1.87, format11) # 1 dollar and .87 cents
|
|
1379
|
-
#
|
|
1380
|
-
# # Conditional formatting
|
|
1381
|
-
# format12.set_num_format('[Green]General;[Red]-General;General')
|
|
1382
|
-
# worksheet.write(11, 0, 123, format12) # > 0 Green
|
|
1383
|
-
# worksheet.write(12, 0, -45, format12) # < 0 Red
|
|
1384
|
-
# worksheet.write(13, 0, 0, format12) # = 0 Default colour
|
|
1385
|
-
#
|
|
1386
|
-
# # Zip code
|
|
1387
|
-
# format13.set_num_format('00000')
|
|
1388
|
-
# worksheet.write(14, 0, '01209', format13)
|
|
1389
|
-
#
|
|
1390
|
-
# The number system used for dates is described in "DATES AND TIME IN EXCEL".
|
|
1391
|
-
#
|
|
1392
|
-
# The colour format should have one of the following values:
|
|
1393
|
-
#
|
|
1394
|
-
# [Black] [Blue] [Cyan] [Green] [Magenta] [Red] [White] [Yellow]
|
|
1395
|
-
#
|
|
1396
|
-
# Alternatively you can specify the colour based on a colour index as follows:
|
|
1397
|
-
# [Color n], where n is a standard Excel colour index - 7. See the
|
|
1398
|
-
# 'Standard colors' worksheet created by formats.rb.
|
|
1399
|
-
#
|
|
1400
|
-
# For more information refer to the documentation on formatting in the doc
|
|
1401
|
-
# directory of the WriteExcel distro, the Excel on-line help or
|
|
1402
|
-
# http://office.microsoft.com/en-gb/assistance/HP051995001033.aspx
|
|
1403
|
-
#
|
|
1404
|
-
# You should ensure that the format string is valid in Excel prior to using
|
|
1405
|
-
# it in WriteExcel.
|
|
1406
|
-
#
|
|
1407
|
-
# Excel's built-in formats are shown in the following table:
|
|
1408
|
-
#
|
|
1409
|
-
# Index Index Format String
|
|
1410
|
-
# 0 0x00 General
|
|
1411
|
-
# 1 0x01 0
|
|
1412
|
-
# 2 0x02 0.00
|
|
1413
|
-
# 3 0x03 #,##0
|
|
1414
|
-
# 4 0x04 #,##0.00
|
|
1415
|
-
# 5 0x05 ($#,##0_);($#,##0)
|
|
1416
|
-
# 6 0x06 ($#,##0_);[Red]($#,##0)
|
|
1417
|
-
# 7 0x07 ($#,##0.00_);($#,##0.00)
|
|
1418
|
-
# 8 0x08 ($#,##0.00_);[Red]($#,##0.00)
|
|
1419
|
-
# 9 0x09 0%
|
|
1420
|
-
# 10 0x0a 0.00%
|
|
1421
|
-
# 11 0x0b 0.00E+00
|
|
1422
|
-
# 12 0x0c # ?/?
|
|
1423
|
-
# 13 0x0d # ??/??
|
|
1424
|
-
# 14 0x0e m/d/yy
|
|
1425
|
-
# 15 0x0f d-mmm-yy
|
|
1426
|
-
# 16 0x10 d-mmm
|
|
1427
|
-
# 17 0x11 mmm-yy
|
|
1428
|
-
# 18 0x12 h:mm AM/PM
|
|
1429
|
-
# 19 0x13 h:mm:ss AM/PM
|
|
1430
|
-
# 20 0x14 h:mm
|
|
1431
|
-
# 21 0x15 h:mm:ss
|
|
1432
|
-
# 22 0x16 m/d/yy h:mm
|
|
1433
|
-
# .. .... ...........
|
|
1434
|
-
# 37 0x25 (#,##0_);(#,##0)
|
|
1435
|
-
# 38 0x26 (#,##0_);[Red](#,##0)
|
|
1436
|
-
# 39 0x27 (#,##0.00_);(#,##0.00)
|
|
1437
|
-
# 40 0x28 (#,##0.00_);[Red](#,##0.00)
|
|
1438
|
-
# 41 0x29 _(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)
|
|
1439
|
-
# 42 0x2a _($* #,##0_);_($* (#,##0);_($* "-"_);_(@_)
|
|
1440
|
-
# 43 0x2b _(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)
|
|
1441
|
-
# 44 0x2c _($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)
|
|
1442
|
-
# 45 0x2d mm:ss
|
|
1443
|
-
# 46 0x2e [h]:mm:ss
|
|
1444
|
-
# 47 0x2f mm:ss.0
|
|
1445
|
-
# 48 0x30 ##0.0E+0
|
|
1446
|
-
# 49 0x31 @
|
|
1447
|
-
#
|
|
1448
|
-
# For examples of these formatting codes see the 'Numerical formats' worksheet
|
|
1449
|
-
# created by formats.rb.
|
|
1450
|
-
#--
|
|
1451
|
-
# See also the number_formats1.html and the number_formats2.html documents in
|
|
1452
|
-
# the doc directory of the distro.
|
|
1453
|
-
#++
|
|
1454
|
-
#
|
|
1455
|
-
# Note 1. Numeric formats 23 to 36 are not documented by Microsoft and may
|
|
1456
|
-
# differ in international versions.
|
|
1457
|
-
#
|
|
1458
|
-
# Note 2. In Excel 5 the dollar sign appears as a dollar sign. In Excel
|
|
1459
|
-
# 97-2000 it appears as the defined local currency symbol.
|
|
1460
|
-
#
|
|
1461
|
-
# Note 3. The red negative numeric formats display slightly differently in
|
|
1462
|
-
# Excel 5 and Excel 97-2000.
|
|
1463
|
-
#
|
|
1464
|
-
def set_num_format(num_format)
|
|
1465
|
-
@num_format = num_format
|
|
1466
|
-
end
|
|
1467
|
-
|
|
1468
|
-
#
|
|
1469
|
-
# This method can be used to indent text. The argument, which should be an
|
|
1470
|
-
# integer, is taken as the level of indentation:
|
|
1471
|
-
#
|
|
1472
|
-
# Default state: Text indentation is off
|
|
1473
|
-
# Default action: Indent text 1 level
|
|
1474
|
-
# Valid args: Positive integers
|
|
1475
|
-
#
|
|
1476
|
-
# format = workbook.add_format
|
|
1477
|
-
# format.set_indent(2)
|
|
1478
|
-
# worksheet.write(0, 0, 'This text is indented', format)
|
|
1479
|
-
#
|
|
1480
|
-
# Indentation is a horizontal alignment property. It will override any
|
|
1481
|
-
# other horizontal properties but it can be used in conjunction with
|
|
1482
|
-
# vertical properties.
|
|
1483
|
-
#
|
|
1484
|
-
def set_indent(indent = 1)
|
|
1485
|
-
@indent = indent
|
|
1486
|
-
end
|
|
1487
|
-
|
|
1488
|
-
#
|
|
1489
|
-
# This method can be used to shrink text so that it fits in a cell.
|
|
1490
|
-
#
|
|
1491
|
-
# Default state: Text shrinking is off
|
|
1492
|
-
# Default action: Turn "shrink to fit" on
|
|
1493
|
-
# Valid args: 1
|
|
1494
|
-
#
|
|
1495
|
-
# format = workbook.add_format
|
|
1496
|
-
# format.set_shrink
|
|
1497
|
-
# worksheet.write(0, 0, 'Honey, I shrunk the text!', format)
|
|
1498
|
-
#
|
|
1499
|
-
def set_shrink(arg = 1)
|
|
1500
|
-
@shrink = 1
|
|
1501
|
-
end
|
|
1502
|
-
|
|
1503
|
-
#
|
|
1504
|
-
# Default state: Justify last is off
|
|
1505
|
-
# Default action: Turn justify last on
|
|
1506
|
-
# Valid args: 0, 1
|
|
1507
|
-
#
|
|
1508
|
-
# Only applies to Far Eastern versions of Excel.
|
|
1509
|
-
#
|
|
1510
|
-
def set_text_justlast(arg = 1)
|
|
1511
|
-
@text_justlast = 1
|
|
1512
|
-
end
|
|
1513
|
-
|
|
1514
|
-
#
|
|
1515
|
-
# Default state: Pattern is off
|
|
1516
|
-
# Default action: Solid fill is on
|
|
1517
|
-
# Valid args: 0 .. 18
|
|
1518
|
-
#
|
|
1519
|
-
# Set the background pattern of a cell.
|
|
1520
|
-
#
|
|
1521
|
-
# Examples of the available patterns are shown in the 'Patterns' worksheet
|
|
1522
|
-
# created by formats.rb. However, it is unlikely that you will ever need
|
|
1523
|
-
# anything other than Pattern 1 which is a solid fill of the background color.
|
|
1524
|
-
#
|
|
1525
|
-
def set_pattern(pattern = 1)
|
|
1526
|
-
@pattern = pattern
|
|
1527
|
-
end
|
|
1528
|
-
|
|
1529
|
-
#
|
|
1530
|
-
# The set_bg_color() method can be used to set the background colour of a
|
|
1531
|
-
# pattern. Patterns are defined via the set_pattern() method. If a pattern
|
|
1532
|
-
# hasn't been defined then a solid fill pattern is used as the default.
|
|
1533
|
-
#
|
|
1534
|
-
# Default state: Color is off
|
|
1535
|
-
# Default action: Solid fill.
|
|
1536
|
-
# Valid args: See set_color()
|
|
1537
|
-
#
|
|
1538
|
-
# Here is an example of how to set up a solid fill in a cell:
|
|
1539
|
-
#
|
|
1540
|
-
# format = workbook.add_format
|
|
1541
|
-
#
|
|
1542
|
-
# format.set_pattern() # This is optional when using a solid fill
|
|
1543
|
-
#
|
|
1544
|
-
# format.set_bg_color('green')
|
|
1545
|
-
# worksheet.write('A1', 'Ray', format)
|
|
1546
|
-
#
|
|
1547
|
-
# For further examples see the 'Patterns' worksheet created by formats.rb.
|
|
1548
|
-
#
|
|
1549
|
-
def set_bg_color(color = 0x41)
|
|
1550
|
-
@bg_color = get_color(color)
|
|
1551
|
-
end
|
|
1552
|
-
|
|
1553
|
-
#
|
|
1554
|
-
# The set_fg_color() method can be used to set the foreground colour
|
|
1555
|
-
# of a pattern.
|
|
1556
|
-
#
|
|
1557
|
-
# Default state: Color is off
|
|
1558
|
-
# Default action: Solid fill.
|
|
1559
|
-
# Valid args: See set_color()
|
|
1560
|
-
#
|
|
1561
|
-
# For further examples see the 'Patterns' worksheet created by formats.rb.
|
|
1562
|
-
#
|
|
1563
|
-
def set_fg_color(color = 0x40)
|
|
1564
|
-
@fg_color = get_color(color)
|
|
1565
|
-
end
|
|
1566
|
-
|
|
1567
|
-
# Dynamically create set methods that aren't already defined.
|
|
1568
|
-
def method_missing(name, *args) # :nodoc:
|
|
1569
|
-
# -- original perl comment --
|
|
1570
|
-
# There are two types of set methods: set_property() and
|
|
1571
|
-
# set_property_color(). When a method is AUTOLOADED we store a new anonymous
|
|
1572
|
-
# sub in the appropriate slot in the symbol table. The speeds up subsequent
|
|
1573
|
-
# calls to the same method.
|
|
1574
|
-
|
|
1575
|
-
method = "#{name}"
|
|
1576
|
-
|
|
1577
|
-
# Check for a valid method names, i.e. "set_xxx_yyy".
|
|
1578
|
-
method =~ /set_(\w+)/ or raise "Unknown method: #{method}\n"
|
|
1579
|
-
|
|
1580
|
-
# Match the attribute, i.e. "@xxx_yyy".
|
|
1581
|
-
attribute = "@#{$1}"
|
|
1582
|
-
|
|
1583
|
-
# Check that the attribute exists
|
|
1584
|
-
# ........
|
|
1585
|
-
if method =~ /set\w+color$/ # for "set_property_color" methods
|
|
1586
|
-
value = get_color(args[0])
|
|
1587
|
-
else # for "set_xxx" methods
|
|
1588
|
-
value = args[0].nil? ? 1 : args[0]
|
|
1589
|
-
end
|
|
1590
|
-
if value.respond_to?(:to_str) || !value.respond_to?(:+)
|
|
1591
|
-
s = %Q!#{attribute} = "#{value.to_s}"!
|
|
1592
|
-
else
|
|
1593
|
-
s = %Q!#{attribute} = #{value.to_s}!
|
|
1594
|
-
end
|
|
1595
|
-
eval s
|
|
1596
|
-
end
|
|
1597
|
-
end # class Format
|
|
1598
|
-
|
|
1599
|
-
end # module Writeexcel
|
|
1600
|
-
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
##############################################################################
|
|
3
|
+
#
|
|
4
|
+
# Format - A class for defining Excel formatting.
|
|
5
|
+
#
|
|
6
|
+
#
|
|
7
|
+
# Used in conjunction with WriteExcel
|
|
8
|
+
#
|
|
9
|
+
# Copyright 2000-2010, John McNamara, jmcnamara@cpan.org
|
|
10
|
+
#
|
|
11
|
+
# original written in Perl by John McNamara
|
|
12
|
+
# converted to Ruby by Hideo Nakamura, cxn03651@msj.biglobe.ne.jp
|
|
13
|
+
#
|
|
14
|
+
|
|
15
|
+
#
|
|
16
|
+
# Format - A class for defining Excel formatting.
|
|
17
|
+
#
|
|
18
|
+
# See CELL FORMATTING, FORMAT METHODS, COLOURS IN EXCEL in WriteExcel's rdoc.
|
|
19
|
+
#
|
|
20
|
+
require 'writeexcel/compatibility'
|
|
21
|
+
require 'writeexcel/colors'
|
|
22
|
+
|
|
23
|
+
module Writeexcel
|
|
24
|
+
|
|
25
|
+
class Format < Colors
|
|
26
|
+
|
|
27
|
+
###############################################################################
|
|
28
|
+
#
|
|
29
|
+
# initialize(xf_index=0, properties = {})
|
|
30
|
+
# xf_index :
|
|
31
|
+
# properties : Hash of property => value
|
|
32
|
+
#
|
|
33
|
+
# Constructor
|
|
34
|
+
#
|
|
35
|
+
def initialize(xf_index = 0, properties = {}) # :nodoc:
|
|
36
|
+
@xf_index = xf_index
|
|
37
|
+
|
|
38
|
+
@type = 0
|
|
39
|
+
@font_index = 0
|
|
40
|
+
@font = 'Arial'
|
|
41
|
+
@size = 10
|
|
42
|
+
@bold = 0x0190
|
|
43
|
+
@italic = 0
|
|
44
|
+
@color = 0x7FFF
|
|
45
|
+
@underline = 0
|
|
46
|
+
@font_strikeout = 0
|
|
47
|
+
@font_outline = 0
|
|
48
|
+
@font_shadow = 0
|
|
49
|
+
@font_script = 0
|
|
50
|
+
@font_family = 0
|
|
51
|
+
@font_charset = 0
|
|
52
|
+
@font_encoding = 0
|
|
53
|
+
|
|
54
|
+
@num_format = 0
|
|
55
|
+
@num_format_enc = 0
|
|
56
|
+
|
|
57
|
+
@hidden = 0
|
|
58
|
+
@locked = 1
|
|
59
|
+
|
|
60
|
+
@text_h_align = 0
|
|
61
|
+
@text_wrap = 0
|
|
62
|
+
@text_v_align = 2
|
|
63
|
+
@text_justlast = 0
|
|
64
|
+
@rotation = 0
|
|
65
|
+
|
|
66
|
+
@fg_color = 0x40
|
|
67
|
+
@bg_color = 0x41
|
|
68
|
+
|
|
69
|
+
@pattern = 0
|
|
70
|
+
|
|
71
|
+
@bottom = 0
|
|
72
|
+
@top = 0
|
|
73
|
+
@left = 0
|
|
74
|
+
@right = 0
|
|
75
|
+
|
|
76
|
+
@bottom_color = 0x40
|
|
77
|
+
@top_color = 0x40
|
|
78
|
+
@left_color = 0x40
|
|
79
|
+
@right_color = 0x40
|
|
80
|
+
|
|
81
|
+
@indent = 0
|
|
82
|
+
@shrink = 0
|
|
83
|
+
@merge_range = 0
|
|
84
|
+
@reading_order = 0
|
|
85
|
+
|
|
86
|
+
@diag_type = 0
|
|
87
|
+
@diag_color = 0x40
|
|
88
|
+
@diag_border = 0
|
|
89
|
+
|
|
90
|
+
@font_only = 0
|
|
91
|
+
|
|
92
|
+
# Temp code to prevent merged formats in non-merged cells.
|
|
93
|
+
@used_merge = 0
|
|
94
|
+
|
|
95
|
+
set_format_properties(properties) unless properties.empty?
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
#
|
|
100
|
+
# :call-seq:
|
|
101
|
+
# copy(format)
|
|
102
|
+
#
|
|
103
|
+
# Copy the attributes of another Format object.
|
|
104
|
+
#
|
|
105
|
+
# This method is used to copy all of the properties from one Format object
|
|
106
|
+
# to another:
|
|
107
|
+
#
|
|
108
|
+
# lorry1 = workbook.add_format
|
|
109
|
+
# lorry1.set_bold
|
|
110
|
+
# lorry1.set_italic
|
|
111
|
+
# lorry1.set_color('red') # lorry1 is bold, italic and red
|
|
112
|
+
#
|
|
113
|
+
# lorry2 = workbook.add_format
|
|
114
|
+
# lorry2.copy(lorry1)
|
|
115
|
+
# lorry2.set_color('yellow') # lorry2 is bold, italic and yellow
|
|
116
|
+
#
|
|
117
|
+
# The copy() method is only useful if you are using the method interface
|
|
118
|
+
# to Format properties. It generally isn't required if you are setting
|
|
119
|
+
# Format properties directly using hashes.
|
|
120
|
+
#
|
|
121
|
+
# Note: this is not a copy constructor, both objects must exist prior to
|
|
122
|
+
# copying.
|
|
123
|
+
#
|
|
124
|
+
def copy(other)
|
|
125
|
+
# copy properties except xf, merge_range, used_merge
|
|
126
|
+
# Copy properties
|
|
127
|
+
@type = other.type
|
|
128
|
+
@font_index = other.font_index
|
|
129
|
+
@font = other.font
|
|
130
|
+
@size = other.size
|
|
131
|
+
@bold = other.bold
|
|
132
|
+
@italic = other.italic
|
|
133
|
+
@color = other.color
|
|
134
|
+
@underline = other.underline
|
|
135
|
+
@font_strikeout = other.font_strikeout
|
|
136
|
+
@font_outline = other.font_outline
|
|
137
|
+
@font_shadow = other.font_shadow
|
|
138
|
+
@font_script = other.font_script
|
|
139
|
+
@font_family = other.font_family
|
|
140
|
+
@font_charset = other.font_charset
|
|
141
|
+
@font_encoding = other.font_encoding
|
|
142
|
+
|
|
143
|
+
@num_format = other.num_format
|
|
144
|
+
@num_format_enc = other.num_format_enc
|
|
145
|
+
|
|
146
|
+
@hidden = other.hidden
|
|
147
|
+
@locked = other.locked
|
|
148
|
+
|
|
149
|
+
@text_h_align = other.text_h_align
|
|
150
|
+
@text_wrap = other.text_wrap
|
|
151
|
+
@text_v_align = other.text_v_align
|
|
152
|
+
@text_justlast = other.text_justlast
|
|
153
|
+
@rotation = other.rotation
|
|
154
|
+
|
|
155
|
+
@fg_color = other.fg_color
|
|
156
|
+
@bg_color = other.bg_color
|
|
157
|
+
|
|
158
|
+
@pattern = other.pattern
|
|
159
|
+
|
|
160
|
+
@bottom = other.bottom
|
|
161
|
+
@top = other.top
|
|
162
|
+
@left = other.left
|
|
163
|
+
@right = other.right
|
|
164
|
+
|
|
165
|
+
@bottom_color = other.bottom_color
|
|
166
|
+
@top_color = other.top_color
|
|
167
|
+
@left_color = other.left_color
|
|
168
|
+
@right_color = other.right_color
|
|
169
|
+
|
|
170
|
+
@indent = other.indent
|
|
171
|
+
@shrink = other.shrink
|
|
172
|
+
@reading_order = other.reading_order
|
|
173
|
+
|
|
174
|
+
@diag_type = other.diag_type
|
|
175
|
+
@diag_color = other.diag_color
|
|
176
|
+
@diag_border = other.diag_border
|
|
177
|
+
|
|
178
|
+
@font_only = other.font_only
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
###############################################################################
|
|
182
|
+
#
|
|
183
|
+
# get_xf($style)
|
|
184
|
+
#
|
|
185
|
+
# Generate an Excel BIFF XF record.
|
|
186
|
+
#
|
|
187
|
+
def get_xf # :nodoc:
|
|
188
|
+
|
|
189
|
+
# Local Variable
|
|
190
|
+
# record; # Record identifier
|
|
191
|
+
# length; # Number of bytes to follow
|
|
192
|
+
#
|
|
193
|
+
# ifnt; # Index to FONT record
|
|
194
|
+
# ifmt; # Index to FORMAT record
|
|
195
|
+
# style; # Style and other options
|
|
196
|
+
# align; # Alignment
|
|
197
|
+
# indent; #
|
|
198
|
+
# icv; # fg and bg pattern colors
|
|
199
|
+
# border1; # Border line options
|
|
200
|
+
# border2; # Border line options
|
|
201
|
+
# border3; # Border line options
|
|
202
|
+
|
|
203
|
+
# Set the type of the XF record and some of the attributes.
|
|
204
|
+
if @type == 0xFFF5 then
|
|
205
|
+
style = 0xFFF5
|
|
206
|
+
else
|
|
207
|
+
style = @locked
|
|
208
|
+
style |= @hidden << 1
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
# Flags to indicate if attributes have been set.
|
|
212
|
+
atr_num = (@num_format != 0) ? 1 : 0
|
|
213
|
+
atr_fnt = (@font_index != 0) ? 1 : 0
|
|
214
|
+
atr_alc = (@text_h_align != 0 ||
|
|
215
|
+
@text_v_align != 2 ||
|
|
216
|
+
@shrink != 0 ||
|
|
217
|
+
@merge_range != 0 ||
|
|
218
|
+
@text_wrap != 0 ||
|
|
219
|
+
@indent != 0) ? 1 : 0
|
|
220
|
+
atr_bdr = (@bottom != 0 ||
|
|
221
|
+
@top != 0 ||
|
|
222
|
+
@left != 0 ||
|
|
223
|
+
@right != 0 ||
|
|
224
|
+
@diag_type != 0) ? 1 : 0
|
|
225
|
+
atr_pat = (@fg_color != 0x40 ||
|
|
226
|
+
@bg_color != 0x41 ||
|
|
227
|
+
@pattern != 0x00) ? 1 : 0
|
|
228
|
+
atr_prot = (@hidden != 0 ||
|
|
229
|
+
@locked != 1) ? 1 : 0
|
|
230
|
+
|
|
231
|
+
# Set attribute changed flags for the style formats.
|
|
232
|
+
if @xf_index != 0 and @type == 0xFFF5
|
|
233
|
+
if @xf_index >= 16
|
|
234
|
+
atr_num = 0
|
|
235
|
+
atr_fnt = 1
|
|
236
|
+
else
|
|
237
|
+
atr_num = 1
|
|
238
|
+
atr_fnt = 0
|
|
239
|
+
end
|
|
240
|
+
atr_alc = 1
|
|
241
|
+
atr_bdr = 1
|
|
242
|
+
atr_pat = 1
|
|
243
|
+
atr_prot = 1
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
# Set a default diagonal border style if none was specified.
|
|
247
|
+
@diag_border = 1 if (@diag_border ==0 and @diag_type != 0)
|
|
248
|
+
|
|
249
|
+
# Reset the default colours for the non-font properties
|
|
250
|
+
@fg_color = 0x40 if @fg_color == 0x7FFF
|
|
251
|
+
@bg_color = 0x41 if @bg_color == 0x7FFF
|
|
252
|
+
@bottom_color = 0x40 if @bottom_color == 0x7FFF
|
|
253
|
+
@top_color = 0x40 if @top_color == 0x7FFF
|
|
254
|
+
@left_color = 0x40 if @left_color == 0x7FFF
|
|
255
|
+
@right_color = 0x40 if @right_color == 0x7FFF
|
|
256
|
+
@diag_color = 0x40 if @diag_color == 0x7FFF
|
|
257
|
+
|
|
258
|
+
# Zero the default border colour if the border has not been set.
|
|
259
|
+
@bottom_color = 0 if @bottom == 0
|
|
260
|
+
@top_color = 0 if @top == 0
|
|
261
|
+
@right_color = 0 if @right == 0
|
|
262
|
+
@left_color = 0 if @left == 0
|
|
263
|
+
@diag_color = 0 if @diag_type == 0
|
|
264
|
+
|
|
265
|
+
# The following 2 logical statements take care of special cases in relation
|
|
266
|
+
# to cell colours and patterns:
|
|
267
|
+
# 1. For a solid fill (_pattern == 1) Excel reverses the role of foreground
|
|
268
|
+
# and background colours.
|
|
269
|
+
# 2. If the user specifies a foreground or background colour without a
|
|
270
|
+
# pattern they probably wanted a solid fill, so we fill in the defaults.
|
|
271
|
+
#
|
|
272
|
+
if (@pattern <= 0x01 && @bg_color != 0x41 && @fg_color == 0x40)
|
|
273
|
+
@fg_color = @bg_color
|
|
274
|
+
@bg_color = 0x40
|
|
275
|
+
@pattern = 1
|
|
276
|
+
end
|
|
277
|
+
|
|
278
|
+
if (@pattern <= 0x01 && @bg_color == 0x41 && @fg_color != 0x40)
|
|
279
|
+
@bg_color = 0x40
|
|
280
|
+
@pattern = 1
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
# Set default alignment if indent is set.
|
|
284
|
+
@text_h_align = 1 if @indent != 0 and @text_h_align == 0
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
record = 0x00E0
|
|
288
|
+
length = 0x0014
|
|
289
|
+
|
|
290
|
+
ifnt = @font_index
|
|
291
|
+
ifmt = @num_format
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
align = @text_h_align
|
|
295
|
+
align |= @text_wrap << 3
|
|
296
|
+
align |= @text_v_align << 4
|
|
297
|
+
align |= @text_justlast << 7
|
|
298
|
+
align |= @rotation << 8
|
|
299
|
+
|
|
300
|
+
indent = @indent
|
|
301
|
+
indent |= @shrink << 4
|
|
302
|
+
indent |= @merge_range << 5
|
|
303
|
+
indent |= @reading_order << 6
|
|
304
|
+
indent |= atr_num << 10
|
|
305
|
+
indent |= atr_fnt << 11
|
|
306
|
+
indent |= atr_alc << 12
|
|
307
|
+
indent |= atr_bdr << 13
|
|
308
|
+
indent |= atr_pat << 14
|
|
309
|
+
indent |= atr_prot << 15
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
border1 = @left
|
|
313
|
+
border1 |= @right << 4
|
|
314
|
+
border1 |= @top << 8
|
|
315
|
+
border1 |= @bottom << 12
|
|
316
|
+
|
|
317
|
+
border2 = @left_color
|
|
318
|
+
border2 |= @right_color << 7
|
|
319
|
+
border2 |= @diag_type << 14
|
|
320
|
+
|
|
321
|
+
border3 = @top_color
|
|
322
|
+
border3 |= @bottom_color << 7
|
|
323
|
+
border3 |= @diag_color << 14
|
|
324
|
+
border3 |= @diag_border << 21
|
|
325
|
+
border3 |= @pattern << 26
|
|
326
|
+
|
|
327
|
+
icv = @fg_color
|
|
328
|
+
icv |= @bg_color << 7
|
|
329
|
+
|
|
330
|
+
header = [record, length].pack("vv")
|
|
331
|
+
data = [ifnt, ifmt, style, align, indent,
|
|
332
|
+
border1, border2, border3, icv].pack("vvvvvvvVv")
|
|
333
|
+
|
|
334
|
+
header + data
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
###############################################################################
|
|
338
|
+
#
|
|
339
|
+
# get_font()
|
|
340
|
+
#
|
|
341
|
+
# Generate an Excel BIFF FONT record.
|
|
342
|
+
#
|
|
343
|
+
def get_font # :nodoc:
|
|
344
|
+
|
|
345
|
+
# my $record; # Record identifier
|
|
346
|
+
# my $length; # Record length
|
|
347
|
+
|
|
348
|
+
# my $dyHeight; # Height of font (1/20 of a point)
|
|
349
|
+
# my $grbit; # Font attributes
|
|
350
|
+
# my $icv; # Index to color palette
|
|
351
|
+
# my $bls; # Bold style
|
|
352
|
+
# my $sss; # Superscript/subscript
|
|
353
|
+
# my $uls; # Underline
|
|
354
|
+
# my $bFamily; # Font family
|
|
355
|
+
# my $bCharSet; # Character set
|
|
356
|
+
# my $reserved; # Reserved
|
|
357
|
+
# my $cch; # Length of font name
|
|
358
|
+
# my $rgch; # Font name
|
|
359
|
+
# my $encoding; # Font name character encoding
|
|
360
|
+
|
|
361
|
+
|
|
362
|
+
dyHeight = @size * 20
|
|
363
|
+
icv = @color
|
|
364
|
+
bls = @bold
|
|
365
|
+
sss = @font_script
|
|
366
|
+
uls = @underline
|
|
367
|
+
bFamily = @font_family
|
|
368
|
+
bCharSet = @font_charset
|
|
369
|
+
rgch = @font
|
|
370
|
+
encoding = @font_encoding
|
|
371
|
+
|
|
372
|
+
rgch = convert_to_ascii_if_ascii(rgch)
|
|
373
|
+
|
|
374
|
+
# Handle utf8 strings
|
|
375
|
+
if rgch.encoding == Encoding::UTF_8
|
|
376
|
+
rgch = utf8_to_16be(rgch)
|
|
377
|
+
encoding = 1
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
cch = rgch.bytesize
|
|
381
|
+
#
|
|
382
|
+
# Handle Unicode font names.
|
|
383
|
+
if (encoding == 1)
|
|
384
|
+
raise "Uneven number of bytes in Unicode font name" if cch % 2 != 0
|
|
385
|
+
cch /= 2 if encoding !=0
|
|
386
|
+
rgch = rgch.unpack('n*').pack('v*')
|
|
387
|
+
end
|
|
388
|
+
|
|
389
|
+
record = 0x31
|
|
390
|
+
length = 0x10 + rgch.bytesize
|
|
391
|
+
reserved = 0x00
|
|
392
|
+
|
|
393
|
+
grbit = 0x00
|
|
394
|
+
grbit |= 0x02 if @italic != 0
|
|
395
|
+
grbit |= 0x08 if @font_strikeout != 0
|
|
396
|
+
grbit |= 0x10 if @font_outline != 0
|
|
397
|
+
grbit |= 0x20 if @font_shadow != 0
|
|
398
|
+
|
|
399
|
+
|
|
400
|
+
header = [record, length].pack("vv")
|
|
401
|
+
data = [dyHeight, grbit, icv, bls,
|
|
402
|
+
sss, uls, bFamily,
|
|
403
|
+
bCharSet, reserved, cch, encoding].pack('vvvvvCCCCCC')
|
|
404
|
+
|
|
405
|
+
header + data + rgch
|
|
406
|
+
end
|
|
407
|
+
|
|
408
|
+
###############################################################################
|
|
409
|
+
#
|
|
410
|
+
# get_font_key()
|
|
411
|
+
#
|
|
412
|
+
# Returns a unique hash key for a font. Used by Workbook->_store_all_fonts()
|
|
413
|
+
#
|
|
414
|
+
def get_font_key # :nodoc:
|
|
415
|
+
# The following elements are arranged to increase the probability of
|
|
416
|
+
# generating a unique key. Elements that hold a large range of numbers
|
|
417
|
+
# e.g. _color are placed between two binary elements such as _italic
|
|
418
|
+
|
|
419
|
+
key = "#{@font}#{@size}#{@font_script}#{@underline}#{@font_strikeout}#{@bold}#{@font_outline}"
|
|
420
|
+
key += "#{@font_family}#{@font_charset}#{@font_shadow}#{@color}#{@italic}#{@font_encoding}"
|
|
421
|
+
key.gsub(' ', '_') # Convert the key to a single word
|
|
422
|
+
end
|
|
423
|
+
|
|
424
|
+
###############################################################################
|
|
425
|
+
#
|
|
426
|
+
# xf_index()
|
|
427
|
+
#
|
|
428
|
+
# Returns the used by Worksheet->_XF()
|
|
429
|
+
#
|
|
430
|
+
def xf_index # :nodoc:
|
|
431
|
+
@xf_index
|
|
432
|
+
end
|
|
433
|
+
|
|
434
|
+
def used_merge # :nodoc:
|
|
435
|
+
@used_merge
|
|
436
|
+
end
|
|
437
|
+
|
|
438
|
+
def used_merge=(val) # :nodoc:
|
|
439
|
+
@used_merge = val
|
|
440
|
+
end
|
|
441
|
+
|
|
442
|
+
def type # :nodoc:
|
|
443
|
+
@type
|
|
444
|
+
end
|
|
445
|
+
|
|
446
|
+
def font_index # :nodoc:
|
|
447
|
+
@font_index
|
|
448
|
+
end
|
|
449
|
+
|
|
450
|
+
def font_index=(val) # :nodoc:
|
|
451
|
+
@font_index = val
|
|
452
|
+
end
|
|
453
|
+
|
|
454
|
+
def font # :nodoc:
|
|
455
|
+
@font
|
|
456
|
+
end
|
|
457
|
+
|
|
458
|
+
def size # :nodoc:
|
|
459
|
+
@size
|
|
460
|
+
end
|
|
461
|
+
|
|
462
|
+
def bold # :nodoc:
|
|
463
|
+
@bold
|
|
464
|
+
end
|
|
465
|
+
|
|
466
|
+
def italic # :nodoc:
|
|
467
|
+
@italic
|
|
468
|
+
end
|
|
469
|
+
|
|
470
|
+
def color # :nodoc:
|
|
471
|
+
@color
|
|
472
|
+
end
|
|
473
|
+
|
|
474
|
+
def underline # :nodoc:
|
|
475
|
+
@underline
|
|
476
|
+
end
|
|
477
|
+
|
|
478
|
+
def font_strikeout # :nodoc:
|
|
479
|
+
@font_strikeout
|
|
480
|
+
end
|
|
481
|
+
|
|
482
|
+
def font_outline # :nodoc:
|
|
483
|
+
@font_outline
|
|
484
|
+
end
|
|
485
|
+
|
|
486
|
+
def font_shadow # :nodoc:
|
|
487
|
+
@font_shadow
|
|
488
|
+
end
|
|
489
|
+
|
|
490
|
+
def font_script # :nodoc:
|
|
491
|
+
@font_script
|
|
492
|
+
end
|
|
493
|
+
|
|
494
|
+
def font_family # :nodoc:
|
|
495
|
+
@font_family
|
|
496
|
+
end
|
|
497
|
+
|
|
498
|
+
def font_charset # :nodoc:
|
|
499
|
+
@font_charset
|
|
500
|
+
end
|
|
501
|
+
|
|
502
|
+
def font_encoding # :nodoc:
|
|
503
|
+
@font_encoding
|
|
504
|
+
end
|
|
505
|
+
|
|
506
|
+
def num_format # :nodoc:
|
|
507
|
+
@num_format
|
|
508
|
+
end
|
|
509
|
+
|
|
510
|
+
def num_format=(val) # :nodoc:
|
|
511
|
+
@num_format = val
|
|
512
|
+
end
|
|
513
|
+
|
|
514
|
+
def num_format_enc # :nodoc:
|
|
515
|
+
@num_format_enc
|
|
516
|
+
end
|
|
517
|
+
|
|
518
|
+
def hidden # :nodoc:
|
|
519
|
+
@hidden
|
|
520
|
+
end
|
|
521
|
+
|
|
522
|
+
def locked # :nodoc:
|
|
523
|
+
@locked
|
|
524
|
+
end
|
|
525
|
+
|
|
526
|
+
def text_h_align # :nodoc:
|
|
527
|
+
@text_h_align
|
|
528
|
+
end
|
|
529
|
+
|
|
530
|
+
def text_wrap # :nodoc:
|
|
531
|
+
@text_wrap
|
|
532
|
+
end
|
|
533
|
+
|
|
534
|
+
def text_v_align # :nodoc:
|
|
535
|
+
@text_v_align
|
|
536
|
+
end
|
|
537
|
+
|
|
538
|
+
def text_justlast # :nodoc:
|
|
539
|
+
@text_justlast
|
|
540
|
+
end
|
|
541
|
+
|
|
542
|
+
def rotation # :nodoc:
|
|
543
|
+
@rotation
|
|
544
|
+
end
|
|
545
|
+
|
|
546
|
+
def fg_color # :nodoc:
|
|
547
|
+
@fg_color
|
|
548
|
+
end
|
|
549
|
+
|
|
550
|
+
def bg_color # :nodoc:
|
|
551
|
+
@bg_color
|
|
552
|
+
end
|
|
553
|
+
|
|
554
|
+
def pattern # :nodoc:
|
|
555
|
+
@pattern
|
|
556
|
+
end
|
|
557
|
+
|
|
558
|
+
def bottom # :nodoc:
|
|
559
|
+
@bottom
|
|
560
|
+
end
|
|
561
|
+
|
|
562
|
+
def top # :nodoc:
|
|
563
|
+
@top
|
|
564
|
+
end
|
|
565
|
+
|
|
566
|
+
def left # :nodoc:
|
|
567
|
+
@left
|
|
568
|
+
end
|
|
569
|
+
|
|
570
|
+
def right # :nodoc:
|
|
571
|
+
@right
|
|
572
|
+
end
|
|
573
|
+
|
|
574
|
+
def bottom_color # :nodoc:
|
|
575
|
+
@bottom_color
|
|
576
|
+
end
|
|
577
|
+
|
|
578
|
+
def top_color # :nodoc:
|
|
579
|
+
@top_color
|
|
580
|
+
end
|
|
581
|
+
|
|
582
|
+
def left_color # :nodoc:
|
|
583
|
+
@left_color
|
|
584
|
+
end
|
|
585
|
+
|
|
586
|
+
def right_color # :nodoc:
|
|
587
|
+
@right_color
|
|
588
|
+
end
|
|
589
|
+
|
|
590
|
+
def indent # :nodoc:
|
|
591
|
+
@indent
|
|
592
|
+
end
|
|
593
|
+
|
|
594
|
+
def shrink # :nodoc:
|
|
595
|
+
@shrink
|
|
596
|
+
end
|
|
597
|
+
|
|
598
|
+
def reading_order # :nodoc:
|
|
599
|
+
@reading_order
|
|
600
|
+
end
|
|
601
|
+
|
|
602
|
+
def diag_type # :nodoc:
|
|
603
|
+
@diag_type
|
|
604
|
+
end
|
|
605
|
+
|
|
606
|
+
def diag_color # :nodoc:
|
|
607
|
+
@diag_color
|
|
608
|
+
end
|
|
609
|
+
|
|
610
|
+
def diag_border # :nodoc:
|
|
611
|
+
@diag_border
|
|
612
|
+
end
|
|
613
|
+
|
|
614
|
+
def font_only # :nodoc:
|
|
615
|
+
@font_only
|
|
616
|
+
end
|
|
617
|
+
|
|
618
|
+
###############################################################################
|
|
619
|
+
#
|
|
620
|
+
# class method Format._get_color(colour)
|
|
621
|
+
#
|
|
622
|
+
# used from Worksheet.rb
|
|
623
|
+
#
|
|
624
|
+
# this is cut & copy of get_color().
|
|
625
|
+
#
|
|
626
|
+
def self._get_color(color) # :nodoc:
|
|
627
|
+
Colors.new.get_color(color)
|
|
628
|
+
end
|
|
629
|
+
|
|
630
|
+
###############################################################################
|
|
631
|
+
#
|
|
632
|
+
# set_type()
|
|
633
|
+
#
|
|
634
|
+
# Set the XF object type as 0 = cell XF or 0xFFF5 = style XF.
|
|
635
|
+
#
|
|
636
|
+
def set_type(type = nil) # :nodoc:
|
|
637
|
+
|
|
638
|
+
if !type.nil? and type == 0
|
|
639
|
+
@type = 0x0000
|
|
640
|
+
else
|
|
641
|
+
@type = 0xFFF5
|
|
642
|
+
end
|
|
643
|
+
end
|
|
644
|
+
|
|
645
|
+
#
|
|
646
|
+
# Default state: Font size is 10
|
|
647
|
+
# Default action: Set font size to 1
|
|
648
|
+
# Valid args: Integer values from 1 to as big as your screen.
|
|
649
|
+
#
|
|
650
|
+
# Set the font size. Excel adjusts the height of a row to accommodate the
|
|
651
|
+
# largest font size in the row. You can also explicitly specify the height
|
|
652
|
+
# of a row using the set_row() worksheet method.
|
|
653
|
+
#
|
|
654
|
+
# format = workbook.add_format
|
|
655
|
+
# format.set_size(30)
|
|
656
|
+
#
|
|
657
|
+
def set_size(size = 1)
|
|
658
|
+
if size.respond_to?(:to_int) && size.respond_to?(:+) && size >= 1 # avoid Symbol
|
|
659
|
+
@size = size.to_int
|
|
660
|
+
end
|
|
661
|
+
end
|
|
662
|
+
|
|
663
|
+
#
|
|
664
|
+
# Set the font colour.
|
|
665
|
+
#
|
|
666
|
+
# Default state: Excels default color, usually black
|
|
667
|
+
# Default action: Set the default color
|
|
668
|
+
# Valid args: Integers from 8..63 or the following strings:
|
|
669
|
+
# 'black', 'blue', 'brown', 'cyan', 'gray'
|
|
670
|
+
# 'green', 'lime', 'magenta', 'navy', 'orange'
|
|
671
|
+
# 'pink', 'purple', 'red', 'silver', 'white', 'yellow'
|
|
672
|
+
#
|
|
673
|
+
# The set_color() method is used as follows:
|
|
674
|
+
#
|
|
675
|
+
# format = workbook.add_format()
|
|
676
|
+
# format.set_color('red')
|
|
677
|
+
# worksheet.write(0, 0, 'wheelbarrow', format)
|
|
678
|
+
#
|
|
679
|
+
# Note: The set_color() method is used to set the colour of the font in a cell.
|
|
680
|
+
# To set the colour of a cell use the set_bg_color()
|
|
681
|
+
# and set_pattern() methods.
|
|
682
|
+
#
|
|
683
|
+
def set_color(color = 0x7FFF)
|
|
684
|
+
@color = get_color(color)
|
|
685
|
+
end
|
|
686
|
+
|
|
687
|
+
#
|
|
688
|
+
# Set the italic property of the font:
|
|
689
|
+
#
|
|
690
|
+
# Default state: Italic is off
|
|
691
|
+
# Default action: Turn italic on
|
|
692
|
+
# Valid args: 0, 1
|
|
693
|
+
#
|
|
694
|
+
# format.set_italic # Turn italic on
|
|
695
|
+
#
|
|
696
|
+
def set_italic(arg = 1)
|
|
697
|
+
begin
|
|
698
|
+
if arg == 1 then @italic = 1 # italic on
|
|
699
|
+
elsif arg == 0 then @italic = 0 # italic off
|
|
700
|
+
else
|
|
701
|
+
raise ArgumentError,
|
|
702
|
+
"\n\n set_italic(#{arg.inspect})\n arg must be 0, 1, or none. ( 0:OFF , 1 and none:ON )\n"
|
|
703
|
+
end
|
|
704
|
+
end
|
|
705
|
+
end
|
|
706
|
+
|
|
707
|
+
#
|
|
708
|
+
# Set the bold property of the font:
|
|
709
|
+
#
|
|
710
|
+
# Default state: bold is off
|
|
711
|
+
# Default action: Turn bold on
|
|
712
|
+
# Valid args: 0, 1 [1]
|
|
713
|
+
#
|
|
714
|
+
# format.set_bold() # Turn bold on
|
|
715
|
+
#
|
|
716
|
+
# [1] Actually, values in the range 100..1000 are also valid. 400 is normal,
|
|
717
|
+
# 700 is bold and 1000 is very bold indeed. It is probably best to set the
|
|
718
|
+
# value to 1 and use normal bold.
|
|
719
|
+
#
|
|
720
|
+
def set_bold(weight = nil)
|
|
721
|
+
|
|
722
|
+
if weight.nil?
|
|
723
|
+
weight = 0x2BC
|
|
724
|
+
elsif !weight.respond_to?(:to_int) || !weight.respond_to?(:+) # avoid Symbol
|
|
725
|
+
weight = 0x190
|
|
726
|
+
elsif weight == 1 # Bold text
|
|
727
|
+
weight = 0x2BC
|
|
728
|
+
elsif weight == 0 # Normal text
|
|
729
|
+
weight = 0x190
|
|
730
|
+
elsif weight < 0x064 || 0x3E8 < weight # Out bound
|
|
731
|
+
weight = 0x190
|
|
732
|
+
else
|
|
733
|
+
weight = weight.to_i
|
|
734
|
+
end
|
|
735
|
+
|
|
736
|
+
@bold = weight
|
|
737
|
+
end
|
|
738
|
+
|
|
739
|
+
#
|
|
740
|
+
# Set the underline property of the font.
|
|
741
|
+
#
|
|
742
|
+
# Default state: Underline is off
|
|
743
|
+
# Default action: Turn on single underline
|
|
744
|
+
# Valid args: 0 = No underline
|
|
745
|
+
# 1 = Single underline
|
|
746
|
+
# 2 = Double underline
|
|
747
|
+
# 33 = Single accounting underline
|
|
748
|
+
# 34 = Double accounting underline
|
|
749
|
+
#
|
|
750
|
+
# format.set_underline(); # Single underline
|
|
751
|
+
#
|
|
752
|
+
def set_underline(arg = 1)
|
|
753
|
+
begin
|
|
754
|
+
case arg
|
|
755
|
+
when 0 then @underline = 0 # off
|
|
756
|
+
when 1 then @underline = 1 # Single
|
|
757
|
+
when 2 then @underline = 2 # Double
|
|
758
|
+
when 33 then @underline = 33 # Single accounting
|
|
759
|
+
when 34 then @underline = 34 # Double accounting
|
|
760
|
+
else
|
|
761
|
+
raise ArgumentError,
|
|
762
|
+
"\n\n set_underline(#{arg.inspect})\n arg must be 0, 1, or none, 2, 33, 34.\n"
|
|
763
|
+
" ( 0:OFF, 1 and none:Single, 2:Double, 33:Single accounting, 34:Double accounting )\n"
|
|
764
|
+
end
|
|
765
|
+
end
|
|
766
|
+
end
|
|
767
|
+
|
|
768
|
+
#
|
|
769
|
+
# Set the strikeout property of the font.
|
|
770
|
+
#
|
|
771
|
+
# Default state: Strikeout is off
|
|
772
|
+
# Default action: Turn strikeout on
|
|
773
|
+
# Valid args: 0, 1
|
|
774
|
+
#
|
|
775
|
+
def set_font_strikeout(arg = 1)
|
|
776
|
+
begin
|
|
777
|
+
if arg == 0 then @font_strikeout = 0
|
|
778
|
+
elsif arg == 1 then @font_strikeout = 1
|
|
779
|
+
else
|
|
780
|
+
raise ArgumentError,
|
|
781
|
+
"\n\n set_font_strikeout(#{arg.inspect})\n arg must be 0, 1, or none.\n"
|
|
782
|
+
" ( 0:OFF, 1 and none:Strikeout )\n"
|
|
783
|
+
end
|
|
784
|
+
end
|
|
785
|
+
end
|
|
786
|
+
|
|
787
|
+
#
|
|
788
|
+
# Set the superscript/subscript property of the font.
|
|
789
|
+
# This format is currently not very useful.
|
|
790
|
+
#
|
|
791
|
+
# Default state: Super/Subscript is off
|
|
792
|
+
# Default action: Turn Superscript on
|
|
793
|
+
# Valid args: 0 = Normal
|
|
794
|
+
# 1 = Superscript
|
|
795
|
+
# 2 = Subscript
|
|
796
|
+
#
|
|
797
|
+
def set_font_script(arg = 1)
|
|
798
|
+
begin
|
|
799
|
+
if arg == 0 then @font_script = 0
|
|
800
|
+
elsif arg == 1 then @font_script = 1
|
|
801
|
+
elsif arg == 2 then @font_script = 2
|
|
802
|
+
else
|
|
803
|
+
raise ArgumentError,
|
|
804
|
+
"\n\n set_font_script(#{arg.inspect})\n arg must be 0, 1, or none. or 2\n"
|
|
805
|
+
" ( 0:OFF, 1 and none:Superscript, 2:Subscript )\n"
|
|
806
|
+
end
|
|
807
|
+
end
|
|
808
|
+
end
|
|
809
|
+
|
|
810
|
+
#
|
|
811
|
+
# Macintosh only.
|
|
812
|
+
#
|
|
813
|
+
# Default state: Outline is off
|
|
814
|
+
# Default action: Turn outline on
|
|
815
|
+
# Valid args: 0, 1
|
|
816
|
+
#
|
|
817
|
+
def set_font_outline(arg = 1)
|
|
818
|
+
begin
|
|
819
|
+
if arg == 0 then @font_outline = 0
|
|
820
|
+
elsif arg == 1 then @font_outline = 1
|
|
821
|
+
else
|
|
822
|
+
raise ArgumentError,
|
|
823
|
+
"\n\n set_font_outline(#{arg.inspect})\n arg must be 0, 1, or none.\n"
|
|
824
|
+
" ( 0:OFF, 1 and none:outline on )\n"
|
|
825
|
+
end
|
|
826
|
+
end
|
|
827
|
+
end
|
|
828
|
+
|
|
829
|
+
#
|
|
830
|
+
# Macintosh only.
|
|
831
|
+
#
|
|
832
|
+
# Default state: Shadow is off
|
|
833
|
+
# Default action: Turn shadow on
|
|
834
|
+
# Valid args: 0, 1
|
|
835
|
+
#
|
|
836
|
+
def set_font_shadow(arg = 1)
|
|
837
|
+
begin
|
|
838
|
+
if arg == 0 then @font_shadow = 0
|
|
839
|
+
elsif arg == 1 then @font_shadow = 1
|
|
840
|
+
else
|
|
841
|
+
raise ArgumentError,
|
|
842
|
+
"\n\n set_font_shadow(#{arg.inspect})\n arg must be 0, 1, or none.\n"
|
|
843
|
+
" ( 0:OFF, 1 and none:shadow on )\n"
|
|
844
|
+
end
|
|
845
|
+
end
|
|
846
|
+
end
|
|
847
|
+
|
|
848
|
+
#
|
|
849
|
+
# prevent modification of a cells contents.
|
|
850
|
+
#
|
|
851
|
+
# Default state: Cell locking is on
|
|
852
|
+
# Default action: Turn locking on
|
|
853
|
+
# Valid args: 0, 1
|
|
854
|
+
#
|
|
855
|
+
# This property can be used to prevent modification of a cells contents.
|
|
856
|
+
# Following Excel's convention, cell locking is turned on by default.
|
|
857
|
+
# However, it only has an effect if the worksheet has been protected,
|
|
858
|
+
# see the worksheet protect() method.
|
|
859
|
+
#
|
|
860
|
+
# locked = workbook.add_format()
|
|
861
|
+
# locked.set_locked(1) # A non-op
|
|
862
|
+
#
|
|
863
|
+
# unlocked = workbook.add_format()
|
|
864
|
+
# locked.set_locked(0)
|
|
865
|
+
#
|
|
866
|
+
# # Enable worksheet protection
|
|
867
|
+
# worksheet.protect()
|
|
868
|
+
#
|
|
869
|
+
# # This cell cannot be edited.
|
|
870
|
+
# worksheet.write('A1', '=1+2', locked)
|
|
871
|
+
#
|
|
872
|
+
# # This cell can be edited.
|
|
873
|
+
# worksheet.write('A2', '=1+2', unlocked)
|
|
874
|
+
#
|
|
875
|
+
# Note: This offers weak protection even with a password, see the note
|
|
876
|
+
# in relation to the protect() method.
|
|
877
|
+
#
|
|
878
|
+
def set_locked(arg = 1)
|
|
879
|
+
begin
|
|
880
|
+
if arg == 0 then @locked = 0
|
|
881
|
+
elsif arg == 1 then @locked = 1
|
|
882
|
+
else
|
|
883
|
+
raise ArgumentError,
|
|
884
|
+
"\n\n set_locked(#{arg.inspect})\n arg must be 0, 1, or none.\n"
|
|
885
|
+
" ( 0:OFF, 1 and none:Lock On )\n"
|
|
886
|
+
end
|
|
887
|
+
end
|
|
888
|
+
end
|
|
889
|
+
|
|
890
|
+
#
|
|
891
|
+
# hide a formula while still displaying its result.
|
|
892
|
+
#
|
|
893
|
+
# Default state: Formula hiding is off
|
|
894
|
+
# Default action: Turn hiding on
|
|
895
|
+
# Valid args: 0, 1
|
|
896
|
+
#
|
|
897
|
+
# This property is used to hide a formula while still displaying
|
|
898
|
+
# its result. This is generally used to hide complex calculations
|
|
899
|
+
# from end users who are only interested in the result. It only has
|
|
900
|
+
# an effect if the worksheet has been protected,
|
|
901
|
+
# see the worksheet protect() method.
|
|
902
|
+
#
|
|
903
|
+
# hidden = workbook.add_format
|
|
904
|
+
# hidden.set_hidden
|
|
905
|
+
#
|
|
906
|
+
# # Enable worksheet protection
|
|
907
|
+
# worksheet.protect
|
|
908
|
+
#
|
|
909
|
+
# # The formula in this cell isn't visible
|
|
910
|
+
# worksheet.write('A1', '=1+2', hidden)
|
|
911
|
+
#
|
|
912
|
+
# Note: This offers weak protection even with a password,
|
|
913
|
+
# see the note in relation to the protect() method .
|
|
914
|
+
#
|
|
915
|
+
def set_hidden(arg = 1)
|
|
916
|
+
begin
|
|
917
|
+
if arg == 0 then @hidden = 0
|
|
918
|
+
elsif arg == 1 then @hidden = 1
|
|
919
|
+
else
|
|
920
|
+
raise ArgumentError,
|
|
921
|
+
"\n\n set_hidden(#{arg.inspect})\n arg must be 0, 1, or none.\n"
|
|
922
|
+
" ( 0:OFF, 1 and none:hiding On )\n"
|
|
923
|
+
end
|
|
924
|
+
end
|
|
925
|
+
end
|
|
926
|
+
|
|
927
|
+
#
|
|
928
|
+
# Set cell alignment.
|
|
929
|
+
#
|
|
930
|
+
# Default state: Alignment is off
|
|
931
|
+
# Default action: Left alignment
|
|
932
|
+
# Valid args: 'left' Horizontal
|
|
933
|
+
# 'center'
|
|
934
|
+
# 'right'
|
|
935
|
+
# 'fill'
|
|
936
|
+
# 'justify'
|
|
937
|
+
# 'center_across'
|
|
938
|
+
#
|
|
939
|
+
# 'top' Vertical
|
|
940
|
+
# 'vcenter'
|
|
941
|
+
# 'bottom'
|
|
942
|
+
# 'vjustify'
|
|
943
|
+
#
|
|
944
|
+
# This method is used to set the horizontal and vertical text alignment
|
|
945
|
+
# within a cell. Vertical and horizontal alignments can be combined.
|
|
946
|
+
# The method is used as follows:
|
|
947
|
+
#
|
|
948
|
+
# format = workbook.add_format
|
|
949
|
+
# format->set_align('center')
|
|
950
|
+
# format->set_align('vcenter')
|
|
951
|
+
# worksheet->set_row(0, 30)
|
|
952
|
+
# worksheet->write(0, 0, 'X', format)
|
|
953
|
+
#
|
|
954
|
+
# Text can be aligned across two or more adjacent cells using
|
|
955
|
+
# the center_across property. However, for genuine merged cells
|
|
956
|
+
# it is better to use the merge_range() worksheet method.
|
|
957
|
+
#
|
|
958
|
+
# The vjustify (vertical justify) option can be used to provide
|
|
959
|
+
# automatic text wrapping in a cell. The height of the cell will be
|
|
960
|
+
# adjusted to accommodate the wrapped text. To specify where the text
|
|
961
|
+
# wraps use the set_text_wrap() method.
|
|
962
|
+
#
|
|
963
|
+
# For further examples see the 'Alignment' worksheet created by formats.rb.
|
|
964
|
+
#
|
|
965
|
+
def set_align(align = 'left')
|
|
966
|
+
case align.to_s.downcase
|
|
967
|
+
when 'left' then set_text_h_align(1)
|
|
968
|
+
when 'centre', 'center' then set_text_h_align(2)
|
|
969
|
+
when 'right' then set_text_h_align(3)
|
|
970
|
+
when 'fill' then set_text_h_align(4)
|
|
971
|
+
when 'justify' then set_text_h_align(5)
|
|
972
|
+
when 'center_across', 'centre_across' then set_text_h_align(6)
|
|
973
|
+
when 'merge' then set_text_h_align(6) # S:WE name
|
|
974
|
+
when 'distributed' then set_text_h_align(7)
|
|
975
|
+
when 'equal_space' then set_text_h_align(7) # ParseExcel
|
|
976
|
+
|
|
977
|
+
when 'top' then set_text_v_align(0)
|
|
978
|
+
when 'vcentre' then set_text_v_align(1)
|
|
979
|
+
when 'vcenter' then set_text_v_align(1)
|
|
980
|
+
when 'bottom' then set_text_v_align(2)
|
|
981
|
+
when 'vjustify' then set_text_v_align(3)
|
|
982
|
+
when 'vdistributed' then set_text_v_align(4)
|
|
983
|
+
when 'vequal_space' then set_text_v_align(4) # ParseExcel
|
|
984
|
+
else nil
|
|
985
|
+
end
|
|
986
|
+
end
|
|
987
|
+
|
|
988
|
+
###############################################################################
|
|
989
|
+
#
|
|
990
|
+
# set_valign()
|
|
991
|
+
#
|
|
992
|
+
# Set vertical cell alignment. This is required by the set_format_properties()
|
|
993
|
+
# method to differentiate between the vertical and horizontal properties.
|
|
994
|
+
#
|
|
995
|
+
def set_valign(alignment) # :nodoc:
|
|
996
|
+
set_align(alignment);
|
|
997
|
+
end
|
|
998
|
+
|
|
999
|
+
#
|
|
1000
|
+
# Implements the Excel5 style "merge".
|
|
1001
|
+
#
|
|
1002
|
+
# Default state: Center across selection is off
|
|
1003
|
+
# Default action: Turn center across on
|
|
1004
|
+
# Valid args: 1
|
|
1005
|
+
#
|
|
1006
|
+
# Text can be aligned across two or more adjacent cells using the
|
|
1007
|
+
# set_center_across() method. This is an alias for the
|
|
1008
|
+
# set_align('center_across') method call.
|
|
1009
|
+
#
|
|
1010
|
+
# Only one cell should contain the text, the other cells should be blank:
|
|
1011
|
+
#
|
|
1012
|
+
# format = workbook.add_format
|
|
1013
|
+
# format.set_center_across
|
|
1014
|
+
#
|
|
1015
|
+
# worksheet.write(1, 1, 'Center across selection', format)
|
|
1016
|
+
# worksheet.write_blank(1, 2, format)
|
|
1017
|
+
#
|
|
1018
|
+
# See also the merge1.pl to merge6.rb programs in the examples directory and
|
|
1019
|
+
# the merge_range() method.
|
|
1020
|
+
#
|
|
1021
|
+
def set_center_across(arg = 1)
|
|
1022
|
+
set_text_h_align(6)
|
|
1023
|
+
end
|
|
1024
|
+
|
|
1025
|
+
###############################################################################
|
|
1026
|
+
#
|
|
1027
|
+
# set_merge()
|
|
1028
|
+
#
|
|
1029
|
+
# This was the way to implement a merge in Excel5. However it should have been
|
|
1030
|
+
# called "center_across" and not "merge".
|
|
1031
|
+
# This is now deprecated. Use set_center_across() or better merge_range().
|
|
1032
|
+
#
|
|
1033
|
+
#
|
|
1034
|
+
def set_merge(val=true) # :nodoc:
|
|
1035
|
+
set_text_h_align(6)
|
|
1036
|
+
end
|
|
1037
|
+
|
|
1038
|
+
#
|
|
1039
|
+
# Default state: Text wrap is off
|
|
1040
|
+
# Default action: Turn text wrap on
|
|
1041
|
+
# Valid args: 0, 1
|
|
1042
|
+
#
|
|
1043
|
+
# Here is an example using the text wrap property, the escape
|
|
1044
|
+
# character \n is used to indicate the end of line:
|
|
1045
|
+
#
|
|
1046
|
+
# format = workbook.add_format()
|
|
1047
|
+
# format.set_text_wrap()
|
|
1048
|
+
# worksheet.write(0, 0, "It's\na bum\nwrap", format)
|
|
1049
|
+
#
|
|
1050
|
+
def set_text_wrap(arg = 1)
|
|
1051
|
+
begin
|
|
1052
|
+
if arg == 0 then @text_wrap = 0
|
|
1053
|
+
elsif arg == 1 then @text_wrap = 1
|
|
1054
|
+
else
|
|
1055
|
+
raise ArgumentError,
|
|
1056
|
+
"\n\n set_text_wrap(#{arg.inspect})\n arg must be 0, 1, or none.\n"
|
|
1057
|
+
" ( 0:OFF, 1 and none:text wrap On )\n"
|
|
1058
|
+
end
|
|
1059
|
+
end
|
|
1060
|
+
end
|
|
1061
|
+
|
|
1062
|
+
#
|
|
1063
|
+
# Set cells borders to the same style
|
|
1064
|
+
#
|
|
1065
|
+
# Also applies to: set_bottom()
|
|
1066
|
+
# set_top()
|
|
1067
|
+
# set_left()
|
|
1068
|
+
# set_right()
|
|
1069
|
+
#
|
|
1070
|
+
# Default state: Border is off
|
|
1071
|
+
# Default action: Set border type 1
|
|
1072
|
+
# Valid args: 0-13, See below.
|
|
1073
|
+
#
|
|
1074
|
+
# A cell border is comprised of a border on the bottom, top, left and right.
|
|
1075
|
+
# These can be set to the same value using set_border() or individually
|
|
1076
|
+
# using the relevant method calls shown above.
|
|
1077
|
+
#
|
|
1078
|
+
# The following shows the border styles sorted by WriteExcel index number:
|
|
1079
|
+
#
|
|
1080
|
+
# Index Name Weight Style
|
|
1081
|
+
# ===== ============= ====== ===========
|
|
1082
|
+
# 0 None 0
|
|
1083
|
+
# 1 Continuous 1 -----------
|
|
1084
|
+
# 2 Continuous 2 -----------
|
|
1085
|
+
# 3 Dash 1 - - - - - -
|
|
1086
|
+
# 4 Dot 1 . . . . . .
|
|
1087
|
+
# 5 Continuous 3 -----------
|
|
1088
|
+
# 6 Double 3 ===========
|
|
1089
|
+
# 7 Continuous 0 -----------
|
|
1090
|
+
# 8 Dash 2 - - - - - -
|
|
1091
|
+
# 9 Dash Dot 1 - . - . - .
|
|
1092
|
+
# 10 Dash Dot 2 - . - . - .
|
|
1093
|
+
# 11 Dash Dot Dot 1 - . . - . .
|
|
1094
|
+
# 12 Dash Dot Dot 2 - . . - . .
|
|
1095
|
+
# 13 SlantDash Dot 2 / - . / - .
|
|
1096
|
+
#
|
|
1097
|
+
# The following shows the borders sorted by style:
|
|
1098
|
+
#
|
|
1099
|
+
# Name Weight Style Index
|
|
1100
|
+
# ============= ====== =========== =====
|
|
1101
|
+
# Continuous 0 ----------- 7
|
|
1102
|
+
# Continuous 1 ----------- 1
|
|
1103
|
+
# Continuous 2 ----------- 2
|
|
1104
|
+
# Continuous 3 ----------- 5
|
|
1105
|
+
# Dash 1 - - - - - - 3
|
|
1106
|
+
# Dash 2 - - - - - - 8
|
|
1107
|
+
# Dash Dot 1 - . - . - . 9
|
|
1108
|
+
# Dash Dot 2 - . - . - . 10
|
|
1109
|
+
# Dash Dot Dot 1 - . . - . . 11
|
|
1110
|
+
# Dash Dot Dot 2 - . . - . . 12
|
|
1111
|
+
# Dot 1 . . . . . . 4
|
|
1112
|
+
# Double 3 =========== 6
|
|
1113
|
+
# None 0 0
|
|
1114
|
+
# SlantDash Dot 2 / - . / - . 13
|
|
1115
|
+
#
|
|
1116
|
+
# The following shows the borders in the order shown in the Excel Dialog.
|
|
1117
|
+
#
|
|
1118
|
+
# Index Style Index Style
|
|
1119
|
+
# ===== ===== ===== =====
|
|
1120
|
+
# 0 None 12 - . . - . .
|
|
1121
|
+
# 7 ----------- 13 / - . / - .
|
|
1122
|
+
# 4 . . . . . . 10 - . - . - .
|
|
1123
|
+
# 11 - . . - . . 8 - - - - - -
|
|
1124
|
+
# 9 - . - . - . 2 -----------
|
|
1125
|
+
# 3 - - - - - - 5 -----------
|
|
1126
|
+
# 1 ----------- 6 ===========
|
|
1127
|
+
#
|
|
1128
|
+
# Examples of the available border styles are shown in the 'Borders' worksheet
|
|
1129
|
+
# created by formats.rb.
|
|
1130
|
+
#
|
|
1131
|
+
def set_border(style)
|
|
1132
|
+
set_bottom(style)
|
|
1133
|
+
set_top(style)
|
|
1134
|
+
set_left(style)
|
|
1135
|
+
set_right(style)
|
|
1136
|
+
end
|
|
1137
|
+
|
|
1138
|
+
#
|
|
1139
|
+
# set bottom border of the cell.
|
|
1140
|
+
# see set_border() about style.
|
|
1141
|
+
#
|
|
1142
|
+
def set_bottom(style)
|
|
1143
|
+
@bottom = style
|
|
1144
|
+
end
|
|
1145
|
+
|
|
1146
|
+
#
|
|
1147
|
+
# set top border of the cell.
|
|
1148
|
+
# see set_border() about style.
|
|
1149
|
+
#
|
|
1150
|
+
def set_top(style)
|
|
1151
|
+
@top = style
|
|
1152
|
+
end
|
|
1153
|
+
|
|
1154
|
+
#
|
|
1155
|
+
# set left border of the cell.
|
|
1156
|
+
# see set_border() about style.
|
|
1157
|
+
#
|
|
1158
|
+
def set_left(style)
|
|
1159
|
+
@left = style
|
|
1160
|
+
end
|
|
1161
|
+
|
|
1162
|
+
#
|
|
1163
|
+
# set right border of the cell.
|
|
1164
|
+
# see set_border() about style.
|
|
1165
|
+
#
|
|
1166
|
+
def set_right(style)
|
|
1167
|
+
@right = style
|
|
1168
|
+
end
|
|
1169
|
+
|
|
1170
|
+
#
|
|
1171
|
+
# Set cells border to the same color
|
|
1172
|
+
#
|
|
1173
|
+
# Also applies to: set_bottom_color()
|
|
1174
|
+
# set_top_color()
|
|
1175
|
+
# set_left_color()
|
|
1176
|
+
# set_right_color()
|
|
1177
|
+
#
|
|
1178
|
+
# Default state: Color is off
|
|
1179
|
+
# Default action: Undefined
|
|
1180
|
+
# Valid args: See set_color()
|
|
1181
|
+
#
|
|
1182
|
+
# Set the colour of the cell borders. A cell border is comprised of a border
|
|
1183
|
+
# on the bottom, top, left and right. These can be set to the same colour
|
|
1184
|
+
# using set_border_color() or individually using the relevant method calls
|
|
1185
|
+
# shown above. Examples of the border styles and colours are shown in the
|
|
1186
|
+
# 'Borders' worksheet created by formats.rb.
|
|
1187
|
+
#
|
|
1188
|
+
def set_border_color(color)
|
|
1189
|
+
set_bottom_color(color);
|
|
1190
|
+
set_top_color(color);
|
|
1191
|
+
set_left_color(color);
|
|
1192
|
+
set_right_color(color);
|
|
1193
|
+
end
|
|
1194
|
+
|
|
1195
|
+
#
|
|
1196
|
+
# set bottom border color of the cell.
|
|
1197
|
+
# see set_border_color() about color.
|
|
1198
|
+
#
|
|
1199
|
+
def set_bottom_color(color)
|
|
1200
|
+
@bottom_color = get_color(color)
|
|
1201
|
+
end
|
|
1202
|
+
|
|
1203
|
+
#
|
|
1204
|
+
# set top border color of the cell.
|
|
1205
|
+
# see set_border_color() about color.
|
|
1206
|
+
#
|
|
1207
|
+
def set_top_color(color)
|
|
1208
|
+
@top_color = get_color(color)
|
|
1209
|
+
end
|
|
1210
|
+
|
|
1211
|
+
#
|
|
1212
|
+
# set left border color of the cell.
|
|
1213
|
+
# see set_border_color() about color.
|
|
1214
|
+
#
|
|
1215
|
+
def set_left_color(color)
|
|
1216
|
+
@left_color = get_color(color)
|
|
1217
|
+
end
|
|
1218
|
+
|
|
1219
|
+
#
|
|
1220
|
+
# set right border color of the cell.
|
|
1221
|
+
# see set_border_color() about color.
|
|
1222
|
+
#
|
|
1223
|
+
def set_right_color(color)
|
|
1224
|
+
@right_color = get_color(color)
|
|
1225
|
+
end
|
|
1226
|
+
|
|
1227
|
+
#
|
|
1228
|
+
# Set the rotation angle of the text. An alignment property.
|
|
1229
|
+
#
|
|
1230
|
+
# Default state: Text rotation is off
|
|
1231
|
+
# Default action: None
|
|
1232
|
+
# Valid args: Integers in the range -90 to 90 and 270
|
|
1233
|
+
#
|
|
1234
|
+
# Set the rotation of the text in a cell. The rotation can be any angle in
|
|
1235
|
+
# the range -90 to 90 degrees.
|
|
1236
|
+
#
|
|
1237
|
+
# format = workbook.add_format
|
|
1238
|
+
# format.set_rotation(30)
|
|
1239
|
+
# worksheet.write(0, 0, 'This text is rotated', format)
|
|
1240
|
+
#
|
|
1241
|
+
# The angle 270 is also supported. This indicates text where the letters run
|
|
1242
|
+
# from top to bottom.
|
|
1243
|
+
#
|
|
1244
|
+
def set_rotation(rotation)
|
|
1245
|
+
# The arg type can be a double but the Excel dialog only allows integers.
|
|
1246
|
+
rotation = rotation.to_i
|
|
1247
|
+
|
|
1248
|
+
# if (rotation == 270)
|
|
1249
|
+
# rotation = 255
|
|
1250
|
+
# elsif (rotation >= -90 or rotation <= 90)
|
|
1251
|
+
# rotation = -rotation +90 if rotation < 0;
|
|
1252
|
+
# else
|
|
1253
|
+
# # carp "Rotation $rotation outside range: -90 <= angle <= 90";
|
|
1254
|
+
# rotation = 0;
|
|
1255
|
+
# end
|
|
1256
|
+
#
|
|
1257
|
+
if rotation == 270
|
|
1258
|
+
rotation = 255
|
|
1259
|
+
elsif rotation >= -90 && rotation <= 90
|
|
1260
|
+
rotation = -rotation + 90 if rotation < 0
|
|
1261
|
+
else
|
|
1262
|
+
rotation = 0
|
|
1263
|
+
end
|
|
1264
|
+
|
|
1265
|
+
@rotation = rotation;
|
|
1266
|
+
end
|
|
1267
|
+
|
|
1268
|
+
|
|
1269
|
+
#
|
|
1270
|
+
# :call-seq:
|
|
1271
|
+
# set_format_properties( :bold => 1 [, :color => 'red'..] )
|
|
1272
|
+
# set_format_properties( font [, shade, ..])
|
|
1273
|
+
# set_format_properties( :bold => 1, font, ...)
|
|
1274
|
+
# *) font = { :color => 'red', :bold => 1 }
|
|
1275
|
+
# shade = { :bg_color => 'green', :pattern => 1 }
|
|
1276
|
+
#
|
|
1277
|
+
# Convert hashes of properties to method calls.
|
|
1278
|
+
#
|
|
1279
|
+
# The properties of an existing Format object can be also be set by means
|
|
1280
|
+
# of set_format_properties():
|
|
1281
|
+
#
|
|
1282
|
+
# format = workbook.add_format
|
|
1283
|
+
# format.set_format_properties(:bold => 1, :color => 'red');
|
|
1284
|
+
#
|
|
1285
|
+
# However, this method is here mainly for legacy reasons. It is preferable
|
|
1286
|
+
# to set the properties in the format constructor:
|
|
1287
|
+
#
|
|
1288
|
+
# format = workbook.add_format(:bold => 1, :color => 'red');
|
|
1289
|
+
#
|
|
1290
|
+
def set_format_properties(*properties) # :nodoc:
|
|
1291
|
+
return if properties.empty?
|
|
1292
|
+
properties.each do |property|
|
|
1293
|
+
property.each do |key, value|
|
|
1294
|
+
# Strip leading "-" from Tk style properties e.g. "-color" => 'red'.
|
|
1295
|
+
key = key.sub(/^-/, '') if key.respond_to?(:to_str)
|
|
1296
|
+
|
|
1297
|
+
# Create a sub to set the property.
|
|
1298
|
+
if value.respond_to?(:to_str) || !value.respond_to?(:+)
|
|
1299
|
+
s = "set_#{key}('#{value}')"
|
|
1300
|
+
else
|
|
1301
|
+
s = "set_#{key}(#{value})"
|
|
1302
|
+
end
|
|
1303
|
+
eval s
|
|
1304
|
+
end
|
|
1305
|
+
end
|
|
1306
|
+
end
|
|
1307
|
+
|
|
1308
|
+
#
|
|
1309
|
+
# Default state: Font is Arial
|
|
1310
|
+
# Default action: None
|
|
1311
|
+
# Valid args: Any valid font name
|
|
1312
|
+
#
|
|
1313
|
+
# Specify the font used:
|
|
1314
|
+
#
|
|
1315
|
+
# format.set_font('Times New Roman');
|
|
1316
|
+
#
|
|
1317
|
+
# Excel can only display fonts that are installed on the system that it is
|
|
1318
|
+
# running on. Therefore it is best to use the fonts that come as standard
|
|
1319
|
+
# such as 'Arial', 'Times New Roman' and 'Courier New'. See also the Fonts
|
|
1320
|
+
# worksheet created by formats.rb
|
|
1321
|
+
#
|
|
1322
|
+
def set_font(fontname)
|
|
1323
|
+
@font = fontname
|
|
1324
|
+
end
|
|
1325
|
+
|
|
1326
|
+
#
|
|
1327
|
+
# This method is used to define the numerical format of a number in Excel.
|
|
1328
|
+
#
|
|
1329
|
+
# Default state: General format
|
|
1330
|
+
# Default action: Format index 1
|
|
1331
|
+
# Valid args: See the following table
|
|
1332
|
+
#
|
|
1333
|
+
# It controls whether a number is displayed as an integer, a floating point
|
|
1334
|
+
# number, a date, a currency value or some other user defined format.
|
|
1335
|
+
#
|
|
1336
|
+
# The numerical format of a cell can be specified by using a format string
|
|
1337
|
+
# or an index to one of Excel's built-in formats:
|
|
1338
|
+
#
|
|
1339
|
+
# format1 = workbook.add_format
|
|
1340
|
+
# format2 = workbook.add_format
|
|
1341
|
+
# format1.set_num_format('d mmm yyyy') # Format string
|
|
1342
|
+
# format2.set_num_format(0x0f) # Format index
|
|
1343
|
+
#
|
|
1344
|
+
# worksheet.write(0, 0, 36892.521, format1) # 1 Jan 2001
|
|
1345
|
+
# worksheet.write(0, 0, 36892.521, format2) # 1-Jan-01
|
|
1346
|
+
#
|
|
1347
|
+
# Using format strings you can define very sophisticated formatting of
|
|
1348
|
+
# numbers.
|
|
1349
|
+
#
|
|
1350
|
+
# format01.set_num_format('0.000')
|
|
1351
|
+
# worksheet.write(0, 0, 3.1415926, format01) # 3.142
|
|
1352
|
+
#
|
|
1353
|
+
# format02.set_num_format('#,##0')
|
|
1354
|
+
# worksheet.write(1, 0, 1234.56, format02) # 1,235
|
|
1355
|
+
#
|
|
1356
|
+
# format03.set_num_format('#,##0.00')
|
|
1357
|
+
# worksheet.write(2, 0, 1234.56, format03) # 1,234.56
|
|
1358
|
+
#
|
|
1359
|
+
# format04.set_num_format('0.00')
|
|
1360
|
+
# worksheet.write(3, 0, 49.99, format04) # 49.99
|
|
1361
|
+
#
|
|
1362
|
+
# # Note you can use other currency symbols such as the pound or yen as well.
|
|
1363
|
+
# # Other currencies may require the use of Unicode.
|
|
1364
|
+
#
|
|
1365
|
+
# format07.set_num_format('mm/dd/yy')
|
|
1366
|
+
# worksheet.write(6, 0, 36892.521, format07) # 01/01/01
|
|
1367
|
+
#
|
|
1368
|
+
# format08.set_num_format('mmm d yyyy')
|
|
1369
|
+
# worksheet.write(7, 0, 36892.521, format08) # Jan 1 2001
|
|
1370
|
+
#
|
|
1371
|
+
# format09.set_num_format('d mmmm yyyy')
|
|
1372
|
+
# worksheet.write(8, 0, 36892.521, format09) # 1 January 2001
|
|
1373
|
+
#
|
|
1374
|
+
# format10.set_num_format('dd/mm/yyyy hh:mm AM/PM')
|
|
1375
|
+
# worksheet.write(9, 0, 36892.521, format10) # 01/01/2001 12:30 AM
|
|
1376
|
+
#
|
|
1377
|
+
# format11.set_num_format('0 "dollar and" .00 "cents"')
|
|
1378
|
+
# worksheet.write(10, 0, 1.87, format11) # 1 dollar and .87 cents
|
|
1379
|
+
#
|
|
1380
|
+
# # Conditional formatting
|
|
1381
|
+
# format12.set_num_format('[Green]General;[Red]-General;General')
|
|
1382
|
+
# worksheet.write(11, 0, 123, format12) # > 0 Green
|
|
1383
|
+
# worksheet.write(12, 0, -45, format12) # < 0 Red
|
|
1384
|
+
# worksheet.write(13, 0, 0, format12) # = 0 Default colour
|
|
1385
|
+
#
|
|
1386
|
+
# # Zip code
|
|
1387
|
+
# format13.set_num_format('00000')
|
|
1388
|
+
# worksheet.write(14, 0, '01209', format13)
|
|
1389
|
+
#
|
|
1390
|
+
# The number system used for dates is described in "DATES AND TIME IN EXCEL".
|
|
1391
|
+
#
|
|
1392
|
+
# The colour format should have one of the following values:
|
|
1393
|
+
#
|
|
1394
|
+
# [Black] [Blue] [Cyan] [Green] [Magenta] [Red] [White] [Yellow]
|
|
1395
|
+
#
|
|
1396
|
+
# Alternatively you can specify the colour based on a colour index as follows:
|
|
1397
|
+
# [Color n], where n is a standard Excel colour index - 7. See the
|
|
1398
|
+
# 'Standard colors' worksheet created by formats.rb.
|
|
1399
|
+
#
|
|
1400
|
+
# For more information refer to the documentation on formatting in the doc
|
|
1401
|
+
# directory of the WriteExcel distro, the Excel on-line help or
|
|
1402
|
+
# http://office.microsoft.com/en-gb/assistance/HP051995001033.aspx
|
|
1403
|
+
#
|
|
1404
|
+
# You should ensure that the format string is valid in Excel prior to using
|
|
1405
|
+
# it in WriteExcel.
|
|
1406
|
+
#
|
|
1407
|
+
# Excel's built-in formats are shown in the following table:
|
|
1408
|
+
#
|
|
1409
|
+
# Index Index Format String
|
|
1410
|
+
# 0 0x00 General
|
|
1411
|
+
# 1 0x01 0
|
|
1412
|
+
# 2 0x02 0.00
|
|
1413
|
+
# 3 0x03 #,##0
|
|
1414
|
+
# 4 0x04 #,##0.00
|
|
1415
|
+
# 5 0x05 ($#,##0_);($#,##0)
|
|
1416
|
+
# 6 0x06 ($#,##0_);[Red]($#,##0)
|
|
1417
|
+
# 7 0x07 ($#,##0.00_);($#,##0.00)
|
|
1418
|
+
# 8 0x08 ($#,##0.00_);[Red]($#,##0.00)
|
|
1419
|
+
# 9 0x09 0%
|
|
1420
|
+
# 10 0x0a 0.00%
|
|
1421
|
+
# 11 0x0b 0.00E+00
|
|
1422
|
+
# 12 0x0c # ?/?
|
|
1423
|
+
# 13 0x0d # ??/??
|
|
1424
|
+
# 14 0x0e m/d/yy
|
|
1425
|
+
# 15 0x0f d-mmm-yy
|
|
1426
|
+
# 16 0x10 d-mmm
|
|
1427
|
+
# 17 0x11 mmm-yy
|
|
1428
|
+
# 18 0x12 h:mm AM/PM
|
|
1429
|
+
# 19 0x13 h:mm:ss AM/PM
|
|
1430
|
+
# 20 0x14 h:mm
|
|
1431
|
+
# 21 0x15 h:mm:ss
|
|
1432
|
+
# 22 0x16 m/d/yy h:mm
|
|
1433
|
+
# .. .... ...........
|
|
1434
|
+
# 37 0x25 (#,##0_);(#,##0)
|
|
1435
|
+
# 38 0x26 (#,##0_);[Red](#,##0)
|
|
1436
|
+
# 39 0x27 (#,##0.00_);(#,##0.00)
|
|
1437
|
+
# 40 0x28 (#,##0.00_);[Red](#,##0.00)
|
|
1438
|
+
# 41 0x29 _(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)
|
|
1439
|
+
# 42 0x2a _($* #,##0_);_($* (#,##0);_($* "-"_);_(@_)
|
|
1440
|
+
# 43 0x2b _(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)
|
|
1441
|
+
# 44 0x2c _($* #,##0.00_);_($* (#,##0.00);_($* "-"??_);_(@_)
|
|
1442
|
+
# 45 0x2d mm:ss
|
|
1443
|
+
# 46 0x2e [h]:mm:ss
|
|
1444
|
+
# 47 0x2f mm:ss.0
|
|
1445
|
+
# 48 0x30 ##0.0E+0
|
|
1446
|
+
# 49 0x31 @
|
|
1447
|
+
#
|
|
1448
|
+
# For examples of these formatting codes see the 'Numerical formats' worksheet
|
|
1449
|
+
# created by formats.rb.
|
|
1450
|
+
#--
|
|
1451
|
+
# See also the number_formats1.html and the number_formats2.html documents in
|
|
1452
|
+
# the doc directory of the distro.
|
|
1453
|
+
#++
|
|
1454
|
+
#
|
|
1455
|
+
# Note 1. Numeric formats 23 to 36 are not documented by Microsoft and may
|
|
1456
|
+
# differ in international versions.
|
|
1457
|
+
#
|
|
1458
|
+
# Note 2. In Excel 5 the dollar sign appears as a dollar sign. In Excel
|
|
1459
|
+
# 97-2000 it appears as the defined local currency symbol.
|
|
1460
|
+
#
|
|
1461
|
+
# Note 3. The red negative numeric formats display slightly differently in
|
|
1462
|
+
# Excel 5 and Excel 97-2000.
|
|
1463
|
+
#
|
|
1464
|
+
def set_num_format(num_format)
|
|
1465
|
+
@num_format = num_format
|
|
1466
|
+
end
|
|
1467
|
+
|
|
1468
|
+
#
|
|
1469
|
+
# This method can be used to indent text. The argument, which should be an
|
|
1470
|
+
# integer, is taken as the level of indentation:
|
|
1471
|
+
#
|
|
1472
|
+
# Default state: Text indentation is off
|
|
1473
|
+
# Default action: Indent text 1 level
|
|
1474
|
+
# Valid args: Positive integers
|
|
1475
|
+
#
|
|
1476
|
+
# format = workbook.add_format
|
|
1477
|
+
# format.set_indent(2)
|
|
1478
|
+
# worksheet.write(0, 0, 'This text is indented', format)
|
|
1479
|
+
#
|
|
1480
|
+
# Indentation is a horizontal alignment property. It will override any
|
|
1481
|
+
# other horizontal properties but it can be used in conjunction with
|
|
1482
|
+
# vertical properties.
|
|
1483
|
+
#
|
|
1484
|
+
def set_indent(indent = 1)
|
|
1485
|
+
@indent = indent
|
|
1486
|
+
end
|
|
1487
|
+
|
|
1488
|
+
#
|
|
1489
|
+
# This method can be used to shrink text so that it fits in a cell.
|
|
1490
|
+
#
|
|
1491
|
+
# Default state: Text shrinking is off
|
|
1492
|
+
# Default action: Turn "shrink to fit" on
|
|
1493
|
+
# Valid args: 1
|
|
1494
|
+
#
|
|
1495
|
+
# format = workbook.add_format
|
|
1496
|
+
# format.set_shrink
|
|
1497
|
+
# worksheet.write(0, 0, 'Honey, I shrunk the text!', format)
|
|
1498
|
+
#
|
|
1499
|
+
def set_shrink(arg = 1)
|
|
1500
|
+
@shrink = 1
|
|
1501
|
+
end
|
|
1502
|
+
|
|
1503
|
+
#
|
|
1504
|
+
# Default state: Justify last is off
|
|
1505
|
+
# Default action: Turn justify last on
|
|
1506
|
+
# Valid args: 0, 1
|
|
1507
|
+
#
|
|
1508
|
+
# Only applies to Far Eastern versions of Excel.
|
|
1509
|
+
#
|
|
1510
|
+
def set_text_justlast(arg = 1)
|
|
1511
|
+
@text_justlast = 1
|
|
1512
|
+
end
|
|
1513
|
+
|
|
1514
|
+
#
|
|
1515
|
+
# Default state: Pattern is off
|
|
1516
|
+
# Default action: Solid fill is on
|
|
1517
|
+
# Valid args: 0 .. 18
|
|
1518
|
+
#
|
|
1519
|
+
# Set the background pattern of a cell.
|
|
1520
|
+
#
|
|
1521
|
+
# Examples of the available patterns are shown in the 'Patterns' worksheet
|
|
1522
|
+
# created by formats.rb. However, it is unlikely that you will ever need
|
|
1523
|
+
# anything other than Pattern 1 which is a solid fill of the background color.
|
|
1524
|
+
#
|
|
1525
|
+
def set_pattern(pattern = 1)
|
|
1526
|
+
@pattern = pattern
|
|
1527
|
+
end
|
|
1528
|
+
|
|
1529
|
+
#
|
|
1530
|
+
# The set_bg_color() method can be used to set the background colour of a
|
|
1531
|
+
# pattern. Patterns are defined via the set_pattern() method. If a pattern
|
|
1532
|
+
# hasn't been defined then a solid fill pattern is used as the default.
|
|
1533
|
+
#
|
|
1534
|
+
# Default state: Color is off
|
|
1535
|
+
# Default action: Solid fill.
|
|
1536
|
+
# Valid args: See set_color()
|
|
1537
|
+
#
|
|
1538
|
+
# Here is an example of how to set up a solid fill in a cell:
|
|
1539
|
+
#
|
|
1540
|
+
# format = workbook.add_format
|
|
1541
|
+
#
|
|
1542
|
+
# format.set_pattern() # This is optional when using a solid fill
|
|
1543
|
+
#
|
|
1544
|
+
# format.set_bg_color('green')
|
|
1545
|
+
# worksheet.write('A1', 'Ray', format)
|
|
1546
|
+
#
|
|
1547
|
+
# For further examples see the 'Patterns' worksheet created by formats.rb.
|
|
1548
|
+
#
|
|
1549
|
+
def set_bg_color(color = 0x41)
|
|
1550
|
+
@bg_color = get_color(color)
|
|
1551
|
+
end
|
|
1552
|
+
|
|
1553
|
+
#
|
|
1554
|
+
# The set_fg_color() method can be used to set the foreground colour
|
|
1555
|
+
# of a pattern.
|
|
1556
|
+
#
|
|
1557
|
+
# Default state: Color is off
|
|
1558
|
+
# Default action: Solid fill.
|
|
1559
|
+
# Valid args: See set_color()
|
|
1560
|
+
#
|
|
1561
|
+
# For further examples see the 'Patterns' worksheet created by formats.rb.
|
|
1562
|
+
#
|
|
1563
|
+
def set_fg_color(color = 0x40)
|
|
1564
|
+
@fg_color = get_color(color)
|
|
1565
|
+
end
|
|
1566
|
+
|
|
1567
|
+
# Dynamically create set methods that aren't already defined.
|
|
1568
|
+
def method_missing(name, *args) # :nodoc:
|
|
1569
|
+
# -- original perl comment --
|
|
1570
|
+
# There are two types of set methods: set_property() and
|
|
1571
|
+
# set_property_color(). When a method is AUTOLOADED we store a new anonymous
|
|
1572
|
+
# sub in the appropriate slot in the symbol table. The speeds up subsequent
|
|
1573
|
+
# calls to the same method.
|
|
1574
|
+
|
|
1575
|
+
method = "#{name}"
|
|
1576
|
+
|
|
1577
|
+
# Check for a valid method names, i.e. "set_xxx_yyy".
|
|
1578
|
+
method =~ /set_(\w+)/ or raise "Unknown method: #{method}\n"
|
|
1579
|
+
|
|
1580
|
+
# Match the attribute, i.e. "@xxx_yyy".
|
|
1581
|
+
attribute = "@#{$1}"
|
|
1582
|
+
|
|
1583
|
+
# Check that the attribute exists
|
|
1584
|
+
# ........
|
|
1585
|
+
if method =~ /set\w+color$/ # for "set_property_color" methods
|
|
1586
|
+
value = get_color(args[0])
|
|
1587
|
+
else # for "set_xxx" methods
|
|
1588
|
+
value = args[0].nil? ? 1 : args[0]
|
|
1589
|
+
end
|
|
1590
|
+
if value.respond_to?(:to_str) || !value.respond_to?(:+)
|
|
1591
|
+
s = %Q!#{attribute} = "#{value.to_s}"!
|
|
1592
|
+
else
|
|
1593
|
+
s = %Q!#{attribute} = #{value.to_s}!
|
|
1594
|
+
end
|
|
1595
|
+
eval s
|
|
1596
|
+
end
|
|
1597
|
+
end # class Format
|
|
1598
|
+
|
|
1599
|
+
end # module Writeexcel
|
|
1600
|
+
|