WriteExcel 0.2.0

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.
Files changed (80) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +17 -0
  5. data/Rakefile +47 -0
  6. data/VERSION +1 -0
  7. data/examples/a_simple.rb +42 -0
  8. data/examples/autofilters.rb +266 -0
  9. data/examples/bigfile.rb +30 -0
  10. data/examples/copyformat.rb +51 -0
  11. data/examples/data_validate.rb +278 -0
  12. data/examples/date_time.rb +86 -0
  13. data/examples/demo.rb +118 -0
  14. data/examples/diag_border.rb +35 -0
  15. data/examples/formats.rb +489 -0
  16. data/examples/header.rb +136 -0
  17. data/examples/hidden.rb +28 -0
  18. data/examples/hyperlink.rb +42 -0
  19. data/examples/images.rb +52 -0
  20. data/examples/merge1.rb +39 -0
  21. data/examples/merge2.rb +44 -0
  22. data/examples/merge3.rb +65 -0
  23. data/examples/merge4.rb +82 -0
  24. data/examples/merge5.rb +79 -0
  25. data/examples/protection.rb +46 -0
  26. data/examples/regions.rb +52 -0
  27. data/examples/repeat.rb +42 -0
  28. data/examples/stats.rb +75 -0
  29. data/examples/stocks.rb +80 -0
  30. data/examples/tab_colors.rb +30 -0
  31. data/lib/WriteExcel.rb +30 -0
  32. data/lib/WriteExcel/biffwriter.rb +259 -0
  33. data/lib/WriteExcel/chart.rb +217 -0
  34. data/lib/WriteExcel/excelformula.y +138 -0
  35. data/lib/WriteExcel/excelformulaparser.rb +573 -0
  36. data/lib/WriteExcel/format.rb +1108 -0
  37. data/lib/WriteExcel/formula.rb +986 -0
  38. data/lib/WriteExcel/olewriter.rb +322 -0
  39. data/lib/WriteExcel/properties.rb +250 -0
  40. data/lib/WriteExcel/storage_lite.rb +590 -0
  41. data/lib/WriteExcel/workbook.rb +2602 -0
  42. data/lib/WriteExcel/worksheet.rb +6378 -0
  43. data/spec/WriteExcel_spec.rb +7 -0
  44. data/spec/spec.opts +1 -0
  45. data/spec/spec_helper.rb +9 -0
  46. data/test/tc_all.rb +31 -0
  47. data/test/tc_biff.rb +104 -0
  48. data/test/tc_chart.rb +22 -0
  49. data/test/tc_example_match.rb +1280 -0
  50. data/test/tc_format.rb +1264 -0
  51. data/test/tc_formula.rb +63 -0
  52. data/test/tc_ole.rb +110 -0
  53. data/test/tc_storage_lite.rb +102 -0
  54. data/test/tc_workbook.rb +115 -0
  55. data/test/tc_worksheet.rb +115 -0
  56. data/test/test_00_IEEE_double.rb +14 -0
  57. data/test/test_01_add_worksheet.rb +12 -0
  58. data/test/test_02_merge_formats.rb +58 -0
  59. data/test/test_04_dimensions.rb +397 -0
  60. data/test/test_05_rows.rb +182 -0
  61. data/test/test_06_extsst.rb +80 -0
  62. data/test/test_11_date_time.rb +484 -0
  63. data/test/test_12_date_only.rb +506 -0
  64. data/test/test_13_date_seconds.rb +486 -0
  65. data/test/test_21_escher.rb +629 -0
  66. data/test/test_22_mso_drawing_group.rb +739 -0
  67. data/test/test_23_note.rb +78 -0
  68. data/test/test_24_txo.rb +80 -0
  69. data/test/test_26_autofilter.rb +327 -0
  70. data/test/test_27_autofilter.rb +144 -0
  71. data/test/test_28_autofilter.rb +174 -0
  72. data/test/test_29_process_jpg.rb +131 -0
  73. data/test/test_30_validation_dval.rb +82 -0
  74. data/test/test_31_validation_dv_strings.rb +131 -0
  75. data/test/test_32_validation_dv_formula.rb +211 -0
  76. data/test/test_40_property_types.rb +191 -0
  77. data/test/test_41_properties.rb +238 -0
  78. data/test/test_42_set_properties.rb +430 -0
  79. data/test/ts_all.rb +34 -0
  80. metadata +154 -0
