creeker 2.1.2 → 2.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.DS_Store +0 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/creeker.gemspec +31 -0
- data/lib/.DS_Store +0 -0
- data/lib/creeker/version.rb +1 -1
- data/spec/drawing_spec.rb +52 -0
- data/spec/fixtures/invalid.xls +0 -0
- data/spec/fixtures/sample-as-zip.zip +0 -0
- data/spec/fixtures/sample-with-images.xlsx +0 -0
- data/spec/fixtures/sample.xlsx +0 -0
- data/spec/fixtures/sheets/sheet1.xml +459 -0
- data/spec/fixtures/sst.xml +78 -0
- data/spec/fixtures/styles/first.xml +208 -0
- data/spec/fixtures/temp_string_io_file_path_with_no_extension +0 -0
- data/spec/shared_string_spec.rb +18 -0
- data/spec/sheet_spec.rb +85 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/styles/converter_spec.rb +16 -0
- data/spec/styles/style_types_spec.rb +15 -0
- data/spec/test_spec.rb +87 -0
- metadata +38 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 90abfebb786387b1b3263bd1c3f42f6008838321
|
4
|
+
data.tar.gz: b5cebc6dc4073c4106e7dd6199b2437ed21aee25
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 22b01bbc8bea7cfa6c959dcf40183eea7ac5a2b92a9386f8f19ec211394cd55c693a094aafd2a0f756ac202a9d0482e78d27cf82d42ed5a0a308d0fc55f71543
|
7
|
+
data.tar.gz: 88ec7a6283451313aebc0a033dadfade51d3d1f91bae73417ddfafb8bf552cb70f31701de6da46dede61b6800242348572b82d08f9209acd25b51b7acfb82fbd
|
data/.DS_Store
ADDED
Binary file
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/creeker.gemspec
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'creeker/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "creeker"
|
8
|
+
spec.version = Creeker::VERSION
|
9
|
+
spec.authors = ["huntcode"]
|
10
|
+
spec.email = ["vivektripathi_cse@hotmail.com"]
|
11
|
+
spec.description = %q{A Ruby gem that streams and parses large Excel(xlsx and xlsm) files fast and efficiently. Based on Creek gem, but with Multi-threading and Garbage Collection}
|
12
|
+
spec.summary = %q{A Ruby gem for parsing large Excel(xlsx and xlsm) files.}
|
13
|
+
spec.homepage = "https://github.com/vivektripathihunt/creeker"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.required_ruby_version = '>= 2.0.0'
|
22
|
+
|
23
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
24
|
+
spec.add_development_dependency "rake"
|
25
|
+
spec.add_development_dependency 'rspec', '~> 3.6.0'
|
26
|
+
spec.add_development_dependency 'pry'
|
27
|
+
|
28
|
+
spec.add_dependency 'nokogiri', '>= 1.7.0'
|
29
|
+
spec.add_dependency 'rubyzip', '>= 1.0.0'
|
30
|
+
spec.add_dependency 'httparty', '~> 0.15.5'
|
31
|
+
end
|
data/lib/.DS_Store
ADDED
Binary file
|
data/lib/creeker/version.rb
CHANGED
@@ -0,0 +1,52 @@
|
|
1
|
+
require './spec/spec_helper'
|
2
|
+
|
3
|
+
describe 'drawing' do
|
4
|
+
let(:book) { Creeker::Book.new('spec/fixtures/sample-with-images.xlsx') }
|
5
|
+
let(:book_no_images) { Creeker::Book.new('spec/fixtures/sample.xlsx') }
|
6
|
+
let(:drawingfile) { 'xl/drawings/drawing1.xml' }
|
7
|
+
let(:drawing) { Creeker::Drawing.new(book, drawingfile) }
|
8
|
+
let(:drawing_without_images) { Creeker::Drawing.new(book_no_images, drawingfile) }
|
9
|
+
|
10
|
+
describe '#has_images?' do
|
11
|
+
it 'has' do
|
12
|
+
expect(drawing.has_images?).to eq(true)
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'does not have' do
|
16
|
+
expect(drawing_without_images.has_images?).to eq(false)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#images_at' do
|
21
|
+
it 'returns images pathnames at cell' do
|
22
|
+
image = drawing.images_at('A2')[0]
|
23
|
+
expect(image.class).to eq(Pathname)
|
24
|
+
expect(image.exist?).to eq(true)
|
25
|
+
expect(image.to_path).to match(/.+creeker__drawing.+\.jpeg$/)
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'when no images in cell' do
|
29
|
+
it 'returns nil' do
|
30
|
+
images = drawing.images_at('B2')
|
31
|
+
expect(images).to eq(nil)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'when more images in one cell' do
|
36
|
+
it 'returns all images at cell' do
|
37
|
+
images = drawing.images_at('A10')
|
38
|
+
expect(images.size).to eq(2)
|
39
|
+
expect(images.all?(&:exist?)).to eq(true)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'when same image across multiple cells' do
|
44
|
+
it 'returns same image for each cell' do
|
45
|
+
image1 = drawing.images_at('A4')[0]
|
46
|
+
image2 = drawing.images_at('A5')[0]
|
47
|
+
expect(image1.class).to eq(Pathname)
|
48
|
+
expect(image1).to eq(image2)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
File without changes
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,459 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
2
|
+
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
|
3
|
+
<sheetPr filterMode="false">
|
4
|
+
<pageSetUpPr fitToPage="false" />
|
5
|
+
</sheetPr>
|
6
|
+
<dimension ref="A1:FN2755" />
|
7
|
+
<sheetViews>
|
8
|
+
<sheetView windowProtection="true" showFormulas="false" showGridLines="true" showRowColHeaders="true" showZeros="true" rightToLeft="false" tabSelected="true" showOutlineSymbols="true" defaultGridColor="true" view="normal" topLeftCell="A1" colorId="64" zoomScale="75" zoomScaleNormal="75" zoomScalePageLayoutView="100" workbookViewId="0">
|
9
|
+
<pane xSplit="0" ySplit="1" topLeftCell="L2" activePane="bottomLeft" state="frozen" />
|
10
|
+
<selection pane="topLeft" activeCell="A1" activeCellId="0" sqref="A1" />
|
11
|
+
<selection pane="bottomLeft" activeCell="A2" activeCellId="0" sqref="A2" />
|
12
|
+
</sheetView>
|
13
|
+
</sheetViews>
|
14
|
+
<sheetFormatPr defaultRowHeight="13.8"></sheetFormatPr>
|
15
|
+
<cols>
|
16
|
+
<col collapsed="false" hidden="false" max="1" min="1" style="0" width="48.5023255813954" />
|
17
|
+
<col collapsed="false" hidden="false" max="2" min="2" style="0" width="11.6651162790698" />
|
18
|
+
<col collapsed="false" hidden="false" max="3" min="3" style="0" width="15.6604651162791" />
|
19
|
+
<col collapsed="false" hidden="false" max="5" min="4" style="0" width="11.6651162790698" />
|
20
|
+
<col collapsed="false" hidden="false" max="6" min="6" style="0" width="12.5023255813953" />
|
21
|
+
<col collapsed="false" hidden="false" max="9" min="7" style="0" width="11.6651162790698" />
|
22
|
+
<col collapsed="false" hidden="false" max="10" min="10" style="0" width="15.8325581395349" />
|
23
|
+
<col collapsed="false" hidden="false" max="11" min="11" style="0" width="17.6651162790698" />
|
24
|
+
<col collapsed="false" hidden="false" max="42" min="12" style="0" width="11.3302325581395" />
|
25
|
+
<col collapsed="false" hidden="false" max="47" min="43" style="0" width="13.0046511627907" />
|
26
|
+
<col collapsed="false" hidden="false" max="49" min="48" style="0" width="5.9953488372093" />
|
27
|
+
<col collapsed="false" hidden="false" max="50" min="50" style="0" width="4.83255813953488" />
|
28
|
+
<col collapsed="false" hidden="false" max="81" min="51" style="0" width="11.3302325581395" />
|
29
|
+
<col collapsed="false" hidden="false" max="86" min="82" style="0" width="13.0046511627907" />
|
30
|
+
<col collapsed="false" hidden="false" max="1025" min="87" style="0" width="10.8279069767442" />
|
31
|
+
</cols>
|
32
|
+
<sheetData>
|
33
|
+
<row r="1" s="2" customFormat="true" ht="39.75" hidden="false" customHeight="true" outlineLevel="0" collapsed="false">
|
34
|
+
<c r="A1" s="1" t="s">
|
35
|
+
<v>0</v>
|
36
|
+
</c>
|
37
|
+
<c r="B1" s="1" t="s">
|
38
|
+
<v>1</v>
|
39
|
+
</c>
|
40
|
+
<c r="C1" s="1" t="s">
|
41
|
+
<v>2</v>
|
42
|
+
</c>
|
43
|
+
<c r="D1" s="1" t="s">
|
44
|
+
<v>1</v>
|
45
|
+
</c>
|
46
|
+
<c r="E1" s="1" t="s">
|
47
|
+
<v>2</v>
|
48
|
+
</c>
|
49
|
+
<c r="F1" s="1" t="s">
|
50
|
+
<v>1</v>
|
51
|
+
</c>
|
52
|
+
<c r="G1" s="1" t="s">
|
53
|
+
<v>2</v>
|
54
|
+
</c>
|
55
|
+
<c r="H1" s="1" t="s">
|
56
|
+
<v>1</v>
|
57
|
+
</c>
|
58
|
+
<c r="I1" s="1" t="s">
|
59
|
+
<v>2</v>
|
60
|
+
</c>
|
61
|
+
<c r="L1" s="3" t="n">
|
62
|
+
<v>41275</v>
|
63
|
+
</c>
|
64
|
+
<c r="M1" s="3" t="n">
|
65
|
+
<v>41306</v>
|
66
|
+
</c>
|
67
|
+
<c r="N1" s="3" t="n">
|
68
|
+
<v>41334</v>
|
69
|
+
</c>
|
70
|
+
<c r="O1" s="3" t="n">
|
71
|
+
<v>41365</v>
|
72
|
+
</c>
|
73
|
+
<c r="P1" s="3" t="n">
|
74
|
+
<v>41395</v>
|
75
|
+
</c>
|
76
|
+
<c r="Q1" s="3" t="n">
|
77
|
+
<v>41426</v>
|
78
|
+
</c>
|
79
|
+
<c r="R1" s="3" t="n">
|
80
|
+
<v>41456</v>
|
81
|
+
</c>
|
82
|
+
<c r="S1" s="3" t="n">
|
83
|
+
<v>41487</v>
|
84
|
+
</c>
|
85
|
+
<c r="T1" s="3" t="n">
|
86
|
+
<v>41518</v>
|
87
|
+
</c>
|
88
|
+
<c r="U1" s="3" t="n">
|
89
|
+
<v>41548</v>
|
90
|
+
</c>
|
91
|
+
<c r="V1" s="3" t="n">
|
92
|
+
<v>41579</v>
|
93
|
+
</c>
|
94
|
+
<c r="W1" s="3" t="n">
|
95
|
+
<v>41609</v>
|
96
|
+
</c>
|
97
|
+
<c r="X1" s="3" t="n">
|
98
|
+
<v>41640</v>
|
99
|
+
</c>
|
100
|
+
<c r="Y1" s="3" t="n">
|
101
|
+
<v>41671</v>
|
102
|
+
</c>
|
103
|
+
<c r="Z1" s="3" t="n">
|
104
|
+
<v>41699</v>
|
105
|
+
</c>
|
106
|
+
<c r="AA1" s="3" t="n">
|
107
|
+
<v>41730</v>
|
108
|
+
</c>
|
109
|
+
<c r="AB1" s="3" t="n">
|
110
|
+
<v>41760</v>
|
111
|
+
</c>
|
112
|
+
<c r="AC1" s="3" t="n">
|
113
|
+
<v>41791</v>
|
114
|
+
</c>
|
115
|
+
<c r="AD1" s="3" t="n">
|
116
|
+
<v>41821</v>
|
117
|
+
</c>
|
118
|
+
<c r="AE1" s="3" t="n">
|
119
|
+
<v>41852</v>
|
120
|
+
</c>
|
121
|
+
<c r="AF1" s="3" t="n">
|
122
|
+
<v>41883</v>
|
123
|
+
</c>
|
124
|
+
<c r="AG1" s="3" t="n">
|
125
|
+
<v>41913</v>
|
126
|
+
</c>
|
127
|
+
<c r="AH1" s="3" t="n">
|
128
|
+
<v>41944</v>
|
129
|
+
</c>
|
130
|
+
<c r="AI1" s="3" t="n">
|
131
|
+
<v>41974</v>
|
132
|
+
</c>
|
133
|
+
<c r="AJ1" s="3" t="n">
|
134
|
+
<v>42005</v>
|
135
|
+
</c>
|
136
|
+
<c r="AK1" s="3" t="n">
|
137
|
+
<v>42036</v>
|
138
|
+
</c>
|
139
|
+
<c r="AL1" s="3" t="n">
|
140
|
+
<v>42064</v>
|
141
|
+
</c>
|
142
|
+
<c r="AM1" s="3" t="n">
|
143
|
+
<v>42095</v>
|
144
|
+
</c>
|
145
|
+
<c r="AN1" s="3" t="n">
|
146
|
+
<v>42125</v>
|
147
|
+
</c>
|
148
|
+
<c r="AO1" s="3" t="n">
|
149
|
+
<v>42156</v>
|
150
|
+
</c>
|
151
|
+
<c r="AP1" s="3" />
|
152
|
+
<c r="AQ1" s="3" />
|
153
|
+
<c r="AR1" s="3" />
|
154
|
+
<c r="AS1" s="3" />
|
155
|
+
<c r="AT1" s="3" />
|
156
|
+
<c r="AU1" s="3" />
|
157
|
+
<c r="AY1" s="3" />
|
158
|
+
<c r="AZ1" s="3" />
|
159
|
+
<c r="BA1" s="3" />
|
160
|
+
<c r="BB1" s="3" />
|
161
|
+
<c r="BC1" s="3" />
|
162
|
+
<c r="BD1" s="3" />
|
163
|
+
<c r="BE1" s="3" />
|
164
|
+
<c r="BF1" s="3" />
|
165
|
+
<c r="BG1" s="3" />
|
166
|
+
<c r="BH1" s="3" />
|
167
|
+
<c r="BI1" s="3" />
|
168
|
+
<c r="BJ1" s="3" />
|
169
|
+
<c r="BK1" s="3" />
|
170
|
+
<c r="BL1" s="3" />
|
171
|
+
<c r="BM1" s="3" />
|
172
|
+
<c r="BN1" s="3" />
|
173
|
+
<c r="BO1" s="3" />
|
174
|
+
<c r="BP1" s="3" />
|
175
|
+
<c r="BQ1" s="3" />
|
176
|
+
<c r="BR1" s="3" />
|
177
|
+
<c r="BS1" s="3" />
|
178
|
+
<c r="BT1" s="3" />
|
179
|
+
<c r="BU1" s="3" />
|
180
|
+
<c r="BV1" s="3" />
|
181
|
+
<c r="BW1" s="3" />
|
182
|
+
<c r="BX1" s="3" />
|
183
|
+
<c r="BY1" s="3" />
|
184
|
+
<c r="BZ1" s="3" />
|
185
|
+
<c r="CA1" s="3" />
|
186
|
+
<c r="CB1" s="3" />
|
187
|
+
<c r="CC1" s="3" />
|
188
|
+
<c r="CD1" s="3" />
|
189
|
+
<c r="CE1" s="3" />
|
190
|
+
<c r="CF1" s="3" />
|
191
|
+
<c r="CG1" s="3" />
|
192
|
+
<c r="CH1" s="3" />
|
193
|
+
<c r="CI1" s="3" />
|
194
|
+
<c r="CJ1" s="3" />
|
195
|
+
<c r="CK1" s="3" />
|
196
|
+
<c r="CL1" s="3" />
|
197
|
+
<c r="CM1" s="3" />
|
198
|
+
<c r="CN1" s="3" />
|
199
|
+
<c r="CO1" s="3" />
|
200
|
+
<c r="CP1" s="3" />
|
201
|
+
<c r="CQ1" s="3" />
|
202
|
+
<c r="CR1" s="3" />
|
203
|
+
<c r="CS1" s="3" />
|
204
|
+
<c r="CT1" s="3" />
|
205
|
+
<c r="CU1" s="3" />
|
206
|
+
<c r="CV1" s="3" />
|
207
|
+
<c r="CW1" s="3" />
|
208
|
+
<c r="CX1" s="3" />
|
209
|
+
<c r="CY1" s="3" />
|
210
|
+
<c r="CZ1" s="3" />
|
211
|
+
<c r="DA1" s="3" />
|
212
|
+
<c r="DB1" s="3" />
|
213
|
+
<c r="DC1" s="3" />
|
214
|
+
<c r="DD1" s="3" />
|
215
|
+
<c r="DE1" s="3" />
|
216
|
+
<c r="DF1" s="3" />
|
217
|
+
<c r="DG1" s="3" />
|
218
|
+
<c r="DH1" s="3" />
|
219
|
+
<c r="DI1" s="3" />
|
220
|
+
<c r="DJ1" s="3" />
|
221
|
+
<c r="DK1" s="3" />
|
222
|
+
<c r="DL1" s="3" />
|
223
|
+
<c r="DM1" s="3" />
|
224
|
+
<c r="DN1" s="3" />
|
225
|
+
<c r="DO1" s="3" />
|
226
|
+
<c r="DP1" s="3" />
|
227
|
+
<c r="DQ1" s="3" />
|
228
|
+
<c r="DR1" s="3" />
|
229
|
+
<c r="DS1" s="3" />
|
230
|
+
<c r="DT1" s="3" />
|
231
|
+
<c r="DU1" s="3" />
|
232
|
+
<c r="DV1" s="3" />
|
233
|
+
<c r="DW1" s="3" />
|
234
|
+
<c r="DX1" s="3" />
|
235
|
+
<c r="DY1" s="3" />
|
236
|
+
<c r="DZ1" s="3" />
|
237
|
+
<c r="EA1" s="3" />
|
238
|
+
<c r="EB1" s="3" />
|
239
|
+
<c r="EC1" s="3" />
|
240
|
+
<c r="ED1" s="3" />
|
241
|
+
<c r="EE1" s="3" />
|
242
|
+
<c r="EF1" s="3" />
|
243
|
+
<c r="EG1" s="3" />
|
244
|
+
<c r="EH1" s="3" />
|
245
|
+
<c r="EI1" s="3" />
|
246
|
+
<c r="EJ1" s="3" />
|
247
|
+
<c r="EK1" s="3" />
|
248
|
+
<c r="EL1" s="3" />
|
249
|
+
<c r="EM1" s="3" />
|
250
|
+
<c r="EN1" s="3" />
|
251
|
+
<c r="EO1" s="3" />
|
252
|
+
<c r="EP1" s="3" />
|
253
|
+
<c r="EQ1" s="3" />
|
254
|
+
<c r="ER1" s="3" />
|
255
|
+
<c r="ES1" s="3" />
|
256
|
+
<c r="ET1" s="3" />
|
257
|
+
<c r="EU1" s="3" />
|
258
|
+
<c r="EV1" s="3" />
|
259
|
+
<c r="EW1" s="3" />
|
260
|
+
<c r="EX1" s="3" />
|
261
|
+
<c r="EY1" s="3" />
|
262
|
+
<c r="EZ1" s="3" />
|
263
|
+
<c r="FA1" s="3" />
|
264
|
+
<c r="FB1" s="3" />
|
265
|
+
<c r="FC1" s="3" />
|
266
|
+
<c r="FD1" s="3" />
|
267
|
+
<c r="FE1" s="3" />
|
268
|
+
<c r="FF1" s="3" />
|
269
|
+
<c r="FG1" s="3" />
|
270
|
+
<c r="FH1" s="3" />
|
271
|
+
<c r="FI1" s="3" />
|
272
|
+
<c r="FJ1" s="3" />
|
273
|
+
<c r="FK1" s="3" />
|
274
|
+
<c r="FL1" s="3" />
|
275
|
+
<c r="FM1" s="3" />
|
276
|
+
<c r="FN1" s="3" />
|
277
|
+
</row>
|
278
|
+
<row r="2" s="7" customFormat="true" ht="13.9" hidden="false" customHeight="false" outlineLevel="0" collapsed="false">
|
279
|
+
<c r="A2" s="4" t="s">
|
280
|
+
<v>3</v>
|
281
|
+
</c>
|
282
|
+
<c r="B2" s="5" t="s">
|
283
|
+
<v>4</v>
|
284
|
+
</c>
|
285
|
+
<c r="C2" s="5" t="s">
|
286
|
+
<v>5</v>
|
287
|
+
</c>
|
288
|
+
<c r="D2" s="5" t="s">
|
289
|
+
<v>6</v>
|
290
|
+
</c>
|
291
|
+
<c r="E2" s="5" t="s">
|
292
|
+
<v>7</v>
|
293
|
+
</c>
|
294
|
+
<c r="F2" s="5" t="s">
|
295
|
+
<v>8</v>
|
296
|
+
</c>
|
297
|
+
<c r="G2" s="5" t="s">
|
298
|
+
<v>9</v>
|
299
|
+
</c>
|
300
|
+
<c r="H2" s="5" t="s">
|
301
|
+
<v>10</v>
|
302
|
+
</c>
|
303
|
+
<c r="I2" s="5" t="s">
|
304
|
+
<v>11</v>
|
305
|
+
</c>
|
306
|
+
<c r="J2" s="0" />
|
307
|
+
<c r="K2" s="0" />
|
308
|
+
<c r="L2" s="0" t="n">
|
309
|
+
<v>31.27</v>
|
310
|
+
</c>
|
311
|
+
<c r="M2" s="0" t="n">
|
312
|
+
<v>46.05</v>
|
313
|
+
</c>
|
314
|
+
<c r="N2" s="0" t="n">
|
315
|
+
<v>29</v>
|
316
|
+
</c>
|
317
|
+
<c r="O2" s="0" t="n">
|
318
|
+
<v>26.13</v>
|
319
|
+
</c>
|
320
|
+
<c r="P2" s="0" t="n">
|
321
|
+
<v>11.64</v>
|
322
|
+
</c>
|
323
|
+
<c r="Q2" s="0" t="n">
|
324
|
+
<v>34.31</v>
|
325
|
+
</c>
|
326
|
+
<c r="R2" s="0" t="n">
|
327
|
+
<v>25.78</v>
|
328
|
+
</c>
|
329
|
+
<c r="S2" s="0" t="n">
|
330
|
+
<v>33.49</v>
|
331
|
+
</c>
|
332
|
+
<c r="T2" s="0" t="n">
|
333
|
+
<v>28.2</v>
|
334
|
+
</c>
|
335
|
+
<c r="U2" s="0" t="n">
|
336
|
+
<v>46.54</v>
|
337
|
+
</c>
|
338
|
+
<c r="V2" s="0" t="n">
|
339
|
+
<v>12.88</v>
|
340
|
+
</c>
|
341
|
+
<c r="W2" s="0" t="n">
|
342
|
+
<v>38.69</v>
|
343
|
+
</c>
|
344
|
+
<c r="X2" s="0" t="n">
|
345
|
+
<v>36.97</v>
|
346
|
+
</c>
|
347
|
+
<c r="Y2" s="0" t="n">
|
348
|
+
<v>42.26</v>
|
349
|
+
</c>
|
350
|
+
<c r="Z2" s="0" t="n">
|
351
|
+
<v>39.45</v>
|
352
|
+
</c>
|
353
|
+
<c r="AA2" s="0" t="n">
|
354
|
+
<v>29.01</v>
|
355
|
+
</c>
|
356
|
+
<c r="AB2" s="0" t="n">
|
357
|
+
<v>20.2</v>
|
358
|
+
</c>
|
359
|
+
<c r="AC2" s="0" t="n">
|
360
|
+
<v>46.42</v>
|
361
|
+
</c>
|
362
|
+
<c r="AD2" s="0" t="n">
|
363
|
+
<v>22.45</v>
|
364
|
+
</c>
|
365
|
+
<c r="AE2" s="0" t="n">
|
366
|
+
<v>14.35</v>
|
367
|
+
</c>
|
368
|
+
<c r="AF2" s="0" t="n">
|
369
|
+
<v>39.36</v>
|
370
|
+
</c>
|
371
|
+
<c r="AG2" s="0" t="n">
|
372
|
+
<v>21.28</v>
|
373
|
+
</c>
|
374
|
+
<c r="AH2" s="0" t="n">
|
375
|
+
<v>14.19</v>
|
376
|
+
</c>
|
377
|
+
<c r="AI2" s="0" t="n">
|
378
|
+
<v>34.57</v>
|
379
|
+
</c>
|
380
|
+
<c r="AJ2" s="6" t="n">
|
381
|
+
<v>11.64</v>
|
382
|
+
</c>
|
383
|
+
<c r="AK2" s="6" t="n">
|
384
|
+
<v>34.31</v>
|
385
|
+
</c>
|
386
|
+
<c r="AL2" s="6" t="n">
|
387
|
+
<v>11.64</v>
|
388
|
+
</c>
|
389
|
+
<c r="AM2" s="6" t="n">
|
390
|
+
<v>11.64</v>
|
391
|
+
</c>
|
392
|
+
<c r="AN2" s="6" t="n">
|
393
|
+
<v>34.31</v>
|
394
|
+
</c>
|
395
|
+
<c r="AO2" s="6" t="n">
|
396
|
+
<v>25.78</v>
|
397
|
+
</c>
|
398
|
+
<c r="AP2" s="6" />
|
399
|
+
<c r="AQ2" s="0" />
|
400
|
+
<c r="AR2" s="0" />
|
401
|
+
<c r="AS2" s="0" />
|
402
|
+
<c r="AT2" s="0" />
|
403
|
+
<c r="AU2" s="0" />
|
404
|
+
<c r="AV2" s="0" />
|
405
|
+
<c r="AW2" s="0" />
|
406
|
+
<c r="AX2" s="0" />
|
407
|
+
<c r="AY2" s="0" />
|
408
|
+
<c r="AZ2" s="0" />
|
409
|
+
<c r="BA2" s="0" />
|
410
|
+
<c r="BB2" s="0" />
|
411
|
+
<c r="BC2" s="0" />
|
412
|
+
<c r="BD2" s="0" />
|
413
|
+
<c r="BE2" s="0" />
|
414
|
+
<c r="BF2" s="0" />
|
415
|
+
<c r="BG2" s="0" />
|
416
|
+
<c r="BH2" s="0" />
|
417
|
+
<c r="BI2" s="0" />
|
418
|
+
<c r="BJ2" s="0" />
|
419
|
+
<c r="BK2" s="0" />
|
420
|
+
<c r="BL2" s="0" />
|
421
|
+
<c r="BM2" s="0" />
|
422
|
+
<c r="BN2" s="0" />
|
423
|
+
<c r="BO2" s="0" />
|
424
|
+
<c r="BP2" s="0" />
|
425
|
+
<c r="BQ2" s="0" />
|
426
|
+
<c r="BR2" s="0" />
|
427
|
+
<c r="BS2" s="0" />
|
428
|
+
<c r="BT2" s="0" />
|
429
|
+
<c r="BU2" s="0" />
|
430
|
+
<c r="BV2" s="0" />
|
431
|
+
<c r="BW2" s="6" />
|
432
|
+
<c r="BX2" s="6" />
|
433
|
+
<c r="BY2" s="6" />
|
434
|
+
<c r="BZ2" s="6" />
|
435
|
+
<c r="CA2" s="6" />
|
436
|
+
<c r="CB2" s="6" />
|
437
|
+
<c r="CC2" s="6" />
|
438
|
+
<c r="CD2" s="0" />
|
439
|
+
</row>
|
440
|
+
<row r="2755" customFormat="false" ht="13" hidden="false" customHeight="true" outlineLevel="0" collapsed="false"></row>
|
441
|
+
<row r="2756" customFormat="false" ht="13" hidden="false" customHeight="true" outlineLevel="0" collapsed="false"></row>
|
442
|
+
<row r="2757" customFormat="false" ht="13" hidden="false" customHeight="true" outlineLevel="0" collapsed="false"></row>
|
443
|
+
<row r="2758" customFormat="false" ht="13" hidden="false" customHeight="true" outlineLevel="0" collapsed="false"></row>
|
444
|
+
<row r="2759" customFormat="false" ht="13" hidden="false" customHeight="true" outlineLevel="0" collapsed="false"></row>
|
445
|
+
<row r="2760" customFormat="false" ht="13" hidden="false" customHeight="true" outlineLevel="0" collapsed="false"></row>
|
446
|
+
<row r="2761" customFormat="false" ht="13" hidden="false" customHeight="true" outlineLevel="0" collapsed="false"></row>
|
447
|
+
<row r="2762" customFormat="false" ht="13" hidden="false" customHeight="true" outlineLevel="0" collapsed="false"></row>
|
448
|
+
<row r="2763" customFormat="false" ht="13" hidden="false" customHeight="true" outlineLevel="0" collapsed="false"></row>
|
449
|
+
<row r="2764" customFormat="false" ht="13" hidden="false" customHeight="true" outlineLevel="0" collapsed="false"></row>
|
450
|
+
<row r="2765" customFormat="false" ht="13" hidden="false" customHeight="true" outlineLevel="0" collapsed="false"></row>
|
451
|
+
</sheetData>
|
452
|
+
<printOptions headings="false" gridLines="false" gridLinesSet="true" horizontalCentered="false" verticalCentered="false" />
|
453
|
+
<pageMargins left="0.7" right="0.7" top="0.7875" bottom="0.7875" header="0.511805555555555" footer="0.511805555555555" />
|
454
|
+
<pageSetup paperSize="9" scale="100" firstPageNumber="0" fitToWidth="1" fitToHeight="1" pageOrder="downThenOver" orientation="portrait" usePrinterDefaults="false" blackAndWhite="false" draft="false" cellComments="none" useFirstPageNumber="false" horizontalDpi="300" verticalDpi="300" copies="1" />
|
455
|
+
<headerFooter differentFirst="false" differentOddEven="false">
|
456
|
+
<oddHeader></oddHeader>
|
457
|
+
<oddFooter></oddFooter>
|
458
|
+
</headerFooter>
|
459
|
+
</worksheet>
|
@@ -0,0 +1,78 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
2
|
+
<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="6" uniqueCount="5">
|
3
|
+
<si>
|
4
|
+
<t>Cell A1</t>
|
5
|
+
</si>
|
6
|
+
<si>
|
7
|
+
<t>Cell B1</t>
|
8
|
+
</si>
|
9
|
+
<si>
|
10
|
+
<t>My Cell</t>
|
11
|
+
</si>
|
12
|
+
<si>
|
13
|
+
<r>
|
14
|
+
<rPr>
|
15
|
+
<sz val="11"/>
|
16
|
+
<color rgb="FFFF0000"/>
|
17
|
+
<rFont val="Calibri"/>
|
18
|
+
<family val="2"/>
|
19
|
+
<scheme val="minor"/>
|
20
|
+
</rPr>
|
21
|
+
<t>Cell</t>
|
22
|
+
</r>
|
23
|
+
<r>
|
24
|
+
<rPr>
|
25
|
+
<sz val="11"/>
|
26
|
+
<color theme="1"/>
|
27
|
+
<rFont val="Calibri"/>
|
28
|
+
<family val="2"/>
|
29
|
+
<scheme val="minor"/>
|
30
|
+
</rPr>
|
31
|
+
<t xml:space="preserve"> </t>
|
32
|
+
</r>
|
33
|
+
<r>
|
34
|
+
<rPr>
|
35
|
+
<b/>
|
36
|
+
<sz val="11"/>
|
37
|
+
<color theme="1"/>
|
38
|
+
<rFont val="Calibri"/>
|
39
|
+
<family val="2"/>
|
40
|
+
<scheme val="minor"/>
|
41
|
+
</rPr>
|
42
|
+
<t>A2</t>
|
43
|
+
</r>
|
44
|
+
</si>
|
45
|
+
<si>
|
46
|
+
<r>
|
47
|
+
<rPr>
|
48
|
+
<sz val="11"/>
|
49
|
+
<color rgb="FF00B0F0"/>
|
50
|
+
<rFont val="Calibri"/>
|
51
|
+
<family val="2"/>
|
52
|
+
<scheme val="minor"/>
|
53
|
+
</rPr>
|
54
|
+
<t>Cell</t>
|
55
|
+
</r>
|
56
|
+
<r>
|
57
|
+
<rPr>
|
58
|
+
<sz val="11"/>
|
59
|
+
<color theme="1"/>
|
60
|
+
<rFont val="Calibri"/>
|
61
|
+
<family val="2"/>
|
62
|
+
<scheme val="minor"/>
|
63
|
+
</rPr>
|
64
|
+
<t xml:space="preserve"> </t>
|
65
|
+
</r>
|
66
|
+
<r>
|
67
|
+
<rPr>
|
68
|
+
<i/>
|
69
|
+
<sz val="11"/>
|
70
|
+
<color theme="1"/>
|
71
|
+
<rFont val="Calibri"/>
|
72
|
+
<family val="2"/>
|
73
|
+
<scheme val="minor"/>
|
74
|
+
</rPr>
|
75
|
+
<t>B2</t>
|
76
|
+
</r>
|
77
|
+
</si>
|
78
|
+
</sst>
|
@@ -0,0 +1,208 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
2
|
+
<styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
|
3
|
+
<numFmts count="2">
|
4
|
+
<numFmt numFmtId="164" formatCode="GENERAL" />
|
5
|
+
<numFmt numFmtId="165" formatCode="MM/DD/YYYY" />
|
6
|
+
</numFmts>
|
7
|
+
<fonts count="6">
|
8
|
+
<font>
|
9
|
+
<sz val="11" />
|
10
|
+
<color rgb="FF000000" />
|
11
|
+
<name val="Calibri" />
|
12
|
+
<family val="2" />
|
13
|
+
<charset val="1" />
|
14
|
+
</font>
|
15
|
+
<font>
|
16
|
+
<sz val="10" />
|
17
|
+
<name val="Arial" />
|
18
|
+
<family val="0" />
|
19
|
+
</font>
|
20
|
+
<font>
|
21
|
+
<sz val="10" />
|
22
|
+
<name val="Arial" />
|
23
|
+
<family val="0" />
|
24
|
+
</font>
|
25
|
+
<font>
|
26
|
+
<sz val="10" />
|
27
|
+
<name val="Arial" />
|
28
|
+
<family val="0" />
|
29
|
+
</font>
|
30
|
+
<font><b val="true" />
|
31
|
+
<sz val="12" />
|
32
|
+
<color rgb="FFFFFFFF" />
|
33
|
+
<name val="Calibri" />
|
34
|
+
<family val="2" />
|
35
|
+
<charset val="1" />
|
36
|
+
</font>
|
37
|
+
<font><b val="true" />
|
38
|
+
<sz val="11" />
|
39
|
+
<color rgb="FF000000" />
|
40
|
+
<name val="Calibri" />
|
41
|
+
<family val="2" />
|
42
|
+
<charset val="1" />
|
43
|
+
</font>
|
44
|
+
</fonts>
|
45
|
+
<fills count="4">
|
46
|
+
<fill>
|
47
|
+
<patternFill patternType="none" />
|
48
|
+
</fill>
|
49
|
+
<fill>
|
50
|
+
<patternFill patternType="gray125" />
|
51
|
+
</fill>
|
52
|
+
<fill>
|
53
|
+
<patternFill patternType="solid">
|
54
|
+
<fgColor rgb="FF090948" />
|
55
|
+
<bgColor rgb="FF000080" />
|
56
|
+
</patternFill>
|
57
|
+
</fill>
|
58
|
+
<fill>
|
59
|
+
<patternFill patternType="solid">
|
60
|
+
<fgColor rgb="FFDCE6F2" />
|
61
|
+
<bgColor rgb="FFCCFFFF" />
|
62
|
+
</patternFill>
|
63
|
+
</fill>
|
64
|
+
</fills>
|
65
|
+
<borders count="2">
|
66
|
+
<border diagonalUp="false" diagonalDown="false">
|
67
|
+
<left/>
|
68
|
+
<right/>
|
69
|
+
<top/>
|
70
|
+
<bottom/>
|
71
|
+
<diagonal/>
|
72
|
+
</border>
|
73
|
+
<border diagonalUp="false" diagonalDown="false">
|
74
|
+
<left style="thin" />
|
75
|
+
<right style="thin" />
|
76
|
+
<top style="thin" />
|
77
|
+
<bottom style="thin" />
|
78
|
+
<diagonal/>
|
79
|
+
</border>
|
80
|
+
</borders>
|
81
|
+
<cellStyleXfs count="20">
|
82
|
+
<xf numFmtId="164" fontId="0" fillId="0" borderId="0" applyFont="true" applyBorder="true" applyAlignment="true" applyProtection="true">
|
83
|
+
<alignment horizontal="general" vertical="bottom" textRotation="0" wrapText="false" indent="0" shrinkToFit="false" />
|
84
|
+
<protection locked="true" hidden="false" />
|
85
|
+
</xf>
|
86
|
+
<xf numFmtId="0" fontId="1" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
|
87
|
+
<xf numFmtId="0" fontId="1" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
|
88
|
+
<xf numFmtId="0" fontId="2" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
|
89
|
+
<xf numFmtId="0" fontId="2" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
|
90
|
+
<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
|
91
|
+
<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
|
92
|
+
<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
|
93
|
+
<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
|
94
|
+
<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
|
95
|
+
<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
|
96
|
+
<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
|
97
|
+
<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
|
98
|
+
<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
|
99
|
+
<xf numFmtId="0" fontId="0" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
|
100
|
+
<xf numFmtId="43" fontId="1" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
|
101
|
+
<xf numFmtId="41" fontId="1" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
|
102
|
+
<xf numFmtId="44" fontId="1" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
|
103
|
+
<xf numFmtId="42" fontId="1" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
|
104
|
+
<xf numFmtId="9" fontId="1" fillId="0" borderId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false"></xf>
|
105
|
+
</cellStyleXfs>
|
106
|
+
<cellXfs count="8">
|
107
|
+
<xf numFmtId="164" fontId="0" fillId="0" borderId="0" xfId="0" applyFont="false" applyBorder="false" applyAlignment="false" applyProtection="false">
|
108
|
+
<alignment horizontal="general" vertical="bottom" textRotation="0" wrapText="false" indent="0" shrinkToFit="false" />
|
109
|
+
<protection locked="true" hidden="false" />
|
110
|
+
</xf>
|
111
|
+
<xf numFmtId="164" fontId="4" fillId="2" borderId="1" xfId="0" applyFont="true" applyBorder="true" applyAlignment="true" applyProtection="false">
|
112
|
+
<alignment horizontal="center" vertical="bottom" textRotation="0" wrapText="false" indent="0" shrinkToFit="false" />
|
113
|
+
<protection locked="true" hidden="false" />
|
114
|
+
</xf>
|
115
|
+
<xf numFmtId="164" fontId="4" fillId="2" borderId="0" xfId="0" applyFont="true" applyBorder="true" applyAlignment="true" applyProtection="false">
|
116
|
+
<alignment horizontal="center" vertical="bottom" textRotation="0" wrapText="false" indent="0" shrinkToFit="false" />
|
117
|
+
<protection locked="true" hidden="false" />
|
118
|
+
</xf>
|
119
|
+
<xf numFmtId="165" fontId="4" fillId="2" borderId="0" xfId="0" applyFont="true" applyBorder="true" applyAlignment="true" applyProtection="false">
|
120
|
+
<alignment horizontal="center" vertical="bottom" textRotation="0" wrapText="false" indent="0" shrinkToFit="false" />
|
121
|
+
<protection locked="true" hidden="false" />
|
122
|
+
</xf>
|
123
|
+
<xf numFmtId="164" fontId="5" fillId="3" borderId="0" xfId="0" applyFont="true" applyBorder="true" applyAlignment="true" applyProtection="false">
|
124
|
+
<alignment horizontal="general" vertical="center" textRotation="0" wrapText="true" indent="0" shrinkToFit="false" />
|
125
|
+
<protection locked="true" hidden="false" />
|
126
|
+
</xf>
|
127
|
+
<xf numFmtId="164" fontId="0" fillId="0" borderId="0" xfId="0" applyFont="true" applyBorder="true" applyAlignment="true" applyProtection="false">
|
128
|
+
<alignment horizontal="left" vertical="center" textRotation="0" wrapText="true" indent="0" shrinkToFit="false" />
|
129
|
+
<protection locked="true" hidden="false" />
|
130
|
+
</xf>
|
131
|
+
<xf numFmtId="164" fontId="0" fillId="0" borderId="0" xfId="0" applyFont="true" applyBorder="false" applyAlignment="false" applyProtection="false">
|
132
|
+
<alignment horizontal="general" vertical="bottom" textRotation="0" wrapText="false" indent="0" shrinkToFit="false" />
|
133
|
+
<protection locked="true" hidden="false" />
|
134
|
+
</xf>
|
135
|
+
<xf numFmtId="164" fontId="0" fillId="0" borderId="0" xfId="0" applyFont="false" applyBorder="true" applyAlignment="false" applyProtection="false">
|
136
|
+
<alignment horizontal="general" vertical="bottom" textRotation="0" wrapText="false" indent="0" shrinkToFit="false" />
|
137
|
+
<protection locked="true" hidden="false" />
|
138
|
+
</xf>
|
139
|
+
</cellXfs>
|
140
|
+
<cellStyles count="6">
|
141
|
+
<cellStyle name="Normal" xfId="0" builtinId="0" customBuiltin="false" />
|
142
|
+
<cellStyle name="Comma" xfId="15" builtinId="3" customBuiltin="false" />
|
143
|
+
<cellStyle name="Comma [0]" xfId="16" builtinId="6" customBuiltin="false" />
|
144
|
+
<cellStyle name="Currency" xfId="17" builtinId="4" customBuiltin="false" />
|
145
|
+
<cellStyle name="Currency [0]" xfId="18" builtinId="7" customBuiltin="false" />
|
146
|
+
<cellStyle name="Percent" xfId="19" builtinId="5" customBuiltin="false" />
|
147
|
+
</cellStyles>
|
148
|
+
<colors>
|
149
|
+
<indexedColors>
|
150
|
+
<rgbColor rgb="FF000000" />
|
151
|
+
<rgbColor rgb="FFFFFFFF" />
|
152
|
+
<rgbColor rgb="FFFF0000" />
|
153
|
+
<rgbColor rgb="FF00FF00" />
|
154
|
+
<rgbColor rgb="FF0000FF" />
|
155
|
+
<rgbColor rgb="FFFFFF00" />
|
156
|
+
<rgbColor rgb="FFFF00FF" />
|
157
|
+
<rgbColor rgb="FF00FFFF" />
|
158
|
+
<rgbColor rgb="FF800000" />
|
159
|
+
<rgbColor rgb="FF008000" />
|
160
|
+
<rgbColor rgb="FF090948" />
|
161
|
+
<rgbColor rgb="FF808000" />
|
162
|
+
<rgbColor rgb="FF800080" />
|
163
|
+
<rgbColor rgb="FF008080" />
|
164
|
+
<rgbColor rgb="FFC0C0C0" />
|
165
|
+
<rgbColor rgb="FF808080" />
|
166
|
+
<rgbColor rgb="FF9999FF" />
|
167
|
+
<rgbColor rgb="FF993366" />
|
168
|
+
<rgbColor rgb="FFFFFFCC" />
|
169
|
+
<rgbColor rgb="FFDCE6F2" />
|
170
|
+
<rgbColor rgb="FF660066" />
|
171
|
+
<rgbColor rgb="FFFF8080" />
|
172
|
+
<rgbColor rgb="FF0066CC" />
|
173
|
+
<rgbColor rgb="FFCCCCFF" />
|
174
|
+
<rgbColor rgb="FF000080" />
|
175
|
+
<rgbColor rgb="FFFF00FF" />
|
176
|
+
<rgbColor rgb="FFFFFF00" />
|
177
|
+
<rgbColor rgb="FF00FFFF" />
|
178
|
+
<rgbColor rgb="FF800080" />
|
179
|
+
<rgbColor rgb="FF800000" />
|
180
|
+
<rgbColor rgb="FF008080" />
|
181
|
+
<rgbColor rgb="FF0000FF" />
|
182
|
+
<rgbColor rgb="FF00CCFF" />
|
183
|
+
<rgbColor rgb="FFCCFFFF" />
|
184
|
+
<rgbColor rgb="FFCCFFCC" />
|
185
|
+
<rgbColor rgb="FFFFFF99" />
|
186
|
+
<rgbColor rgb="FF99CCFF" />
|
187
|
+
<rgbColor rgb="FFFF99CC" />
|
188
|
+
<rgbColor rgb="FFCC99FF" />
|
189
|
+
<rgbColor rgb="FFFFCC99" />
|
190
|
+
<rgbColor rgb="FF3366FF" />
|
191
|
+
<rgbColor rgb="FF33CCCC" />
|
192
|
+
<rgbColor rgb="FF99CC00" />
|
193
|
+
<rgbColor rgb="FFFFCC00" />
|
194
|
+
<rgbColor rgb="FFFF9900" />
|
195
|
+
<rgbColor rgb="FFFF6600" />
|
196
|
+
<rgbColor rgb="FF666699" />
|
197
|
+
<rgbColor rgb="FF969696" />
|
198
|
+
<rgbColor rgb="FF003366" />
|
199
|
+
<rgbColor rgb="FF339966" />
|
200
|
+
<rgbColor rgb="FF003300" />
|
201
|
+
<rgbColor rgb="FF333300" />
|
202
|
+
<rgbColor rgb="FF993300" />
|
203
|
+
<rgbColor rgb="FF993366" />
|
204
|
+
<rgbColor rgb="FF333399" />
|
205
|
+
<rgbColor rgb="FF333333" />
|
206
|
+
</indexedColors>
|
207
|
+
</colors>
|
208
|
+
</styleSheet>
|
Binary file
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require './spec/spec_helper'
|
2
|
+
|
3
|
+
describe 'shared strings' do
|
4
|
+
|
5
|
+
it 'parses rich text strings correctly' do
|
6
|
+
shared_strings_xml_file = File.open('spec/fixtures/sst.xml')
|
7
|
+
doc = Nokogiri::XML(shared_strings_xml_file)
|
8
|
+
dictionary = Creeker::SharedStrings.parse_shared_string_from_document(doc)
|
9
|
+
|
10
|
+
expect(dictionary.keys.size).to eq(5)
|
11
|
+
expect(dictionary[0]).to eq('Cell A1')
|
12
|
+
expect(dictionary[1]).to eq('Cell B1')
|
13
|
+
expect(dictionary[2]).to eq('My Cell')
|
14
|
+
expect(dictionary[3]).to eq('Cell A2')
|
15
|
+
expect(dictionary[4]).to eq('Cell B2')
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
data/spec/sheet_spec.rb
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
require './spec/spec_helper'
|
2
|
+
|
3
|
+
describe 'sheet' do
|
4
|
+
let(:book_with_images) { Creeker::Book.new('spec/fixtures/sample-with-images.xlsx') }
|
5
|
+
let(:book_no_images) { Creeker::Book.new('spec/fixtures/sample.xlsx') }
|
6
|
+
let(:sheetfile) { 'worksheets/sheet1.xml' }
|
7
|
+
let(:sheet_with_images) { Creeker::Sheet.new(book_with_images, 'Sheet 1', 1, '', '', '1', sheetfile) }
|
8
|
+
let(:sheet_no_images) { Creeker::Sheet.new(book_no_images, 'Sheet 1', 1, '', '', '1', sheetfile) }
|
9
|
+
|
10
|
+
def load_cell(rows, cell_name)
|
11
|
+
cell = rows.find { |row| !row[cell_name].nil? }
|
12
|
+
cell[cell_name] if cell
|
13
|
+
end
|
14
|
+
|
15
|
+
describe '#rows' do
|
16
|
+
context 'with excel with images' do
|
17
|
+
context 'with images preloading' do
|
18
|
+
let(:rows) { sheet_with_images.with_images.rows.map { |r| r } }
|
19
|
+
|
20
|
+
it 'parses single image in a cell' do
|
21
|
+
expect(load_cell(rows, 'A2').size).to eq(1)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'returns nil for cells without images' do
|
25
|
+
expect(load_cell(rows, 'A3')).to eq(nil)
|
26
|
+
expect(load_cell(rows, 'A7')).to eq(nil)
|
27
|
+
expect(load_cell(rows, 'A9')).to eq(nil)
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'returns nil for merged cell within empty row' do
|
31
|
+
expect(load_cell(rows, 'A5')).to eq(nil)
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'returns nil for image in a cell with empty row' do
|
35
|
+
expect(load_cell(rows, 'A8')).to eq(nil)
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'returns images for merged cells' do
|
39
|
+
expect(load_cell(rows, 'A4').size).to eq(1)
|
40
|
+
expect(load_cell(rows, 'A6').size).to eq(1)
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'returns multiple images' do
|
44
|
+
expect(load_cell(rows, 'A10').size).to eq(2)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'ignores images' do
|
49
|
+
rows = sheet_with_images.rows.map { |r| r }
|
50
|
+
expect(load_cell(rows, 'A2')).to eq(nil)
|
51
|
+
expect(load_cell(rows, 'A3')).to eq(nil)
|
52
|
+
expect(load_cell(rows, 'A4')).to eq(nil)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context 'with excel without images' do
|
57
|
+
it 'does not break on with_images' do
|
58
|
+
rows = sheet_no_images.with_images.rows.map { |r| r }
|
59
|
+
expect(load_cell(rows, 'A10')).to eq(0.15)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '#images_at' do
|
65
|
+
it 'returns images for merged cell' do
|
66
|
+
image = sheet_with_images.with_images.images_at('A5')[0]
|
67
|
+
expect(image.class).to eq(Pathname)
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'returns images for empty row' do
|
71
|
+
image = sheet_with_images.with_images.images_at('A8')[0]
|
72
|
+
expect(image.class).to eq(Pathname)
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'returns nil for empty cell' do
|
76
|
+
image = sheet_with_images.with_images.images_at('B3')
|
77
|
+
expect(image).to eq(nil)
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'returns nil for empty cell without preloading images' do
|
81
|
+
image = sheet_with_images.images_at('B3')
|
82
|
+
expect(image).to eq(nil)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require './spec/spec_helper'
|
2
|
+
|
3
|
+
describe Creeker::Styles::Converter do
|
4
|
+
|
5
|
+
describe :call do
|
6
|
+
def convert(value, type, style)
|
7
|
+
Creeker::Styles::Converter.call(value, type, style)
|
8
|
+
end
|
9
|
+
|
10
|
+
describe :date_time do
|
11
|
+
it "works" do
|
12
|
+
expect(convert('41275', 'n', :date_time)).to eq(Date.new(2013,01,01))
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require './spec/spec_helper'
|
2
|
+
|
3
|
+
describe Creeker::Styles::StyleTypes do
|
4
|
+
|
5
|
+
describe :call do
|
6
|
+
it "return array of styletypes with mapping to ruby types" do
|
7
|
+
xml_file = File.open('spec/fixtures/styles/first.xml')
|
8
|
+
doc = Nokogiri::XML(xml_file)
|
9
|
+
res = Creeker::Styles::StyleTypes.new(doc).call
|
10
|
+
expect(res.size).to eq(8)
|
11
|
+
expect(res[3]).to eq(:date_time)
|
12
|
+
expect(res).to eq([:unsupported, :unsupported, :unsupported, :date_time, :unsupported, :unsupported, :unsupported, :unsupported])
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/spec/test_spec.rb
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
require './spec/spec_helper'
|
2
|
+
|
3
|
+
describe 'Creeker trying to parsing an invalid file.' do
|
4
|
+
it 'Fail to open a legacy xls file.' do
|
5
|
+
expect { Creeker::Book.new 'spec/fixtures/invalid.xls' }
|
6
|
+
.to raise_error 'Not a valid file format.'
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'Ignore file extensions on request.' do
|
10
|
+
path = 'spec/fixtures/sample-as-zip.zip'
|
11
|
+
expect { Creeker::Book.new path, check_file_extension: false }
|
12
|
+
.not_to raise_error
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'Check file extension when requested.' do
|
16
|
+
expect { Creeker::Book.new 'spec/fixtures/invalid.xls', check_file_extension: true }
|
17
|
+
.to raise_error 'Not a valid file format.'
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'Check file extension of original_filename if passed.' do
|
21
|
+
path = 'spec/fixtures/temp_string_io_file_path_with_no_extension'
|
22
|
+
expect { Creeker::Book.new path, :original_filename => 'invalid.xls' }
|
23
|
+
.to raise_error 'Not a valid file format.'
|
24
|
+
expect { Creeker::Book.new path, :original_filename => 'valid.xlsx' }
|
25
|
+
.not_to raise_error
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe 'Creeker parsing a sample XLSX file' do
|
30
|
+
before(:all) do
|
31
|
+
@creeker = Creeker::Book.new 'spec/fixtures/sample.xlsx'
|
32
|
+
@expected_rows = [{'A1'=>'Content 1', 'B1'=>nil, 'C1'=>'Content 2', 'D1'=>nil, 'E1'=>'Content 3'},
|
33
|
+
{'A2'=>nil, 'B2'=>'Content 4', 'C2'=>nil, 'D2'=>'Content 5', 'E2'=>nil, 'F2'=>'Content 6'},
|
34
|
+
{},
|
35
|
+
{'A4'=>'Content 7', 'B4'=>'Content 8', 'C4'=>'Content 9', 'D4'=>'Content 10', 'E4'=>'Content 11', 'F4'=>'Content 12'},
|
36
|
+
{'A5'=>nil, 'B5'=>nil, 'C5'=>nil, 'D5'=>nil, 'E5'=>nil, 'F5'=>nil, 'G5'=>nil, 'H5'=>nil, 'I5'=>nil, 'J5'=>nil, 'K5'=>nil, 'L5'=>nil, 'M5'=>nil, 'N5'=>nil, 'O5'=>nil, 'P5'=>nil, 'Q5'=>nil, 'R5'=>nil, 'S5'=>nil, 'T5'=>nil, 'U5'=>nil, 'V5'=>nil, 'W5'=>nil, 'X5'=>nil, 'Y5'=>nil, 'Z5'=>'Z Content', 'AA5'=>nil, 'AB5'=>nil, 'AC5'=>nil, 'AD5'=>nil, 'AE5'=>nil, 'AF5'=>nil, 'AG5'=>nil, 'AH5'=>nil, 'AI5'=>nil, 'AJ5'=>nil, 'AK5'=>nil, 'AL5'=>nil, 'AM5'=>nil, 'AN5'=>nil, 'AO5'=>nil, 'AP5'=>nil, 'AQ5'=>nil, 'AR5'=>nil, 'AS5'=>nil, 'AT5'=>nil, 'AU5'=>nil, 'AV5'=>nil, 'AW5'=>nil, 'AX5'=>nil, 'AY5'=>nil, 'AZ5'=>'Content 13'},
|
37
|
+
{'A6'=>'1', 'B6'=>'2', 'C6'=>'3'}, {'A7'=>'Content 15', 'B7'=>'Content 16', 'C7'=>'Content 18', 'D7'=>'Content 19'},
|
38
|
+
{'A8'=>nil, 'B8'=>'Content 20', 'C8'=>nil, 'D8'=>nil, 'E8'=>nil, 'F8'=>'Content 21'},
|
39
|
+
{'A10' => 0.15, 'B10' => 0.15}]
|
40
|
+
end
|
41
|
+
|
42
|
+
after(:all) do
|
43
|
+
@creeker.close
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'open an XLSX file successfully.' do
|
47
|
+
expect(@creeker).not_to be_nil
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'find sheets successfully.' do
|
51
|
+
expect(@creeker.sheets.count).to eq(1)
|
52
|
+
sheet = @creeker.sheets.first
|
53
|
+
expect(sheet.state).to eql nil
|
54
|
+
expect(sheet.name).to eql 'Sheet1'
|
55
|
+
expect(sheet.rid).to eql 'rId1'
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'Parse rows with empty cells successfully.' do
|
59
|
+
rows = Array.new
|
60
|
+
row_count = 0
|
61
|
+
@creeker.sheets[0].rows.each do |row|
|
62
|
+
rows << row
|
63
|
+
row_count += 1
|
64
|
+
end
|
65
|
+
|
66
|
+
expect(rows[0]).to eq(@expected_rows[0])
|
67
|
+
expect(rows[1]).to eq(@expected_rows[1])
|
68
|
+
expect(rows[2]).to eq(@expected_rows[2])
|
69
|
+
expect(rows[3]).to eq(@expected_rows[3])
|
70
|
+
expect(rows[4]).to eq(@expected_rows[4])
|
71
|
+
expect(rows[5]).to eq(@expected_rows[5])
|
72
|
+
expect(rows[6]).to eq(@expected_rows[6])
|
73
|
+
expect(rows[7]).to eq(@expected_rows[7])
|
74
|
+
expect(rows[8]).to eq(@expected_rows[8])
|
75
|
+
expect(row_count).to eq(9)
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'Parse rows with empty cells and meta data successfully.' do
|
79
|
+
rows = Array.new
|
80
|
+
row_count = 0
|
81
|
+
@creeker.sheets[0].rows_with_meta_data.each do |row|
|
82
|
+
rows << row
|
83
|
+
row_count += 1
|
84
|
+
end
|
85
|
+
expect(rows.map{|r| r['cells']}).to eq(@expected_rows)
|
86
|
+
end
|
87
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: creeker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- huntcode
|
@@ -116,9 +116,14 @@ executables: []
|
|
116
116
|
extensions: []
|
117
117
|
extra_rdoc_files: []
|
118
118
|
files:
|
119
|
+
- ".DS_Store"
|
120
|
+
- ".gitignore"
|
121
|
+
- Gemfile
|
119
122
|
- LICENSE.txt
|
120
123
|
- README.md
|
121
124
|
- Rakefile
|
125
|
+
- creeker.gemspec
|
126
|
+
- lib/.DS_Store
|
122
127
|
- lib/creeker.rb
|
123
128
|
- lib/creeker/book.rb
|
124
129
|
- lib/creeker/drawing.rb
|
@@ -130,7 +135,22 @@ files:
|
|
130
135
|
- lib/creeker/styles/style_types.rb
|
131
136
|
- lib/creeker/utils.rb
|
132
137
|
- lib/creeker/version.rb
|
133
|
-
|
138
|
+
- spec/drawing_spec.rb
|
139
|
+
- spec/fixtures/invalid.xls
|
140
|
+
- spec/fixtures/sample-as-zip.zip
|
141
|
+
- spec/fixtures/sample-with-images.xlsx
|
142
|
+
- spec/fixtures/sample.xlsx
|
143
|
+
- spec/fixtures/sheets/sheet1.xml
|
144
|
+
- spec/fixtures/sst.xml
|
145
|
+
- spec/fixtures/styles/first.xml
|
146
|
+
- spec/fixtures/temp_string_io_file_path_with_no_extension
|
147
|
+
- spec/shared_string_spec.rb
|
148
|
+
- spec/sheet_spec.rb
|
149
|
+
- spec/spec_helper.rb
|
150
|
+
- spec/styles/converter_spec.rb
|
151
|
+
- spec/styles/style_types_spec.rb
|
152
|
+
- spec/test_spec.rb
|
153
|
+
homepage: https://github.com/vivektripathihunt/creeker
|
134
154
|
licenses:
|
135
155
|
- MIT
|
136
156
|
metadata: {}
|
@@ -154,4 +174,19 @@ rubygems_version: 2.6.14
|
|
154
174
|
signing_key:
|
155
175
|
specification_version: 4
|
156
176
|
summary: A Ruby gem for parsing large Excel(xlsx and xlsm) files.
|
157
|
-
test_files:
|
177
|
+
test_files:
|
178
|
+
- spec/drawing_spec.rb
|
179
|
+
- spec/fixtures/invalid.xls
|
180
|
+
- spec/fixtures/sample-as-zip.zip
|
181
|
+
- spec/fixtures/sample-with-images.xlsx
|
182
|
+
- spec/fixtures/sample.xlsx
|
183
|
+
- spec/fixtures/sheets/sheet1.xml
|
184
|
+
- spec/fixtures/sst.xml
|
185
|
+
- spec/fixtures/styles/first.xml
|
186
|
+
- spec/fixtures/temp_string_io_file_path_with_no_extension
|
187
|
+
- spec/shared_string_spec.rb
|
188
|
+
- spec/sheet_spec.rb
|
189
|
+
- spec/spec_helper.rb
|
190
|
+
- spec/styles/converter_spec.rb
|
191
|
+
- spec/styles/style_types_spec.rb
|
192
|
+
- spec/test_spec.rb
|