roo 1.3.6 → 1.3.8

Sign up to get free protection for your applications and to get access to all the features.
data/lib/roo.rb CHANGED
@@ -12,7 +12,7 @@ module Roo
12
12
  when ''
13
13
  Google.new(file)
14
14
  else
15
- raise ArgumentError, "Don't know how to open file #{filename}"
15
+ raise ArgumentError, "Don't know how to open file #{file}"
16
16
  end
17
17
  end
18
18
  end
@@ -12,16 +12,42 @@ end
12
12
  module Spreadsheet
13
13
  module Excel
14
14
  class Row < Spreadsheet::Row
15
- def _date data # :nodoc:
16
- return data if data.is_a?(Date)
17
- date = @worksheet.date_base + data.to_i
18
- if LEAP_ERROR > @worksheet.date_base
19
- date -= 1
20
- end
21
- date
22
- end
15
+ public :_date
23
16
  public :_datetime
24
17
  end
18
+ # patch for ruby-spreadsheet parsing formulas
19
+ class Reader
20
+ def read_formula worksheet, addr, work
21
+ row, column, xf, rtype, rval, rcheck, opts = work.unpack 'v3CxCx3v2'
22
+ formula = Formula.new
23
+ formula.shared = (opts & 0x08) > 0
24
+ formula.data = work[20..-1]
25
+ if rcheck != 0xffff || rtype > 3
26
+ value, = work.unpack 'x6E'
27
+ unless value
28
+ # on architectures where sizeof(double) > 8
29
+ value, = work.unpack 'x6e'
30
+ end
31
+ formula.value = value
32
+ elsif rtype == 0
33
+ pos, op, len, work = get_next_chunk
34
+ if op == :string
35
+ formula.value = client read_string(work, 2), @workbook.encoding
36
+ else
37
+ # This seems to work but I don't know why :). It at least
38
+ # seems to correct the case we saw but doubtful it's the right fix
39
+ formula.value = client read_string(work[10..-1], 2), @workbook.encoding
40
+ end
41
+ elsif rtype == 1
42
+ formula.value = rval > 0
43
+ elsif rtype == 2
44
+ formula.value = Error.new rval
45
+ else
46
+ # leave the Formula value blank
47
+ end
48
+ set_cell worksheet, row, column, xf, formula
49
+ end
50
+ end
25
51
  end
26
52
  end
27
53
 
@@ -2,7 +2,7 @@ module Roo #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 1
4
4
  MINOR = 3
5
- TINY = 6
5
+ TINY = 8
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -130,7 +130,7 @@ class TestRoo < Test::Unit::TestCase
130
130
 
131
131
  OPENOFFICE = true # do Openoffice-Spreadsheet Tests?
132
132
  EXCEL = true # do Excel Tests?
133
- GOOGLE = true # do Google-Spreadsheet Tests?
133
+ GOOGLE = false # do Google-Spreadsheet Tests?
134
134
  EXCELX = true # do Excel-X Tests? (.xlsx-files)
135
135
 
136
136
  ONLINE = true
@@ -1756,18 +1756,27 @@ Sheet 3:
1756
1756
  end
1757
1757
  end
1758
1758
 
1759
+
1760
+ def test_ruby_spreadsheet_formula_bug
1761
+ with_each_spreadsheet(:name=>'formula_parse_error', :format=>:excel) do |oo|
1762
+ assert_equal '5026', oo.cell(2,3)
1763
+ assert_equal '5026', oo.cell(3,3)
1764
+ end
1765
+ end
1766
+
1767
+
1759
1768
  # Excel has two base date formats one from 1900 and the other from 1904.
1760
1769
  # There's a MS bug that 1900 base dates include an extra day due to erroneously
1761
1770
  # including 1900 as a leap yar.
1762
1771
  def test_base_dates_in_excel
1763
1772
  with_each_spreadsheet(:name=>'1900_base', :format=>:excel) do |oo|
1764
1773
  assert_equal Date.new(2009,06,15), oo.cell(1,1)
1765
- assert_equal Date.new(Time.now.year,Time.now.month,Time.now.day), oo.cell(2,1) #formula for TODAY()
1774
+ assert_equal Date.new(2009,06,28), oo.cell(2,1) #formula for TODAY(), last calculated on 06.28
1766
1775
  assert_equal :date, oo.celltype(1,1)
1767
1776
  end
1768
1777
  with_each_spreadsheet(:name=>'1904_base', :format=>:excel) do |oo|
1769
1778
  assert_equal Date.new(2009,06,15), oo.cell(1,1)
1770
- assert_equal Date.new(Time.now.year,Time.now.month,Time.now.day), oo.cell(2,1) #formula for TODAY()
1779
+ assert_equal Date.new(2009,06,28), oo.cell(2,1) #formula for TODAY(), last calculated on 06.28
1771
1780
  assert_equal :date, oo.celltype(1,1)
1772
1781
  end
1773
1782
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roo
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.6
4
+ version: 1.3.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hugh McGowan
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-06-28 00:00:00 -05:00
13
+ date: 2009-07-18 00:00:00 -05:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -21,7 +21,7 @@ dependencies:
21
21
  requirements:
22
22
  - - ">="
23
23
  - !ruby/object:Gem::Version
24
- version: 0.6.3.1
24
+ version: 0.6.4
25
25
  version:
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rubyzip
@@ -110,6 +110,7 @@ files:
110
110
  - test/formula.ods
111
111
  - test/formula.xls
112
112
  - test/formula.xlsx
113
+ - test/formula_parse_error.xls
113
114
  - test/html-escape.ods
114
115
  - test/no_spreadsheet_file.txt
115
116
  - test/numbers1.csv