xlsx_writer 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,13 @@
1
+ 0.2.2 / 2012-07-04
2
+
3
+ * Bug fixes
4
+
5
+ * Properly render FALSE boolean cells
6
+
7
+ * Enhancements
8
+
9
+ * Add :faded option for cells
10
+
1
11
  0.2.1 / 2012-06-08
2
12
 
3
13
  * Bug fixes
data/README.markdown CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  Writes (doesn't read or modify) XLSX files.
4
4
 
5
+ ## Real-world usage
6
+
7
+ <p><a href="http://brighterplanet.com"><img src="https://s3.amazonaws.com/static.brighterplanet.com/assets/logos/flush-left/inline/green/rasterized/brighter_planet-160-transparent.png" alt="Brighter Planet logo"/></a></p>
8
+
9
+ We use `xlsx_writer` for [sustainability analytics at Brighter Planet](http://brighterplanet.com/case_studies).
10
+
5
11
  ## Credit
6
12
 
7
13
  Based on the [original simple\_xlsx\_writer gem](https://github.com/harvesthq/simple_xlsx_writer) and [patches by mumboe](https://github.com/mumboe/simple_xlsx_writer)
@@ -74,3 +80,6 @@ Features not present in simple_xlsx_writer:
74
80
  # don't forget
75
81
  doc.cleanup
76
82
 
83
+ ## Copyright
84
+
85
+ Copyright (c) 2012 Dee Zsombor, Justin Beck, Seamus Abshere. See LICENSE for details.
data/foo.rb CHANGED
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env ruby
1
2
  require 'bundler/setup'
2
3
 
3
4
  if ::Bundler.definition.specs['debugger'].first
@@ -10,15 +11,22 @@ require 'xlsx_writer'
10
11
 
11
12
  @doc = XlsxWriter::Document.new
12
13
 
13
- @sheet1 = @doc.add_sheet("Sheet1")
14
- @sheet1.add_row(['a', 'a'])
15
- @sheet1.add_row(['a', 'a'])
16
- @sheet1.add_row(['a', 'a'])
17
- # @sheet1.add_row(['foo', 'bar'])
18
- @sheet1.add_autofilter 'A1:B1'
14
+ # @sheet1 = @doc.add_sheet("Sheet1")
15
+ # @sheet1.add_row(['a', 'a'])
16
+ # @sheet1.add_row(['a', { :value => 'a', :faded => true, :type => :String }])
17
+ # @sheet1.add_row(['a', 'a'])
18
+ # # @sheet1.add_row(['foo', 'bar'])
19
+ # @sheet1.add_autofilter 'A1:B1'
19
20
 
20
21
  @sheet2 = @doc.add_sheet("Sheet2")
21
22
  @sheet2.add_row(['a', 'a'])
23
+ @sheet2.add_row(['false1', false])
24
+ @sheet2.add_row(['false2', {:value => false, :type => :Boolean}])
25
+ @sheet2.add_row(['false3', 'faLse'])
26
+ @sheet2.add_row(['true1', true])
27
+ @sheet2.add_row(['true2', {:value => true, :type => :Boolean}])
28
+ @sheet2.add_row(['true3', 'trUe'])
29
+
22
30
  # @sheet2.add_row(['hello', 'world'])
23
31
  # @sheet2.add_row(['yo', 'there'])
24
32
  # @sheet2.add_row(['foo', 'bar'])
@@ -18,8 +18,8 @@ module XlsxWriter
18
18
  end
19
19
 
20
20
  # TODO make a class for this
21
- def excel_style_number(calculated_type)
22
- case calculated_type
21
+ def excel_style_number(calculated_type, faded = false)
22
+ i = case calculated_type
23
23
  when :String
24
24
  0
25
25
  when :Boolean
@@ -35,6 +35,11 @@ module XlsxWriter
35
35
  else
36
36
  raise ::ArgumentError, "Unknown cell type #{k}"
37
37
  end
38
+ if faded
39
+ i * 2 + 1
40
+ else
41
+ i * 2
42
+ end
38
43
  end
39
44
 
40
45
  def excel_column_letter(i)
@@ -86,16 +91,23 @@ module XlsxWriter
86
91
  end
87
92
 
88
93
  def calculate_type(value)
89
- if value.is_a?(::Date)
94
+ case value
95
+ when Date
90
96
  :Date
91
- elsif value.is_a?(::Integer)
97
+ when Integer
92
98
  :Integer
93
- elsif value.is_a?(::Float) or (defined?(::BigDecimal) and value.is_a?(::BigDecimal)) or (defined?(::Decimal) and value.is_a?(::Decimal))
99
+ when Float
94
100
  :Decimal
95
- elsif value.is_a?(::Numeric)
101
+ when Numeric
96
102
  :Number
103
+ when TrueClass, FalseClass, TRUE_FALSE_PATTERN
104
+ :Boolean
97
105
  else
98
- :String
106
+ if (defined?(Decimal) and value.is_a?(Decimal)) or (defined?(BigDecimal) and value.is_a?(BigDecimal))
107
+ :Decimal
108
+ else
109
+ :String
110
+ end
99
111
  end
100
112
  end
101
113
 
@@ -144,8 +156,9 @@ module XlsxWriter
144
156
  MAX_DIGIT_WIDTH = 5
145
157
  MAX_REASONABLE_WIDTH = 75
146
158
  DATE_LENGTH = 'YYYY-MM-DD'.length
147
- BOOLEAN_LENGTH = 'FALSE'.length
159
+ BOOLEAN_LENGTH = 'FALSE'.length + 1
148
160
  JAN_1_1900 = ::Time.parse '1900-01-01'
161
+ TRUE_FALSE_PATTERN = %r{^true|false$}i
149
162
 
150
163
  attr_reader :row
151
164
  attr_reader :value
@@ -158,21 +171,23 @@ module XlsxWriter
158
171
  @row = row
159
172
  if data.is_a?(::Hash)
160
173
  data = data.symbolize_keys
161
- calculated_type = data[:type]
162
174
  @value = data[:value]
175
+ faded = data[:faded]
176
+ calculated_type = data[:type] || Cell.calculate_type(@value)
163
177
  else
164
178
  @value = data
179
+ faded = false
165
180
  calculated_type = Cell.calculate_type @value
166
181
  end
167
182
  character_width = Cell.character_width @value, calculated_type
168
183
  @pixel_width = Cell.pixel_width character_width
169
184
  @excel_type = Cell.excel_type calculated_type
170
- @excel_style_number = Cell.excel_style_number calculated_type
185
+ @excel_style_number = Cell.excel_style_number calculated_type, faded
171
186
  @excel_value = Cell.send "excel_#{calculated_type.to_s.underscore}", @value
172
187
  end
173
188
 
174
189
  def to_xml
175
- if value.blank?
190
+ if value.nil? or (value.is_a?(String) and value.empty?)
176
191
  %{<c r="#{excel_column_letter}#{row.ndx}" s="0" t="inlineStr" />}
177
192
  elsif excel_type == :inlineStr
178
193
  %{<c r="#{excel_column_letter}#{row.ndx}" s="#{excel_style_number}" t="#{excel_type}"><is><t>#{excel_value}</t></is></c>}
@@ -4,11 +4,17 @@
4
4
  <numFmt numFmtId="164" formatCode="0.00" />
5
5
  </numFmts>
6
6
 
7
- <fonts count="1">
7
+ <fonts count="2">
8
8
  <font>
9
9
  <sz val="10"/>
10
10
  <name val="Arial"/>
11
11
  </font>
12
+ <!-- faded -->
13
+ <font>
14
+ <color rgb="FFCCCCCC"/>
15
+ <sz val="10"/>
16
+ <name val="Arial"/>
17
+ </font>
12
18
  </fonts>
13
19
 
14
20
  <fills count="1">
@@ -26,26 +32,21 @@
26
32
  <xf builtinId="4" />
27
33
  </cellStyleXfs>
28
34
 
29
- <cellXfs count="5">
35
+ <cellXfs count="10">
30
36
  <!-- general -->
31
- <xf numFmtId="0" fontId="0">
32
- <alignment vertical="top" horizontal="left" />
33
- </xf>
37
+ <xf numFmtId="0" fontId="0"><alignment vertical="top" horizontal="left" /></xf>
38
+ <xf numFmtId="0" fontId="1"><alignment vertical="top" horizontal="left" /></xf>
34
39
  <!-- currency (really accounting) -->
35
- <xf numFmtId="39" fontId="0" xfId="1">
36
- <alignment vertical="top" horizontal="right" />
37
- </xf>
40
+ <xf numFmtId="39" fontId="0" xfId="1"><alignment vertical="top" horizontal="right" /></xf>
41
+ <xf numFmtId="39" fontId="1" xfId="1"><alignment vertical="top" horizontal="right" /></xf>
38
42
  <!-- date -->
39
- <xf numFmtId="14" fontId="0">
40
- <alignment vertical="top" horizontal="left" />
41
- </xf>
43
+ <xf numFmtId="14" fontId="0"><alignment vertical="top" horizontal="left" /></xf>
44
+ <xf numFmtId="14" fontId="1"><alignment vertical="top" horizontal="left" /></xf>
42
45
  <!-- integer -->
43
- <xf numFmtId="0" fontId="0">
44
- <alignment vertical="top" horizontal="right" />
45
- </xf>
46
+ <xf numFmtId="0" fontId="0"><alignment vertical="top" horizontal="right" /></xf>
47
+ <xf numFmtId="0" fontId="1"><alignment vertical="top" horizontal="right" /></xf>
46
48
  <!-- float/decimal/etc. -->
47
- <xf numFmtId="164" fontId="0">
48
- <alignment vertical="top" horizontal="right" />
49
- </xf>
49
+ <xf numFmtId="164" fontId="0"><alignment vertical="top" horizontal="right" /></xf>
50
+ <xf numFmtId="164" fontId="1"><alignment vertical="top" horizontal="right" /></xf>
50
51
  </cellXfs>
51
52
  </styleSheet>
@@ -1,3 +1,3 @@
1
1
  module XlsxWriter
2
- VERSION = '0.2.1'
2
+ VERSION = '0.2.2'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xlsx_writer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2012-06-08 00:00:00.000000000 Z
14
+ date: 2012-07-04 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activesupport