keeguon-spreadsheet 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +619 -0
  3. data/Manifest.txt +85 -0
  4. data/bin/xlsopcodes +18 -0
  5. data/lib/parseexcel.rb +27 -0
  6. data/lib/parseexcel/parseexcel.rb +75 -0
  7. data/lib/parseexcel/parser.rb +11 -0
  8. data/lib/spreadsheet.rb +80 -0
  9. data/lib/spreadsheet/column.rb +71 -0
  10. data/lib/spreadsheet/compatibility.rb +23 -0
  11. data/lib/spreadsheet/datatypes.rb +161 -0
  12. data/lib/spreadsheet/encodings.rb +57 -0
  13. data/lib/spreadsheet/excel.rb +88 -0
  14. data/lib/spreadsheet/excel/error.rb +26 -0
  15. data/lib/spreadsheet/excel/internals.rb +458 -0
  16. data/lib/spreadsheet/excel/internals/biff5.rb +17 -0
  17. data/lib/spreadsheet/excel/internals/biff8.rb +19 -0
  18. data/lib/spreadsheet/excel/offset.rb +41 -0
  19. data/lib/spreadsheet/excel/password_hash.rb +24 -0
  20. data/lib/spreadsheet/excel/reader.rb +1302 -0
  21. data/lib/spreadsheet/excel/reader/biff5.rb +42 -0
  22. data/lib/spreadsheet/excel/reader/biff8.rb +231 -0
  23. data/lib/spreadsheet/excel/rgb.rb +122 -0
  24. data/lib/spreadsheet/excel/row.rb +98 -0
  25. data/lib/spreadsheet/excel/sst_entry.rb +46 -0
  26. data/lib/spreadsheet/excel/workbook.rb +80 -0
  27. data/lib/spreadsheet/excel/worksheet.rb +115 -0
  28. data/lib/spreadsheet/excel/writer.rb +1 -0
  29. data/lib/spreadsheet/excel/writer/biff8.rb +75 -0
  30. data/lib/spreadsheet/excel/writer/format.rb +264 -0
  31. data/lib/spreadsheet/excel/writer/n_worksheet.rb +888 -0
  32. data/lib/spreadsheet/excel/writer/workbook.rb +735 -0
  33. data/lib/spreadsheet/excel/writer/worksheet.rb +940 -0
  34. data/lib/spreadsheet/font.rb +115 -0
  35. data/lib/spreadsheet/format.rb +209 -0
  36. data/lib/spreadsheet/formula.rb +9 -0
  37. data/lib/spreadsheet/helpers.rb +11 -0
  38. data/lib/spreadsheet/link.rb +43 -0
  39. data/lib/spreadsheet/note.rb +23 -0
  40. data/lib/spreadsheet/noteObject.rb +17 -0
  41. data/lib/spreadsheet/row.rb +151 -0
  42. data/lib/spreadsheet/workbook.rb +143 -0
  43. data/lib/spreadsheet/worksheet.rb +326 -0
  44. data/lib/spreadsheet/writer.rb +30 -0
  45. data/test/data/test_adding_data_to_existing_file.xls +0 -0
  46. data/test/data/test_borders.xls +0 -0
  47. data/test/data/test_changes.xls +0 -0
  48. data/test/data/test_comment.xls +0 -0
  49. data/test/data/test_copy.xls +0 -0
  50. data/test/data/test_datetime.xls +0 -0
  51. data/test/data/test_empty.xls +0 -0
  52. data/test/data/test_formula.xls +0 -0
  53. data/test/data/test_long_sst_record.xls +0 -0
  54. data/test/data/test_margin.xls +0 -0
  55. data/test/data/test_merged_and_protected.xls +0 -0
  56. data/test/data/test_merged_cells.xls +0 -0
  57. data/test/data/test_missing_row.xls +0 -0
  58. data/test/data/test_pagesetup.xls +0 -0
  59. data/test/data/test_version_excel5.xls +0 -0
  60. data/test/data/test_version_excel95.xls +0 -0
  61. data/test/data/test_version_excel97.xls +0 -0
  62. data/test/data/test_version_excel97_2010.xls +0 -0
  63. data/test/data/test_worksheet_visibility.xls +0 -0
  64. data/test/excel/reader.rb +30 -0
  65. data/test/excel/row.rb +40 -0
  66. data/test/excel/writer/workbook.rb +95 -0
  67. data/test/excel/writer/worksheet.rb +81 -0
  68. data/test/font.rb +163 -0
  69. data/test/format.rb +95 -0
  70. data/test/integration.rb +1390 -0
  71. data/test/row.rb +33 -0
  72. data/test/suite.rb +18 -0
  73. data/test/workbook.rb +55 -0
  74. data/test/workbook_protection.rb +19 -0
  75. data/test/worksheet.rb +112 -0
  76. metadata +148 -0