@@ -0,0 +1,182 @@
1
+ ###############################################################################
2
+ #
3
+ # A test for Spreadsheet::WriteExcel.
4
+ #
5
+ # Check that max/min columns of the Excel ROW record are written correctly.
6
+ #
7
+ # reverse('©'), October 2007, John McNamara, jmcnamara@cpan.org
8
+ #
9
+ # original written in Perl by John McNamara
10
+ # converted to Ruby by Hideo Nakamura, cxn03651@msj.biglobe.ne.jp
11
+ #
12
+ ############################################################################
13
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
14
+
15
+ require "test/unit"
16
+ require 'WriteExcel'
17
+
18
+ class TC_rows < Test::Unit::TestCase
19
+
20
+ def setup
21
+ end
22
+
23
+ def test_1
24
+ t = Time.now.strftime("%Y%m%d")
25
+ path = "temp#{t}-#{$$}-#{rand(0x100000000).to_s(36)}"
26
+ @test_file = File.join(Dir.tmpdir, path)
27
+ workbook = Spreadsheet::WriteExcel.new(@test_file)
28
+ workbook.compatibility_mode(1)
29
+ @tests = []
30
+
31
+ # for test case 1
32
+ row = 1
33
+ col1 = 0
34
+ col2 = 0
35
+ worksheet = workbook.add_worksheet
36
+ worksheet.set_row(row, 15)
37
+ @tests.push(
38
+ [
39
+ " \tset_row(): row = #{row}, col1 = #{col1}, col2 = #{col2}",
40
+ {
41
+ :col_min => 0,
42
+ :col_max => 0,
43
+ }
44
+ ]
45
+ )
46
+
47
+ # for test case 2
48
+ row = 2
49
+ col1 = 0
50
+ col2 = 0
51
+ worksheet = workbook.add_worksheet
52
+ worksheet.write(row, col1, 'Test')
53
+ worksheet.write(row, col2, 'Test')
54
+ @tests.push(
55
+ [
56
+ " \tset_row(): row = #{row}, col1 = #{col1}, col2 = #{col2}",
57
+ {
58
+ :col_min => 0,
59
+ :col_max => 1,
60
+ }
61
+ ]
62
+ )
63
+
64
+
65
+ # for test case 3
66
+ row = 3
67
+ col1 = 0
68
+ col2 = 1
69
+ worksheet = workbook.add_worksheet
70
+ worksheet.write(row, col1, 'Test')
71
+ worksheet.write(row, col2, 'Test')
72
+ @tests.push(
73
+ [
74
+ " \twrite(): row = #{row}, col1 = #{col1}, col2 = #{col2}",
75
+ {
76
+ :col_min => 0,
77
+ :col_max => 2,
78
+ }
79
+ ]
80
+ )
81
+
82
+ # for test case 4
83
+ row = 4
84
+ col1 = 1
85
+ col2 = 1
86
+ worksheet = workbook.add_worksheet
87
+ worksheet.write(row, col1, 'Test')
88
+ worksheet.write(row, col2, 'Test')
89
+ @tests.push(
90
+ [
91
+ " \twrite(): row = #{row}, col1 = #{col1}, col2 = #{col2}",
92
+ {
93
+ :col_min => 1,
94
+ :col_max => 2,
95
+ }
96
+ ]
97
+ )
98
+
99
+ # for test case 5
100
+ row = 5
101
+ col1 = 1
102
+ col2 = 255
103
+ worksheet = workbook.add_worksheet
104
+ worksheet.write(row, col1, 'Test')
105
+ worksheet.write(row, col2, 'Test')
106
+ @tests.push(
107
+ [
108
+ " \twrite(): row = #{row}, col1 = #{col1}, col2 = #{col2}",
109
+ {
110
+ :col_min => 1,
111
+ :col_max => 256,
112
+ }
113
+ ]
114
+ )
115
+
116
+ # for test case 6
117
+ row = 6
118
+ col1 = 255
119
+ col2 = 255
120
+ worksheet = workbook.add_worksheet
121
+ worksheet.write(row, col1, 'Test')
122
+ worksheet.write(row, col2, 'Test')
123
+ @tests.push(
124
+ [
125
+ " \twrite(): row = #{row}, col1 = #{col1}, col2 = #{col2}",
126
+ {
127
+ :col_min => 255,
128
+ :col_max => 256,
129
+ }
130
+ ]
131
+ )
132
+
133
+ # for test case 7
134
+ row = 7
135
+ col1 = 2
136
+ col2 = 9
137
+ worksheet = workbook.add_worksheet
138
+ worksheet.set_row(row, 15)
139
+ worksheet.write(row, col1, 'Test')
140
+ worksheet.write(row, col2, 'Test')
141
+ @tests.push(
142
+ [
143
+ " \tset_row + write(): row = #{row}, col1 = #{col1}, col2 = #{col2}",
144
+ {
145
+ :col_min => 2,
146
+ :col_max => 10,
147
+ }
148
+ ]
149
+ )
150
+
151
+ workbook.biff_only = 1
152
+ workbook.close
153
+ # Read in the row records
154
+ rows = []
155
+
156
+ xlsfile = open(@test_file, "rb")
157
+ while header = xlsfile.read(4)
158
+ record, length = header.unpack('vv')
159
+ data = xlsfile.read(length)
160
+
161
+ #read the row records only
162
+ next unless record == 0x0208
163
+ col_min, col_max = data.unpack('x2 vv')
164
+
165
+ rows.push(
166
+ {
167
+ :col_min => col_min,
168
+ :col_max => col_max
169
+ }
170
+ )
171
+ end
172
+ xlsfile.close
173
+ (0 .. @tests.size - 1).each do |i|
174
+ assert_equal(@tests[i][1], rows[i], @tests[i][0])
175
+ end
176
+ end
177
+
178
+ def teardown
179
+ File.unlink(@test_file) if FileTest.exist?(@test_file)
180
+ end
181
+
182
+ end
@@ -0,0 +1,80 @@
1
+ ###############################################################################
2
+ #
3
+ # A test for Spreadsheet::WriteExcel.
4
+ #
5
+ # Check that we calculate the correct bucket size and number for the EXTSST
6
+ # record. The data is taken from actual Excel files.
7
+ #
8
+ # reverse('©'), October 2007, John McNamara, jmcnamara@cpan.org
9
+ #
10
+ # original written in Perl by John McNamara
11
+ # converted to Ruby by Hideo Nakamura, cxn03651@msj.biglobe.ne.jp
12
+ #
13
+ ############################################################################
14
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
15
+
16
+ require "test/unit"
17
+ require 'WriteExcel'
18
+
19
+ class TC_extsst < Test::Unit::TestCase
20
+
21
+ def setup
22
+ t = Time.now.strftime("%Y%m%d")
23
+ path = "temp#{t}-#{$$}-#{rand(0x100000000).to_s(36)}"
24
+ @test_file = File.join(Dir.tmpdir, path)
25
+ @workbook = Spreadsheet::WriteExcel.new(@test_file)
26
+
27
+ @tests = [ # Unique Number of Bucket
28
+ # strings buckets size
29
+ [0, 0, 8],
30
+ [1, 1, 8],
31
+ [7, 1, 8],
32
+ [8, 1, 8],
33
+ [15, 2, 8],
34
+ [16, 2, 8],
35
+ [17, 3, 8],
36
+ [32, 4, 8],
37
+ [33, 5, 8],
38
+ [64, 8, 8],
39
+ [128, 16, 8],
40
+ [256, 32, 8],
41
+ [512, 64, 8],
42
+ [1023, 128, 8],
43
+ [1024, 114, 9],
44
+ [1025, 114, 9],
45
+ [2048, 121, 17],
46
+ [4096, 125, 33],
47
+ [4097, 125, 33],
48
+ [8192, 127, 65],
49
+ [8193, 127, 65],
50
+ [9000, 127, 71],
51
+ [10000, 127, 79],
52
+ [16384, 128, 129],
53
+ [262144, 128, 2049],
54
+ [1048576, 128, 8193],
55
+ [4194304, 128, 32769],
56
+ [8257536, 128, 64513],
57
+ ]
58
+ end
59
+
60
+ def teardown
61
+ @workbook.str_unique = 0
62
+ @workbook.close
63
+ File.unlink(@test_file) if FileTest.exist?(@test_file)
64
+ end
65
+
66
+ def test_1
67
+ @tests.each do |test|
68
+ str_unique = test[0]
69
+
70
+ @workbook.str_unique = test[0]
71
+ @workbook.calculate_extsst_size
72
+
73
+ assert_equal(@workbook.extsst_buckets, test[1],
74
+ " \tBucket number for str_unique strings")
75
+ assert_equal(@workbook.extsst_bucket_size, test[2],
76
+ " \tBucket size for str_unique strings");
77
+ end
78
+
79
+ end
80
+ end
@@ -0,0 +1,484 @@
1
+ ###############################################################################
2
+ #
3
+ # A test for Spreadsheet::WriteExcel.
4
+ #
5
+ # Tests date and time handling.
6
+ #
7
+ # reverse('©'), May 2004, John McNamara, jmcnamara@cpan.org
8
+ #
9
+ # original written in Perl by John McNamara
10
+ # converted to Ruby by Hideo Nakamura, cxn03651@msj.biglobe.ne.jp
11
+ #
12
+ ############################################################################
13
+ $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"
14
+
15
+ require "test/unit"
16
+ require 'WriteExcel'
17
+
18
+ class TC_data_time < Test::Unit::TestCase
19
+
20
+ def setup
21
+ t = Time.now.strftime("%Y%m%d")
22
+ path = "temp#{t}-#{$$}-#{rand(0x100000000).to_s(36)}"
23
+ @test_file = File.join(Dir.tmpdir, path)
24
+ @workbook = Spreadsheet::WriteExcel.new(@test_file)
25
+ @worksheet = @workbook.add_worksheet
26
+ @fit_delta = 0.5/(24*60*60*1000)
27
+ end
28
+
29
+ def teardown
30
+ @workbook.close
31
+ File.unlink(@test_file) if FileTest.exist?(@test_file)
32
+ end
33
+
34
+ def fit_cmp(a, b)
35
+ return (a-b).abs < @fit_delta
36
+ end
37
+
38
+ def test_float_comparison_function
39
+ # pass: diff < @fit_delta
40
+ date_time = '1899-12-31T00:00:00.0004'
41
+ number = 0
42
+ result = @worksheet.convert_date_time(date_time)
43
+ result = -1 if result.nil?
44
+ assert(fit_cmp(number, result),
45
+ "Testing convert_date_time: #{date_time} => #{result} <> #{number}")
46
+
47
+ # fail: diff > @fit_delta
48
+ date_time = '1989-12-31%00:00:00.0005'
49
+ number = 0
50
+ result = @worksheet.convert_date_time(date_time)
51
+ result = -1 if result.nil?
52
+ assert(!fit_cmp(number, result),
53
+ "Testing convert_date_time: #{date_time} => #{result} <> #{number}")
54
+ end
55
+
56
+ def test_the_time_data_generated_in_excel
57
+ lines = data_generated_excel.split(/\n/)
58
+ while !lines.empty?
59
+ line = lines.shift
60
+ braak if line =~ /^\s*# stop/ # For debugging
61
+ next unless line =~ /\S/ # Ignore blank lines
62
+ next if line =~ /^\s*#/ # Ignore comments
63
+
64
+ if line =~ /"DateTime">([^<]+)/
65
+ date_time = $1
66
+ line = lines.shift
67
+
68
+ if line =~ /"Number">([^<]+)/
69
+ number = $1.to_f
70
+ result = @worksheet.convert_date_time(date_time)
71
+ result = -1 if result.nil?
72
+ assert(fit_cmp(number, result),
73
+ "date_time: #{date_time}\n" +
74
+ "difference between #{number} and #{result}\n" +
75
+ "= #{(number - result).abs.to_s}\n" +
76
+ "> #{@fit_delta.to_s}")
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+ def data_generated_excel
83
+
84
+ return <<-__DATA_END__
85
+
86
+ # Test data taken from Excel in XML format.
87
+ <Row>
88
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">1899-12-31T00:00:00.000</Data></Cell>
89
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">0</Data></Cell>
90
+ </Row>
91
+ <Row>
92
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">1982-08-25T00:15:20.213</Data></Cell>
93
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">30188.010650613425</Data></Cell>
94
+ </Row>
95
+ <Row>
96
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">2065-04-19T00:16:48.290</Data></Cell>
97
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">60376.011670023145</Data></Cell>
98
+ </Row>
99
+ <Row>
100
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">2147-12-15T00:55:25.446</Data></Cell>
101
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">90565.038488958337</Data></Cell>
102
+ </Row>
103
+ <Row>
104
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">2230-08-10T01:02:46.891</Data></Cell>
105
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">120753.04359827546</Data></Cell>
106
+ </Row>
107
+ <Row>
108
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">2313-04-06T01:04:15.597</Data></Cell>
109
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">150942.04462496529</Data></Cell>
110
+ </Row>
111
+ <Row>
112
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">2395-11-30T01:09:40.889</Data></Cell>
113
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">181130.04838991899</Data></Cell>
114
+ </Row>
115
+ <Row>
116
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">2478-07-25T01:11:32.560</Data></Cell>
117
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">211318.04968240741</Data></Cell>
118
+ </Row>
119
+ <Row>
120
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">2561-03-21T01:30:19.169</Data></Cell>
121
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">241507.06272186342</Data></Cell>
122
+ </Row>
123
+ <Row>
124
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">2643-11-15T01:48:25.580</Data></Cell>
125
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">271695.07529606484</Data></Cell>
126
+ </Row>
127
+ <Row>
128
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">2726-07-12T02:03:31.919</Data></Cell>
129
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">301884.08578609955</Data></Cell>
130
+ </Row>
131
+ <Row>
132
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">2809-03-06T02:11:11.986</Data></Cell>
133
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">332072.09111094906</Data></Cell>
134
+ </Row>
135
+ <Row>
136
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">2891-10-31T02:24:37.095</Data></Cell>
137
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">362261.10042934027</Data></Cell>
138
+ </Row>
139
+ <Row>
140
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">2974-06-26T02:35:07.220</Data></Cell>
141
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">392449.10772245371</Data></Cell>
142
+ </Row>
143
+ <Row>
144
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">3057-02-19T02:45:12.109</Data></Cell>
145
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">422637.1147234838</Data></Cell>
146
+ </Row>
147
+ <Row>
148
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">3139-10-17T03:06:39.990</Data></Cell>
149
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">452826.12962951389</Data></Cell>
150
+ </Row>
151
+ <Row>
152
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">3222-06-11T03:08:08.251</Data></Cell>
153
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">483014.13065105322</Data></Cell>
154
+ </Row>
155
+ <Row>
156
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">3305-02-05T03:19:12.576</Data></Cell>
157
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">513203.13834</Data></Cell>
158
+ </Row>
159
+ <Row>
160
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">3387-10-01T03:29:42.574</Data></Cell>
161
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">543391.14563164348</Data></Cell>
162
+ </Row>
163
+ <Row>
164
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">3470-05-27T03:37:30.813</Data></Cell>
165
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">573579.15105107636</Data></Cell>
166
+ </Row>
167
+ <Row>
168
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">3553-01-21T04:14:38.231</Data></Cell>
169
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">603768.17683137732</Data></Cell>
170
+ </Row>
171
+ <Row>
172
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">3635-09-16T04:16:28.559</Data></Cell>
173
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">633956.17810832174</Data></Cell>
174
+ </Row>
175
+ <Row>
176
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">3718-05-13T04:17:58.222</Data></Cell>
177
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">664145.17914608796</Data></Cell>
178
+ </Row>
179
+ <Row>
180
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">3801-01-06T04:21:41.794</Data></Cell>
181
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">694333.18173372687</Data></Cell>
182
+ </Row>
183
+ <Row>
184
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">3883-09-02T04:56:35.792</Data></Cell>
185
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">724522.20596981479</Data></Cell>
186
+ </Row>
187
+ <Row>
188
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">3966-04-28T05:25:14.885</Data></Cell>
189
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">754710.2258667245</Data></Cell>
190
+ </Row>
191
+ <Row>
192
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">4048-12-21T05:26:05.724</Data></Cell>
193
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">784898.22645513888</Data></Cell>
194
+ </Row>
195
+ <Row>
196
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">4131-08-18T05:46:44.068</Data></Cell>
197
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">815087.24078782403</Data></Cell>
198
+ </Row>
199
+ <Row>
200
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">4214-04-13T05:48:01.141</Data></Cell>
201
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">845275.24167987274</Data></Cell>
202
+ </Row>
203
+ <Row>
204
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">4296-12-07T05:53:52.315</Data></Cell>
205
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">875464.24574438657</Data></Cell>
206
+ </Row>
207
+ <Row>
208
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">4379-08-03T06:14:48.580</Data></Cell>
209
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">905652.26028449077</Data></Cell>
210
+ </Row>
211
+ <Row>
212
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">4462-03-28T06:46:15.738</Data></Cell>
213
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">935840.28212659725</Data></Cell>
214
+ </Row>
215
+ <Row>
216
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">4544-11-22T07:31:20.407</Data></Cell>
217
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">966029.31343063654</Data></Cell>
218
+ </Row>
219
+ <Row>
220
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">4627-07-19T07:58:33.754</Data></Cell>
221
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">996217.33233511576</Data></Cell>
222
+ </Row>
223
+ <Row>
224
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">4710-03-15T08:07:43.130</Data></Cell>
225
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1026406.3386936343</Data></Cell>
226
+ </Row>
227
+ <Row>
228
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">4792-11-07T08:29:11.091</Data></Cell>
229
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1056594.3536005903</Data></Cell>
230
+ </Row>
231
+ <Row>
232
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">4875-07-04T09:08:15.328</Data></Cell>
233
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1086783.3807329629</Data></Cell>
234
+ </Row>
235
+ <Row>
236
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">4958-02-27T09:30:41.781</Data></Cell>
237
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1116971.3963169097</Data></Cell>
238
+ </Row>
239
+ <Row>
240
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">5040-10-23T09:34:04.462</Data></Cell>
241
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1147159.3986627546</Data></Cell>
242
+ </Row>
243
+ <Row>
244
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">5123-06-20T09:37:23.945</Data></Cell>
245
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1177348.4009715857</Data></Cell>
246
+ </Row>
247
+ <Row>
248
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">5206-02-12T09:37:56.655</Data></Cell>
249
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1207536.4013501736</Data></Cell>
250
+ </Row>
251
+ <Row>
252
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">5288-10-08T09:45:12.230</Data></Cell>
253
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1237725.406391551</Data></Cell>
254
+ </Row>
255
+ <Row>
256
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">5371-06-04T09:54:14.782</Data></Cell>
257
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1267913.412671088</Data></Cell>
258
+ </Row>
259
+ <Row>
260
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">5454-01-28T09:54:22.108</Data></Cell>
261
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1298101.4127558796</Data></Cell>
262
+ </Row>
263
+ <Row>
264
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">5536-09-24T10:01:36.151</Data></Cell>
265
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1328290.4177795255</Data></Cell>
266
+ </Row>
267
+ <Row>
268
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">5619-05-20T12:09:48.602</Data></Cell>
269
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1358478.5068125231</Data></Cell>
270
+ </Row>
271
+ <Row>
272
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">5702-01-14T12:34:08.549</Data></Cell>
273
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1388667.5237100578</Data></Cell>
274
+ </Row>
275
+ <Row>
276
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">5784-09-08T12:56:06.495</Data></Cell>
277
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1418855.5389640625</Data></Cell>
278
+ </Row>
279
+ <Row>
280
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">5867-05-06T12:58:58.217</Data></Cell>
281
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1449044.5409515856</Data></Cell>
282
+ </Row>
283
+ <Row>
284
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">5949-12-30T12:59:54.263</Data></Cell>
285
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1479232.5416002662</Data></Cell>
286
+ </Row>
287
+ <Row>
288
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">6032-08-24T13:34:41.331</Data></Cell>
289
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1509420.5657561459</Data></Cell>
290
+ </Row>
291
+ <Row>
292
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">6115-04-21T13:58:28.601</Data></Cell>
293
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1539609.5822754744</Data></Cell>
294
+ </Row>
295
+ <Row>
296
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">6197-12-14T14:02:16.899</Data></Cell>
297
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1569797.5849178126</Data></Cell>
298
+ </Row>
299
+ <Row>
300
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">6280-08-10T14:36:17.444</Data></Cell>
301
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1599986.6085352316</Data></Cell>
302
+ </Row>
303
+ <Row>
304
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">6363-04-06T14:37:57.451</Data></Cell>
305
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1630174.60969272</Data></Cell>
306
+ </Row>
307
+ <Row>
308
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">6445-11-30T14:57:42.757</Data></Cell>
309
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1660363.6234115392</Data></Cell>
310
+ </Row>
311
+ <Row>
312
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">6528-07-26T15:10:48.307</Data></Cell>
313
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1690551.6325035533</Data></Cell>
314
+ </Row>
315
+ <Row>
316
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">6611-03-22T15:14:39.890</Data></Cell>
317
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1720739.635183912</Data></Cell>
318
+ </Row>
319
+ <Row>
320
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">6693-11-15T15:19:47.988</Data></Cell>
321
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1750928.6387498612</Data></Cell>
322
+ </Row>
323
+ <Row>
324
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">6776-07-11T16:04:24.344</Data></Cell>
325
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1781116.6697262037</Data></Cell>
326
+ </Row>
327
+ <Row>
328
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">6859-03-07T16:22:23.952</Data></Cell>
329
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1811305.6822216667</Data></Cell>
330
+ </Row>
331
+ <Row>
332
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">6941-10-31T16:29:55.999</Data></Cell>
333
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1841493.6874536921</Data></Cell>
334
+ </Row>
335
+ <Row>
336
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">7024-06-26T16:58:20.259</Data></Cell>
337
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1871681.7071789235</Data></Cell>
338
+ </Row>
339
+ <Row>
340
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">7107-02-21T17:04:02.415</Data></Cell>
341
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1901870.7111390624</Data></Cell>
342
+ </Row>
343
+ <Row>
344
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">7189-10-16T17:18:29.630</Data></Cell>
345
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1932058.7211762732</Data></Cell>
346
+ </Row>
347
+ <Row>
348
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">7272-06-11T17:47:21.323</Data></Cell>
349
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1962247.7412190163</Data></Cell>
350
+ </Row>
351
+ <Row>
352
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">7355-02-05T17:53:29.866</Data></Cell>
353
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">1992435.7454845603</Data></Cell>
354
+ </Row>
355
+ <Row>
356
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">7437-10-02T17:53:41.076</Data></Cell>
357
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2022624.7456143056</Data></Cell>
358
+ </Row>
359
+ <Row>
360
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">7520-05-28T17:55:06.044</Data></Cell>
361
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2052812.7465977315</Data></Cell>
362
+ </Row>
363
+ <Row>
364
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">7603-01-21T18:14:49.151</Data></Cell>
365
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2083000.7602910995</Data></Cell>
366
+ </Row>
367
+ <Row>
368
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">7685-09-16T18:17:45.738</Data></Cell>
369
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2113189.7623349307</Data></Cell>
370
+ </Row>
371
+ <Row>
372
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">7768-05-12T18:29:59.700</Data></Cell>
373
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2143377.7708298611</Data></Cell>
374
+ </Row>
375
+ <Row>
376
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">7851-01-07T18:33:21.233</Data></Cell>
377
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2173566.773162419</Data></Cell>
378
+ </Row>
379
+ <Row>
380
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">7933-09-02T19:14:24.673</Data></Cell>
381
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2203754.8016744559</Data></Cell>
382
+ </Row>
383
+ <Row>
384
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">8016-04-27T19:17:12.816</Data></Cell>
385
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2233942.8036205554</Data></Cell>
386
+ </Row>
387
+ <Row>
388
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">8098-12-22T19:23:36.418</Data></Cell>
389
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2264131.8080603937</Data></Cell>
390
+ </Row>
391
+ <Row>
392
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">8181-08-17T19:46:25.908</Data></Cell>
393
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2294319.8239109721</Data></Cell>
394
+ </Row>
395
+ <Row>
396
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">8264-04-13T20:07:47.314</Data></Cell>
397
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2324508.8387420601</Data></Cell>
398
+ </Row>
399
+ <Row>
400
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">8346-12-08T20:31:37.603</Data></Cell>
401
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2354696.855296331</Data></Cell>
402
+ </Row>
403
+ <Row>
404
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">8429-08-03T20:39:57.770</Data></Cell>
405
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2384885.8610853008</Data></Cell>
406
+ </Row>
407
+ <Row>
408
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">8512-03-29T20:50:17.067</Data></Cell>
409
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2415073.8682530904</Data></Cell>
410
+ </Row>
411
+ <Row>
412
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">8594-11-22T21:02:57.827</Data></Cell>
413
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2445261.8770581828</Data></Cell>
414
+ </Row>
415
+ <Row>
416
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">8677-07-19T21:23:05.519</Data></Cell>
417
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2475450.8910360998</Data></Cell>
418
+ </Row>
419
+ <Row>
420
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">8760-03-14T21:34:49.572</Data></Cell>
421
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2505638.8991848612</Data></Cell>
422
+ </Row>
423
+ <Row>
424
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">8842-11-08T21:39:05.944</Data></Cell>
425
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2535827.9021521294</Data></Cell>
426
+ </Row>
427
+ <Row>
428
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">8925-07-04T21:39:18.426</Data></Cell>
429
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2566015.9022965971</Data></Cell>
430
+ </Row>
431
+ <Row>
432
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">9008-02-28T21:46:07.769</Data></Cell>
433
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2596203.9070343636</Data></Cell>
434
+ </Row>
435
+ <Row>
436
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">9090-10-24T21:57:55.662</Data></Cell>
437
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2626392.9152275696</Data></Cell>
438
+ </Row>
439
+ <Row>
440
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">9173-06-19T22:19:11.732</Data></Cell>
441
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2656580.9299968979</Data></Cell>
442
+ </Row>
443
+ <Row>
444
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">9256-02-13T22:23:51.376</Data></Cell>
445
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2686769.9332335186</Data></Cell>
446
+ </Row>
447
+ <Row>
448
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">9338-10-09T22:27:58.771</Data></Cell>
449
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2716957.9360968866</Data></Cell>
450
+ </Row>
451
+ <Row>
452
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">9421-06-05T22:43:30.392</Data></Cell>
453
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2747146.9468795368</Data></Cell>
454
+ </Row>
455
+ <Row>
456
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">9504-01-30T22:48:25.834</Data></Cell>
457
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2777334.9502990046</Data></Cell>
458
+ </Row>
459
+ <Row>
460
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">9586-09-24T22:53:51.727</Data></Cell>
461
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2807522.9540709145</Data></Cell>
462
+ </Row>
463
+ <Row>
464
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">9669-05-20T23:12:56.536</Data></Cell>
465
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2837711.9673210187</Data></Cell>
466
+ </Row>
467
+ <Row>
468
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">9752-01-14T23:15:54.109</Data></Cell>
469
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2867899.9693762613</Data></Cell>
470
+ </Row>
471
+ <Row>
472
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">9834-09-10T23:17:12.632</Data></Cell>
473
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2898088.9702850925</Data></Cell>
474
+ </Row>
475
+ <Row>
476
+ <Cell ss:StyleID="s21"><Data ss:Type="DateTime">9999-12-31T23:59:59.000</Data></Cell>
477
+ <Cell ss:StyleID="s22" ss:Formula="=RC[-1]"><Data ss:Type="Number">2958465.999988426</Data></Cell>
478
+ </Row>
479
+
480
+ __DATA_END__
481
+
482
+ end
483
+
484
+ end