@@ -0,0 +1,30 @@
1
+ module Spreadsheet
2
+ ##
3
+ # Parent Class for all Writers. Implements the copying of unmodified
4
+ # Spreadsheet documents.
5
+ class Writer
6
+ def initialize io_or_path
7
+ @io_or_path = io_or_path
8
+ end
9
+ def write workbook
10
+ if @io_or_path.respond_to? :seek
11
+ @io_or_path.binmode
12
+ write_workbook workbook, @io_or_path
13
+ else
14
+ File.open(@io_or_path, "wb+") do |fh|
15
+ write_workbook workbook, fh
16
+ end
17
+ end
18
+ end
19
+ private
20
+ def write_workbook workbook, io
21
+ reader = workbook.io
22
+ unless io == reader
23
+ reader.rewind
24
+ data = reader.read
25
+ io.rewind
26
+ io.write data
27
+ end
28
+ end
29
+ end
30
+ end
Binary file
Binary file
Binary file
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env ruby
2
+ # Excel::TestReader -- Spreadsheet -- 22.01.2013
3
+
4
+ $: << File.expand_path('../../../lib', File.dirname(__FILE__))
5
+
6
+ require 'test/unit'
7
+
8
+ module Spreadsheet
9
+ module Excel
10
+ class TestReader < Test::Unit::TestCase
11
+ def test_empty_file_error_on_setup
12
+ reader = Spreadsheet::Excel::Reader.new
13
+ empty_io = StringIO.new
14
+ assert_raise RuntimeError do
15
+ reader.setup empty_io
16
+ end
17
+ end
18
+
19
+ def test_not_empty_file_error_on_setup
20
+ reader = Spreadsheet::Excel::Reader.new
21
+ data = File.expand_path File.join('test', 'data')
22
+ path = File.join data, 'test_empty.xls'
23
+ not_empty_io = File.open(path, "rb")
24
+ assert_nothing_thrown do
25
+ reader.setup not_empty_io
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env ruby
2
+ # Excel::TestRow -- Spreadsheet -- 12.10.2008 -- hwyss@ywesee.com
3
+
4
+ $: << File.expand_path('../../lib', File.dirname(__FILE__))
5
+
6
+ require 'test/unit'
7
+ require 'spreadsheet'
8
+
9
+ module Spreadsheet
10
+ module Excel
11
+ class TestRow < Test::Unit::TestCase
12
+ def setup
13
+ @workbook = Excel::Workbook.new
14
+ @worksheet = Excel::Worksheet.new
15
+ @workbook.add_worksheet @worksheet
16
+ end
17
+ def test_date
18
+ row = Row.new @worksheet, 0, [nil, 27627.6789]
19
+ assert_equal Date.new(1975,8,21), row.date(1)
20
+ end
21
+ def test_to_a
22
+ row = Row.new @worksheet, 0, [nil, 1, 27627.6789]
23
+ row.set_format(2, Format.new(:number_format => 'DD.MM.YYYY'))
24
+ assert_equal [nil, 1, Date.new(1975, 8, 21)], row.to_a
25
+ end
26
+ def test_datetime
27
+ row = Row.new @worksheet, 0, [nil, 27627.765]
28
+ d1 = DateTime.new(1975,8,21) + 0.765
29
+ d2 = row.datetime 1
30
+ assert_equal d1, d2
31
+ end
32
+ def test_datetime_overflow
33
+ row = Row.new @worksheet, 0, [nil, 40010.6666666666]
34
+ d1 = DateTime.new(2009,07,16,16)
35
+ d2 = row.datetime 1
36
+ assert_equal d1, d2
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,95 @@
1
+ #!/usr/bin/env ruby
2
+ # Excel::Writer::TestWorkbook -- Spreadsheet -- 20.07.2011 -- vanderhoorn@gmail.com
3
+
4
+ $: << File.expand_path('../../../lib', File.dirname(__FILE__))
5
+
6
+ require 'test/unit'
7
+ require 'spreadsheet'
8
+
9
+ module Spreadsheet
10
+ module Excel
11
+ module Writer
12
+ class TestWorkbook < Test::Unit::TestCase
13
+ def setup
14
+ @book = Spreadsheet::Excel::Workbook.new
15
+ assert_instance_of Excel::Workbook, @book
16
+ assert_equal @book.worksheets.size, 0
17
+ @workbook_writer = Excel::Writer::Workbook.new @book
18
+ end
19
+ def test_sanitize_worksheets
20
+ assert_nothing_raised { @workbook_writer.sanitize_worksheets @book.worksheets }
21
+ end
22
+ def test_collect_formats
23
+ assert_equal 17, @workbook_writer.collect_formats(@book).length # Expected for vanilla
24
+ sheet = @book.create_worksheet
25
+ rowi=-1
26
+
27
+ f1 = Spreadsheet::Format.new
28
+ sheet.row(rowi+=1).default_format = f1
29
+ assert_equal 18, @workbook_writer.collect_formats(@book).length
30
+
31
+ f2 = Spreadsheet::Format.new
32
+ sheet.row(rowi+=1).default_format = f2
33
+ assert_equal 19, @workbook_writer.collect_formats(@book).length
34
+
35
+ sheet.row(rowi+=1).default_format = f2
36
+ assert_equal 19, @workbook_writer.collect_formats(@book).length # Ignores duplicates
37
+ end
38
+ def test_xf_index
39
+ sheet = @book.create_worksheet
40
+ rowi=-1
41
+
42
+ f1 = Spreadsheet::Format.new
43
+ sheet.row(rowi+=1).default_format = f1
44
+ @workbook_writer.collect_formats(@book)
45
+ assert_equal 17, @workbook_writer.xf_index(@book, f1)
46
+
47
+ f2 = Spreadsheet::Format.new
48
+ sheet.row(rowi+=1).default_format = f2
49
+ @workbook_writer.collect_formats(@book)
50
+ assert_equal 18, @workbook_writer.xf_index(@book, f2)
51
+
52
+ end
53
+ def test_write_fonts
54
+ num_written = 0
55
+ sheet = @book.create_worksheet
56
+ rowi=-1
57
+ # Stub inner #write_font as a counter:
58
+ (class << @workbook_writer; self; end).send(:define_method, :write_font) do |*args|
59
+ num_written += 1
60
+ end
61
+ io = StringIO.new("")
62
+
63
+ num_written = 0
64
+ @workbook_writer.collect_formats(@book)
65
+ @workbook_writer.write_fonts(@book, io)
66
+ assert_equal 1, num_written # Default format's font
67
+
68
+ f1 = Spreadsheet::Format.new
69
+ sheet.row(rowi+=1).default_format = f1
70
+ num_written = 0
71
+ @workbook_writer.collect_formats(@book)
72
+ @workbook_writer.write_fonts(@book, io)
73
+ assert_equal 1, num_written # No new fonts
74
+
75
+ f2 = Spreadsheet::Format.new
76
+ f2.font = Spreadsheet::Font.new("Foo")
77
+ sheet.row(rowi+=1).default_format = f2
78
+ num_written = 0
79
+ @workbook_writer.collect_formats(@book)
80
+ @workbook_writer.write_fonts(@book, io)
81
+ assert_equal 2, num_written # 2 distinct fonts total
82
+
83
+ f3 = Spreadsheet::Format.new
84
+ f3.font = f2.font # Re-use previous font
85
+ sheet.row(rowi+=1).default_format = f3
86
+ num_written = 0
87
+ @workbook_writer.collect_formats(@book)
88
+ @workbook_writer.write_fonts(@book, io)
89
+ assert_equal 2, num_written # 2 distinct fonts total still
90
+
91
+ end
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,81 @@
1
+ #!/usr/bin/env ruby
2
+ # Excel::Writer::TestWorksheet -- Spreadheet -- 21.11.2007 -- hwyss@ywesee.com
3
+
4
+ require 'test/unit'
5
+ require 'spreadsheet/excel/writer/worksheet'
6
+
7
+ module Spreadsheet
8
+ module Excel
9
+ module Writer
10
+ class TestWorksheet < Test::Unit::TestCase
11
+ def test_need_number
12
+ sheet = Worksheet.new nil, nil
13
+ assert_equal false, sheet.need_number?(10)
14
+ assert_equal false, sheet.need_number?(114.55)
15
+ assert_equal false, sheet.need_number?(0.1)
16
+ assert_equal false, sheet.need_number?(0.01)
17
+ assert_equal false, sheet.need_number?(0 / 0.0) # NaN
18
+ assert_equal true, sheet.need_number?(0.001)
19
+ assert_equal true, sheet.need_number?(10000000.0)
20
+ end
21
+
22
+ class RowMock
23
+ attr_accessor :idx, :first_used, :first_unused, :height, :outline_level
24
+
25
+ def initialize
26
+ @idx, @first_used, @first_unused, @height, @outline_level = 0,0,0,0,1
27
+ end
28
+
29
+ def method_missing name, *args
30
+ nil
31
+ end
32
+ end
33
+
34
+ def test_write_row_should_not_write_if_the_row_has_no_used_columns
35
+ sheet = Worksheet.new nil, nil
36
+ row = RowMock.new
37
+ row.first_used = nil
38
+
39
+ sheet.write_row row
40
+
41
+ assert_equal '', sheet.data
42
+ end
43
+
44
+ def test_write_row_should_write_if_any_column_is_used
45
+ sheet = Worksheet.new nil, nil
46
+ row = RowMock.new
47
+
48
+ sheet.write_row row
49
+
50
+ assert_equal false, sheet.data.empty?
51
+ end
52
+
53
+ def test_strings
54
+ book = Spreadsheet::Excel::Workbook.new
55
+ sheet = book.create_worksheet
56
+ writer = Worksheet.new book, sheet
57
+ rowi = -1
58
+
59
+ assert_equal(
60
+ {},
61
+ writer.strings
62
+ )
63
+
64
+ sheet.row(rowi+=1).concat(["Hello", "World"])
65
+ assert_equal(
66
+ {"Hello" => 1, "World" => 1},
67
+ writer.strings
68
+ )
69
+
70
+ sheet.row(rowi+=1).concat(["Goodbye", "Cruel", "World", 2012])
71
+ assert_equal(
72
+ {"Hello" => 1, "Goodbye" => 1, "Cruel" => 1, "World" => 2},
73
+ writer.strings
74
+ )
75
+
76
+ end
77
+
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,163 @@
1
+ #!/usr/bin/env ruby
2
+ # TestFont -- Spreadsheet -- 09.10.2008 -- hwyss@ywesee.com
3
+
4
+ $: << File.expand_path('../lib', File.dirname(__FILE__))
5
+
6
+ require 'test/unit'
7
+ require 'spreadsheet'
8
+
9
+ module Spreadsheet
10
+ class TestFont < Test::Unit::TestCase
11
+ def setup
12
+ @font = Font.new 'Arial'
13
+ end
14
+ def test_italic
15
+ assert_equal false, @font.italic
16
+ @font.italic!
17
+ assert_equal true, @font.italic
18
+ @font.italic = nil
19
+ assert_equal false, @font.italic
20
+ @font.italic = 1
21
+ assert_equal true, @font.italic
22
+ end
23
+ def test_encoding
24
+ assert_equal :default, @font.encoding
25
+ @font.encoding = :apple_roman
26
+ assert_equal :apple_roman, @font.encoding
27
+ @font.encoding = 'Chinese Simplified'
28
+ assert_equal :chinese_simplified, @font.encoding
29
+ assert_raises ArgumentError do @font.size = 'ascii' end
30
+ assert_equal :chinese_simplified, @font.encoding
31
+ @font.encoding = nil
32
+ assert_equal :default, @font.encoding
33
+ end
34
+ def test_family
35
+ assert_equal :none, @font.family
36
+ @font.family = :roman
37
+ assert_equal :roman, @font.family
38
+ @font.family = 'Swiss'
39
+ assert_equal :swiss, @font.family
40
+ assert_raises ArgumentError do @font.size = :greek end
41
+ assert_equal :swiss, @font.family
42
+ @font.family = nil
43
+ assert_equal :none, @font.family
44
+ end
45
+ def test_name
46
+ assert_equal 'Arial', @font.name
47
+ @font.name = 'Helvetica'
48
+ assert_equal 'Helvetica', @font.name
49
+ end
50
+ def test_outline
51
+ assert_equal false, @font.outline
52
+ @font.outline!
53
+ assert_equal true, @font.outline
54
+ @font.outline = nil
55
+ assert_equal false, @font.outline
56
+ @font.outline = 1
57
+ assert_equal true, @font.outline
58
+ end
59
+ def test_escapement
60
+ assert_equal :normal, @font.escapement
61
+ @font.escapement = :superscript
62
+ assert_equal :superscript, @font.escapement
63
+ @font.escapement = 'sub'
64
+ assert_equal :subscript, @font.escapement
65
+ assert_raises ArgumentError do @font.size = "upwards" end
66
+ assert_equal :subscript, @font.escapement
67
+ @font.escapement = nil
68
+ assert_equal :normal, @font.escapement
69
+ end
70
+ def test_shadow
71
+ assert_equal false, @font.shadow
72
+ @font.shadow!
73
+ assert_equal true, @font.shadow
74
+ @font.shadow = nil
75
+ assert_equal false, @font.shadow
76
+ @font.shadow = 1
77
+ assert_equal true, @font.shadow
78
+ end
79
+ def test_size
80
+ assert_equal 10, @font.size
81
+ @font.size = 12
82
+ assert_equal 12, @font.size
83
+ @font.size = 11.2
84
+ assert_equal 11.2, @font.size
85
+ assert_raises ArgumentError do @font.size = "123" end
86
+ end
87
+ def test_strikeout
88
+ assert_equal false, @font.strikeout
89
+ @font.strikeout!
90
+ assert_equal true, @font.strikeout
91
+ @font.strikeout = nil
92
+ assert_equal false, @font.strikeout
93
+ @font.strikeout = 1
94
+ assert_equal true, @font.strikeout
95
+ end
96
+ def test_underline
97
+ assert_equal :none, @font.underline
98
+ @font.underline = :single
99
+ assert_equal :single, @font.underline
100
+ @font.underline = 'double accounting'
101
+ assert_equal :double_accounting, @font.underline
102
+ assert_raises ArgumentError do @font.size = :triple end
103
+ assert_equal :double_accounting, @font.underline
104
+ @font.underline = nil
105
+ assert_equal :none, @font.underline
106
+ @font.underline = true
107
+ assert_equal :single, @font.underline
108
+ end
109
+ def test_weight
110
+ assert_equal :normal, @font.weight
111
+ @font.weight = :bold
112
+ assert_equal :bold, @font.weight
113
+ @font.weight = 100
114
+ assert_equal 100, @font.weight
115
+ assert_raises ArgumentError do @font.weight = Object.new end
116
+ assert_equal 100, @font.weight
117
+ @font.weight = 'bold'
118
+ assert_equal :bold, @font.weight
119
+ @font.weight = nil
120
+ assert_equal :normal, @font.weight
121
+ end
122
+ def test_key
123
+ expected = 'Arial_10_normal_normal_none_text_none_default'
124
+ assert_equal expected, @font.key
125
+ @font.name = 'Helvetica'
126
+ expected = 'Helvetica_10_normal_normal_none_text_none_default'
127
+ assert_equal expected, @font.key
128
+ @font.size = 12
129
+ expected = 'Helvetica_12_normal_normal_none_text_none_default'
130
+ assert_equal expected, @font.key
131
+ @font.weight = :bold
132
+ expected = 'Helvetica_12_bold_normal_none_text_none_default'
133
+ assert_equal expected, @font.key
134
+ @font.italic!
135
+ expected = 'Helvetica_12_bold_italic_normal_none_text_none_default'
136
+ assert_equal expected, @font.key
137
+ @font.strikeout!
138
+ expected = 'Helvetica_12_bold_italic_strikeout_normal_none_text_none_default'
139
+ assert_equal expected, @font.key
140
+ @font.outline!
141
+ expected = 'Helvetica_12_bold_italic_strikeout_outline_normal_none_text_none_default'
142
+ assert_equal expected, @font.key
143
+ @font.shadow!
144
+ expected = 'Helvetica_12_bold_italic_strikeout_outline_shadow_normal_none_text_none_default'
145
+ assert_equal expected, @font.key
146
+ @font.escapement = :super
147
+ expected = 'Helvetica_12_bold_italic_strikeout_outline_shadow_superscript_none_text_none_default'
148
+ assert_equal expected, @font.key
149
+ @font.underline = :double
150
+ expected = 'Helvetica_12_bold_italic_strikeout_outline_shadow_superscript_double_text_none_default'
151
+ assert_equal expected, @font.key
152
+ @font.color = :blue
153
+ expected = 'Helvetica_12_bold_italic_strikeout_outline_shadow_superscript_double_blue_none_default'
154
+ assert_equal expected, @font.key
155
+ @font.family = :swiss
156
+ expected = 'Helvetica_12_bold_italic_strikeout_outline_shadow_superscript_double_blue_swiss_default'
157
+ assert_equal expected, @font.key
158
+ @font.encoding = :iso_latin1
159
+ expected = 'Helvetica_12_bold_italic_strikeout_outline_shadow_superscript_double_blue_swiss_iso_latin1'
160
+ assert_equal expected, @font.key
161
+ end
162
+ end
163
+ end