oxcelix 0.2.4 → 0.3.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.
- data/CHANGES +21 -64
- data/README.rdoc +5 -3
- data/lib/oxcelix/cell.rb +5 -1
- data/lib/oxcelix/cellhelper.rb +4 -2
- data/lib/oxcelix/nf.rb +172 -0
- data/lib/oxcelix/numformats.rb +105 -0
- data/lib/oxcelix/sax/styles.rb +49 -0
- data/lib/oxcelix/sax/xlsheet.rb +3 -2
- data/lib/oxcelix/sheet.rb +10 -0
- data/lib/oxcelix/workbook.rb +20 -4
- data/lib/oxcelix.rb +3 -0
- data/oxcelix.gemspec +8 -4
- metadata +9 -6
- data/lib/lofaszka.rb +0 -6
data/CHANGES
CHANGED
|
@@ -1,64 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
replaced Ox::load_file with IO.read + Ox::load in workbook, as apparently workbook.xml could not be loaded under windows using that method Mon Oct 7 17:37:39 2013 +0200
|
|
24
|
-
* Minor typos corrected, added gemspec
|
|
25
|
-
Sun Oct 6 16:52:54 2013 +0200
|
|
26
|
-
* oxcelix.rb was not added to previous commit
|
|
27
|
-
Sun Oct 6 12:29:37 2013 +0200
|
|
28
|
-
* Broke down oxcelix.rb. Improved YARD documentation.
|
|
29
|
-
Sun Oct 6 12:25:59 2013 +0200
|
|
30
|
-
* Removed unneeded method from Xlsheet. Started converting docs to YARD
|
|
31
|
-
Sat Oct 5 09:20:31 2013 +0200
|
|
32
|
-
* Merge branch 'master' of https://github.com/gbiczo/oxcelix
|
|
33
|
-
Wed Oct 2 00:19:54 2013 +0200
|
|
34
|
-
* Repeating commit as the sheetdata method code was not included. Now it will simply do some Array magic to return the list of active sheets.
|
|
35
|
-
Wed Oct 2 00:19:18 2013 +0200
|
|
36
|
-
* Update README.md
|
|
37
|
-
|
|
38
|
-
Fixed typos Wed Oct 2 00:08:00 2013 +0200
|
|
39
|
-
* Merge branch 'master' of https://github.com/gbiczo/oxcelix
|
|
40
|
-
Tue Oct 1 23:51:13 2013 +0200
|
|
41
|
-
* Moved source to lib directory.
|
|
42
|
-
Tue Oct 1 23:43:53 2013 +0200
|
|
43
|
-
* Added README
|
|
44
|
-
Tue Oct 1 23:42:27 2013 +0200
|
|
45
|
-
* Added tests, recreated include-exclude code, now it works fine. Created README.rdoc
|
|
46
|
-
Tue Oct 1 23:42:00 2013 +0200
|
|
47
|
-
* Update README.md
|
|
48
|
-
|
|
49
|
-
Corrected typo Tue Oct 1 23:32:22 2013 +0200
|
|
50
|
-
* Update README.md Tue Oct 1 23:31:47 2013 +0200
|
|
51
|
-
* Initial commit
|
|
52
|
-
Tue Oct 1 14:21:10 2013 -0700
|
|
53
|
-
* Really deleted the last few lines of code.
|
|
54
|
-
Sat Sep 28 15:49:06 2013 +0200
|
|
55
|
-
* Wrapper module Oxcelix created. String, Matrix, Fixnum are not included. Sheet objects are now created as a last step instead og the simple hashes. Workbookhelper module added, with one method, [](sheetname), which accepts a string parameter and returns the sheet named sheetname. Code cleanups (especially the last lines of the code which were there only for testing purposes.)
|
|
56
|
-
Sat Sep 28 15:46:56 2013 +0200
|
|
57
|
-
* Corrected Cellhelper::x() and Cellhelper::y() methods, now both return correct values. RDoc documentation added.
|
|
58
|
-
Wed Sep 25 23:44:07 2013 +0200
|
|
59
|
-
* Added support for sheet inclusion and exclusion. Workbook#new now accepts a hash of parameters, which may contain: :copymerge (Bool), :include_sheets (Ary), :exclude_sheets (Ary)
|
|
60
|
-
Wed Sep 25 09:49:42 2013 +0200
|
|
61
|
-
* Added col_name to display excel column names. Style data of cell is now included. X and Y may get parameters. The Workbook constructor will now unzip and process the excel file. All sheets get converted to matrices. Upon the Array->Matrix conversion, the merged cells max be omitted or repeated.
|
|
62
|
-
Mon Sep 23 20:32:25 2013 +0200
|
|
63
|
-
* First gitted version.
|
|
64
|
-
Thu Aug 29 09:14:59 2013 +0200
|
|
1
|
+
* Further code cleanup in numformats.rb Tue Dec 3 19:49:03 2013 +0100
|
|
2
|
+
* Renamed add to add_custom_formats Tue Dec 3 19:46:15 2013 +0100
|
|
3
|
+
* Path cleanup Tue Dec 3 19:07:47 2013 +0100
|
|
4
|
+
* Added documentation to Formatarray. Fixed bug which prevented cells containing e.g. String values AND datetime/numeric formatting code to be properly returned when to_ru or to_fmt was invoked. Code cleanup. Tue Dec 3 19:06:39 2013 +0100
|
|
5
|
+
* Numberhelper included in Cell class. Various typos corrected. Cell#to_ru and Cell#to_fmt now reflect the inclusion of the Numberformats module. Mon Dec 2 23:27:52 2013 +0100
|
|
6
|
+
* to_ru and to_fmt methods are now encapsulated in the Numhelper method. This is not only cleaner, ensures them to be included in Cell and only there. Mon Dec 2 23:04:13 2013 +0100
|
|
7
|
+
* Cleared @numformats from Workbook. Formatarray is now a Numformats module constant available to any class including it. Mon Dec 2 22:47:40 2013 +0100
|
|
8
|
+
* Numformat is now included in Workbook. Dtmap became a constant. New method Numformats::add converts the temparray to a series of numformat hashes and adds it to the main numformat array. to_ru, to_fmt, datetime, numeric are now Workbook methods. Slight code cleanup. Sun Dec 1 19:28:41 2013 +0100
|
|
9
|
+
* Numformats.rb cleanup. Documented new modules/methods. Restructured to_ru and to_fmt. Fri Nov 29 09:23:41 2013 +0100
|
|
10
|
+
* Code cleanup. TODO: split format string (;)? cellhelper.rb to be cleaned up Mon Nov 25 00:06:38 2013 +0100
|
|
11
|
+
* finalized numeric method with a regex composed by 6 members: prefix, decimals, separator, floats, expo, postfix. This obsoletes the vgrp method as well as the other ones (still in the numformats.rb file.) TODO: delete all unnecessary code and provide a meaningful return value. Mon Nov 25 00:00:52 2013 +0100
|
|
12
|
+
* Added Numformats Sat Nov 23 09:48:50 2013 +0100
|
|
13
|
+
* Merge branch '0.3.0' of https://github.com/gbiczo/oxcelix into 0.3.0 Sat Nov 23 09:43:59 2013 +0100
|
|
14
|
+
* Added numformats.rb. Cleaned styles.rb from unnecessary comments. Sat Nov 23 09:41:10 2013 +0100
|
|
15
|
+
* Added badge Fri Nov 22 12:20:48 2013 +0100
|
|
16
|
+
* Some speed optimizations. matrixto does not accept fmt parameter any more. fixed typos Wed Nov 13 00:03:44 2013 +0100
|
|
17
|
+
* Cell now has a numformat attribute. A new module called Numformats will contain methods related to numeric formatting. to_r and to_d are now obsolete. Xlsheet init parameter (styles). Stylefile is opened in the workbook. Matrixto gets a :values option (this will be obsoleted shortly). Slight Gemspec and .md description change Mon Nov 4 17:47:17 2013 +0100
|
|
18
|
+
* Initial version of Sheet::to_m method Sat Oct 19 11:06:42 2013 +0200
|
|
19
|
+
* Format array is now a constant (FARY) Fri Oct 18 21:58:39 2013 +0200
|
|
20
|
+
* Fixed typo in README Fri Oct 18 21:51:09 2013 +0200
|
|
21
|
+
* Started working on cell value formats Fri Oct 18 21:50:24 2013 +0200
|
data/README.rdoc
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
= \Oxcelix - A fast .xlsx file parser
|
|
2
2
|
|
|
3
|
+
{<img src="https://badge.fury.io/rb/oxcelix.png" alt="Gem Version" />}[http://badge.fury.io/rb/oxcelix]
|
|
4
|
+
|
|
3
5
|
== Description
|
|
4
6
|
|
|
5
7
|
Oxcelix is an xlsx (Excel 2007/2010) parser. The result of the parsing is a
|
|
6
8
|
Workbook which is an array of Sheet objects, which in turn store the data in
|
|
7
9
|
Matrix objects. Matrices consist of Cell objects to maintain comments and
|
|
8
|
-
formatting/style data
|
|
9
|
-
|
|
10
|
+
formatting/style data.
|
|
11
|
+
|
|
10
12
|
Oxcelix uses the great Ox gem (http://rubygems.org/gems/ox) for fast SAX-parsing.
|
|
11
13
|
|
|
12
14
|
== Synopsis
|
|
@@ -27,4 +29,4 @@ To include only some of the sheets:
|
|
|
27
29
|
|
|
28
30
|
To have the values of the merged cells copied over the mergegroup:
|
|
29
31
|
|
|
30
|
-
w = Oxcelix::Workbook.new('whatever.xlsx', :
|
|
32
|
+
w = Oxcelix::Workbook.new('whatever.xlsx', :copymerge => true)
|
data/lib/oxcelix/cell.rb
CHANGED
|
@@ -10,9 +10,13 @@ module Oxcelix
|
|
|
10
10
|
# @return [String] Comment text
|
|
11
11
|
# @!attribute [rw] style
|
|
12
12
|
# @return [String] Excel style attribute
|
|
13
|
+
# @!attribute [rw] numformat
|
|
14
|
+
# @return [String] Excel style number formatting
|
|
15
|
+
|
|
13
16
|
class Cell
|
|
14
|
-
attr_accessor :xlcoords, :type, :value, :comment, :style
|
|
17
|
+
attr_accessor :xlcoords, :type, :value, :comment, :style, :numformat
|
|
15
18
|
include Cellhelper
|
|
16
19
|
include Cellvalues
|
|
20
|
+
include Numberhelper
|
|
17
21
|
end
|
|
18
22
|
end
|
data/lib/oxcelix/cellhelper.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
2
1
|
module Oxcelix
|
|
3
|
-
|
|
2
|
+
|
|
3
|
+
# The Cellvalues module provides methods for setting cell values. They are named after the relevant XML entitiesd and
|
|
4
|
+
# called directly by the Xlsheet SAX parser.
|
|
4
5
|
module Cellvalues
|
|
5
6
|
# Set the excel cell name (eg: 'A2')
|
|
6
7
|
# @param [String] val Excel cell address name
|
|
@@ -13,6 +14,7 @@ module Oxcelix
|
|
|
13
14
|
def s(val); @style = val; end;
|
|
14
15
|
end
|
|
15
16
|
|
|
17
|
+
# The Cellhelper module defines some methods useful to manipulate Cell objects
|
|
16
18
|
module Cellhelper
|
|
17
19
|
# When called without parameters, returns the x coordinate of the calling cell object based on the value of #@xlcoords
|
|
18
20
|
# If a parameter is given, #x will return the x coordinate corresponding to the parameter
|
data/lib/oxcelix/nf.rb
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
module Oxcelix
|
|
2
|
+
module Numformats
|
|
3
|
+
# Formatarray is the array of default format strings in Excel. Nil values should apparently contain CJK date format strings,
|
|
4
|
+
#feel free to add/document those according to existing standards.
|
|
5
|
+
Formatarray = [
|
|
6
|
+
{:id => '0', :xl => 'General', :ostring => nil, :cls => 'string'},
|
|
7
|
+
{:id => '1', :xl => '0', :ostring => '%1d', :cls => 'numeric'},
|
|
8
|
+
{:id => '2', :xl => '0.00', :ostring => '%1.2f', :cls => 'numeric'},
|
|
9
|
+
{:id => '3', :xl => '#,##0', :ostring => '%#4d', :cls => 'numeric'},
|
|
10
|
+
{:id => '4', :xl => '#,##0.00', :ostring => '%#4.2f', :cls => 'numeric'},
|
|
11
|
+
{:id => '5', :xl => '', :ostring => nil, :cls => 'string'},
|
|
12
|
+
{:id => '6', :xl => '', :ostring => nil, :cls => 'string'},
|
|
13
|
+
{:id => '7', :xl => '', :ostring => nil, :cls => 'string'},
|
|
14
|
+
{:id => '8', :xl => '', :ostring => nil, :cls => 'string'},
|
|
15
|
+
{:id => '9', :xl => '0%', :ostring => '%1d%', :cls => 'numeric'},
|
|
16
|
+
{:id => '10', :xl => '0.00%', :ostring => '%1.2f%', :cls => 'numeric'},
|
|
17
|
+
{:id => '11', :xl => '0.00E+00', :ostring => '%1.2fE+', :cls => 'numeric'},
|
|
18
|
+
{:id => '12', :xl => '# ?/?', :ostring => '%#1d', :cls => 'rational'},
|
|
19
|
+
{:id => '13', :xl => '# ??/??', :ostring => '%#1d', :cls => 'rational'},
|
|
20
|
+
{:id => '14', :xl => 'd/m/yyyy', :ostring => '%-d/%-m/%Y', :cls => 'date'},
|
|
21
|
+
{:id => '15', :xl => 'd-mmm-yy', :ostring => '%-d-%b-%y', :cls => 'date'},
|
|
22
|
+
{:id => '16', :xl => 'd-mmm', :ostring => '%-d-%b', :cls => 'date'},
|
|
23
|
+
{:id => '17', :xl => 'mmm-yy', :ostring => '%b-%y', :cls => 'date'},
|
|
24
|
+
{:id => '18', :xl => 'h:mm tt', :ostring => '%-k:%M tt', :cls => 'date'},
|
|
25
|
+
{:id => '19', :xl => 'h:mm:ss tt', :ostring => '%-k:%M:%-S tt', :cls => 'date'},
|
|
26
|
+
{:id => '20', :xl => 'H:mm', :ostring => '%-k:%M', :cls => 'date'},
|
|
27
|
+
{:id => '21', :xl => 'H:mm:ss', :ostring => '%-k:%M:%-S', :cls => 'date'},
|
|
28
|
+
{:id => '22', :xl => 'm/d/yyyy H:mm', :ostring => '%-m/%-d/%Y %-k:%M', :cls => 'date'},
|
|
29
|
+
{:id => '23', :xl => '', :ostring => nil, :cls => 'string'},
|
|
30
|
+
{:id => '24', :xl => '', :ostring => nil, :cls => 'string'},
|
|
31
|
+
{:id => '25', :xl => '', :ostring => nil, :cls => 'string'},
|
|
32
|
+
{:id => '26', :xl => '', :ostring => nil, :cls => 'string'},
|
|
33
|
+
{:id => '27', :xl => '', :ostring => nil, :cls => 'string'},
|
|
34
|
+
{:id => '28', :xl => '', :ostring => nil, :cls => 'string'},
|
|
35
|
+
{:id => '29', :xl => '', :ostring => nil, :cls => 'string'},
|
|
36
|
+
{:id => '30', :xl => '', :ostring => nil, :cls => 'string'},
|
|
37
|
+
{:id => '31', :xl => '', :ostring => nil, :cls => 'string'},
|
|
38
|
+
{:id => '32', :xl => '', :ostring => nil, :cls => 'string'},
|
|
39
|
+
{:id => '33', :xl => '', :ostring => nil, :cls => 'string'},
|
|
40
|
+
{:id => '34', :xl => '', :ostring => nil, :cls => 'string'},
|
|
41
|
+
{:id => '35', :xl => '', :ostring => nil, :cls => 'string'},
|
|
42
|
+
{:id => '36', :xl => '', :ostring => nil, :cls => 'string'},
|
|
43
|
+
{:id => '37', :xl => '#,##0 ;(#,##0)', :ostring => '%#4d', :cls => 'numeric'},
|
|
44
|
+
{:id => '38', :xl => '#,##0 ;[Red](#,##0)', :ostring => '%#4d', :cls => 'numeric'},
|
|
45
|
+
{:id => '39', :xl => '#,##0.00;(#,##0.00)', :ostring => '%#4.2f', :cls => 'numeric'},
|
|
46
|
+
{:id => '40', :xl => '#,##0.00;[Red](#,##0.00)', :ostring => '%#4.2f', :cls => 'numeric'},
|
|
47
|
+
{:id => '41', :xl => '', :ostring => nil, :cls => 'string'},
|
|
48
|
+
{:id => '42', :xl => '', :ostring => nil, :cls => 'string'},
|
|
49
|
+
{:id => '43', :xl => '', :ostring => nil, :cls => 'string'},
|
|
50
|
+
{:id => '44', :xl => '', :ostring => nil, :cls => 'string'},
|
|
51
|
+
{:id => '45', :xl => 'mm:ss', :ostring => '%M:%-S', :cls => 'date'},
|
|
52
|
+
{:id => '46', :xl => '[h]:mm:ss', :ostring => '%-k:%M:%-S', :cls => 'date'},
|
|
53
|
+
{:id => '47', :xl => 'mmss.0', :ostring => '%M%-S.%1n', :cls => 'date'},
|
|
54
|
+
{:id => '48', :xl => '##0.0E+0', :ostring => '%#3.1E', :cls => 'numeric'},
|
|
55
|
+
{:id => '49', :xl => '@,', :ostring => '@%d', :cls => 'numeric'},
|
|
56
|
+
{:id => '50', :xl => '', :ostring => nil, :cls => 'string'},
|
|
57
|
+
{:id => '51', :xl => '', :ostring => nil, :cls => 'string'},
|
|
58
|
+
{:id => '52', :xl => '', :ostring => nil, :cls => 'string'},
|
|
59
|
+
{:id => '53', :xl => '', :ostring => nil, :cls => 'string'},
|
|
60
|
+
{:id => '54', :xl => '', :ostring => nil, :cls => 'string'},
|
|
61
|
+
{:id => '55', :xl => '', :ostring => nil, :cls => 'string'},
|
|
62
|
+
{:id => '56', :xl => '', :ostring => nil, :cls => 'string'},
|
|
63
|
+
{:id => '57', :xl => '', :ostring => nil, :cls => 'string'},
|
|
64
|
+
{:id => '58', :xl => '', :ostring => nil, :cls => 'string'},
|
|
65
|
+
{:id => '59', :xl => '', :ostring => nil, :cls => 'string'},
|
|
66
|
+
{:id => '60', :xl => '', :ostring => nil, :cls => 'string'},
|
|
67
|
+
{:id => '61', :xl => '', :ostring => nil, :cls => 'string'},
|
|
68
|
+
{:id => '62', :xl => '', :ostring => nil, :cls => 'string'},
|
|
69
|
+
{:id => '63', :xl => '', :ostring => nil, :cls => 'string'},
|
|
70
|
+
{:id => '64', :xl => '', :ostring => nil, :cls => 'string'},
|
|
71
|
+
{:id => '65', :xl => '', :ostring => nil, :cls => 'string'},
|
|
72
|
+
{:id => '66', :xl => '', :ostring => nil, :cls => 'string'},
|
|
73
|
+
{:id => '67', :xl => '', :ostring => nil, :cls => 'string'},
|
|
74
|
+
{:id => '68', :xl => '', :ostring => nil, :cls => 'string'},
|
|
75
|
+
{:id => '69', :xl => '', :ostring => nil, :cls => 'string'},
|
|
76
|
+
{:id => '70', :xl => '', :ostring => nil, :cls => 'string'},
|
|
77
|
+
{:id => '71', :xl => '', :ostring => nil, :cls => 'string'},
|
|
78
|
+
{:id => '72', :xl => '', :ostring => nil, :cls => 'string'},
|
|
79
|
+
{:id => '73', :xl => '', :ostring => nil, :cls => 'string'},
|
|
80
|
+
{:id => '74', :xl => '', :ostring => nil, :cls => 'string'},
|
|
81
|
+
{:id => '75', :xl => '', :ostring => nil, :cls => 'string'},
|
|
82
|
+
{:id => '76', :xl => '', :ostring => nil, :cls => 'string'},
|
|
83
|
+
{:id => '77', :xl => '', :ostring => nil, :cls => 'string'},
|
|
84
|
+
{:id => '78', :xl => '', :ostring => nil, :cls => 'string'},
|
|
85
|
+
{:id => '79', :xl => '', :ostring => nil, :cls => 'string'},
|
|
86
|
+
{:id => '80', :xl => '', :ostring => nil, :cls => 'string'},
|
|
87
|
+
{:id => '81', :xl => '', :ostring => nil, :cls => 'string'},
|
|
88
|
+
{:id => '82', :xl => '', :ostring => nil, :cls => 'string'},
|
|
89
|
+
{:id => '83', :xl => '', :ostring => nil, :cls => 'string'},
|
|
90
|
+
{:id => '84', :xl => '', :ostring => nil, :cls => 'string'},
|
|
91
|
+
{:id => '85', :xl => '', :ostring => nil, :cls => 'string'},
|
|
92
|
+
{:id => '86', :xl => '', :ostring => nil, :cls => 'string'},
|
|
93
|
+
{:id => '87', :xl => '', :ostring => nil, :cls => 'string'},
|
|
94
|
+
{:id => '88', :xl => '', :ostring => nil, :cls => 'string'},
|
|
95
|
+
{:id => '89', :xl => '', :ostring => nil, :cls => 'string'},
|
|
96
|
+
{:id => '90', :xl => '', :ostring => nil, :cls => 'string'},
|
|
97
|
+
{:id => '91', :xl => '', :ostring => nil, :cls => 'string'},
|
|
98
|
+
{:id => '92', :xl => '', :ostring => nil, :cls => 'string'},
|
|
99
|
+
{:id => '93', :xl => '', :ostring => nil, :cls => 'string'},
|
|
100
|
+
{:id => '94', :xl => '', :ostring => nil, :cls => 'string'},
|
|
101
|
+
{:id => '95', :xl => '', :ostring => nil, :cls => 'string'},
|
|
102
|
+
{:id => '96', :xl => '', :ostring => nil, :cls => 'string'},
|
|
103
|
+
{:id => '97', :xl => '', :ostring => nil, :cls => 'string'},
|
|
104
|
+
{:id => '98', :xl => '', :ostring => nil, :cls => 'string'},
|
|
105
|
+
{:id => '99', :xl => '', :ostring => nil, :cls => 'string'},
|
|
106
|
+
{:id => '100', :xl => '', :ostring => nil, :cls => 'string'},
|
|
107
|
+
{:id => '101', :xl => '', :ostring => nil, :cls => 'string'},
|
|
108
|
+
{:id => '102', :xl => '', :ostring => nil, :cls => 'string'},
|
|
109
|
+
{:id => '103', :xl => '', :ostring => nil, :cls => 'string'},
|
|
110
|
+
{:id => '104', :xl => '', :ostring => nil, :cls => 'string'},
|
|
111
|
+
{:id => '105', :xl => '', :ostring => nil, :cls => 'string'},
|
|
112
|
+
{:id => '106', :xl => '', :ostring => nil, :cls => 'string'},
|
|
113
|
+
{:id => '107', :xl => '', :ostring => nil, :cls => 'string'},
|
|
114
|
+
{:id => '108', :xl => '', :ostring => nil, :cls => 'string'},
|
|
115
|
+
{:id => '109', :xl => '', :ostring => nil, :cls => 'string'},
|
|
116
|
+
{:id => '110', :xl => '', :ostring => nil, :cls => 'string'},
|
|
117
|
+
{:id => '111', :xl => '', :ostring => nil, :cls => 'string'},
|
|
118
|
+
{:id => '112', :xl => '', :ostring => nil, :cls => 'string'},
|
|
119
|
+
{:id => '113', :xl => '', :ostring => nil, :cls => 'string'},
|
|
120
|
+
{:id => '114', :xl => '', :ostring => nil, :cls => 'string'},
|
|
121
|
+
{:id => '115', :xl => '', :ostring => nil, :cls => 'string'},
|
|
122
|
+
{:id => '116', :xl => '', :ostring => nil, :cls => 'string'},
|
|
123
|
+
{:id => '117', :xl => '', :ostring => nil, :cls => 'string'},
|
|
124
|
+
{:id => '118', :xl => '', :ostring => nil, :cls => 'string'},
|
|
125
|
+
{:id => '119', :xl => '', :ostring => nil, :cls => 'string'},
|
|
126
|
+
{:id => '120', :xl => '', :ostring => nil, :cls => 'string'},
|
|
127
|
+
{:id => '121', :xl => '', :ostring => nil, :cls => 'string'},
|
|
128
|
+
{:id => '122', :xl => '', :ostring => nil, :cls => 'string'},
|
|
129
|
+
{:id => '123', :xl => '', :ostring => nil, :cls => 'string'},
|
|
130
|
+
{:id => '124', :xl => '', :ostring => nil, :cls => 'string'},
|
|
131
|
+
{:id => '125', :xl => '', :ostring => nil, :cls => 'string'},
|
|
132
|
+
{:id => '126', :xl => '', :ostring => nil, :cls => 'string'},
|
|
133
|
+
{:id => '127', :xl => '', :ostring => nil, :cls => 'string'},
|
|
134
|
+
{:id => '128', :xl => '', :ostring => nil, :cls => 'string'},
|
|
135
|
+
{:id => '129', :xl => '', :ostring => nil, :cls => 'string'},
|
|
136
|
+
{:id => '130', :xl => '', :ostring => nil, :cls => 'string'},
|
|
137
|
+
{:id => '131', :xl => '', :ostring => nil, :cls => 'string'},
|
|
138
|
+
{:id => '132', :xl => '', :ostring => nil, :cls => 'string'},
|
|
139
|
+
{:id => '133', :xl => '', :ostring => nil, :cls => 'string'},
|
|
140
|
+
{:id => '134', :xl => '', :ostring => nil, :cls => 'string'},
|
|
141
|
+
{:id => '135', :xl => '', :ostring => nil, :cls => 'string'},
|
|
142
|
+
{:id => '136', :xl => '', :ostring => nil, :cls => 'string'},
|
|
143
|
+
{:id => '137', :xl => '', :ostring => nil, :cls => 'string'},
|
|
144
|
+
{:id => '138', :xl => '', :ostring => nil, :cls => 'string'},
|
|
145
|
+
{:id => '139', :xl => '', :ostring => nil, :cls => 'string'},
|
|
146
|
+
{:id => '140', :xl => '', :ostring => nil, :cls => 'string'},
|
|
147
|
+
{:id => '141', :xl => '', :ostring => nil, :cls => 'string'},
|
|
148
|
+
{:id => '142', :xl => '', :ostring => nil, :cls => 'string'},
|
|
149
|
+
{:id => '143', :xl => '', :ostring => nil, :cls => 'string'},
|
|
150
|
+
{:id => '144', :xl => '', :ostring => nil, :cls => 'string'},
|
|
151
|
+
{:id => '145', :xl => '', :ostring => nil, :cls => 'string'},
|
|
152
|
+
{:id => '146', :xl => '', :ostring => nil, :cls => 'string'},
|
|
153
|
+
{:id => '147', :xl => '', :ostring => nil, :cls => 'string'},
|
|
154
|
+
{:id => '148', :xl => '', :ostring => nil, :cls => 'string'},
|
|
155
|
+
{:id => '149', :xl => '', :ostring => nil, :cls => 'string'},
|
|
156
|
+
{:id => '150', :xl => '', :ostring => nil, :cls => 'string'},
|
|
157
|
+
{:id => '151', :xl => '', :ostring => nil, :cls => 'string'},
|
|
158
|
+
{:id => '152', :xl => '', :ostring => nil, :cls => 'string'},
|
|
159
|
+
{:id => '153', :xl => '', :ostring => nil, :cls => 'string'},
|
|
160
|
+
{:id => '154', :xl => '', :ostring => nil, :cls => 'string'},
|
|
161
|
+
{:id => '155', :xl => '', :ostring => nil, :cls => 'string'},
|
|
162
|
+
{:id => '156', :xl => '', :ostring => nil, :cls => 'string'},
|
|
163
|
+
{:id => '157', :xl => '', :ostring => nil, :cls => 'string'},
|
|
164
|
+
{:id => '158', :xl => '', :ostring => nil, :cls => 'string'},
|
|
165
|
+
{:id => '159', :xl => '', :ostring => nil, :cls => 'string'},
|
|
166
|
+
{:id => '160', :xl => '', :ostring => nil, :cls => 'string'},
|
|
167
|
+
{:id => '161', :xl => '', :ostring => nil, :cls => 'string'},
|
|
168
|
+
{:id => '162', :xl => '', :ostring => nil, :cls => 'string'},
|
|
169
|
+
{:id => '163', :xl => '', :ostring => nil, :cls => 'string'},
|
|
170
|
+
]
|
|
171
|
+
end
|
|
172
|
+
end
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
module Oxcelix
|
|
2
|
+
# The Numformats module provides helper methods that either return the Cell object's raw @value as a ruby value
|
|
3
|
+
# (e.g. Numeric, DateTime, String) or formats it according to the excel _numformat_ string (#Cell.numformat).
|
|
4
|
+
module Numformats
|
|
5
|
+
Dtmap = {'hh'=>'%H', 'ii'=>'%M', 'i'=>'%-M', 'H'=>'%-k', 'h'=>'%-k',\
|
|
6
|
+
'ss'=>'%-S', 's'=>'%S', 'mmmmm'=>'%b', 'mmmm'=>'%B', 'mmm'=>'%b', 'mm'=>'%m', \
|
|
7
|
+
'm'=>'%-m', 'dddd'=>'%A', 'ddd'=>'%a', 'dd'=>'%d', 'd'=>'%-d', 'yyyy'=>'%Y', \
|
|
8
|
+
'yy'=>'%y', 'AM/PM'=>'%p', 'A/P'=>'%p', '.0'=>'', 'ss'=>'%-S', 's'=>'%S'}
|
|
9
|
+
|
|
10
|
+
# Convert the temporary format array (the collection of non-default number formatting strings defined in the excel sheet in use)
|
|
11
|
+
# to a series of hashes containing an id, an excel format string, a converted format string and an object class the format is
|
|
12
|
+
# interpreted on.
|
|
13
|
+
def add_custom_formats fmtary
|
|
14
|
+
fmtary.each do |x|
|
|
15
|
+
if x[:formatCode] =~ /[#0%\?]/
|
|
16
|
+
ostring = numeric x[:formatCode]
|
|
17
|
+
if x[:formatCode] =~ /\//
|
|
18
|
+
cls = 'rational'
|
|
19
|
+
else
|
|
20
|
+
cls = 'numeric'
|
|
21
|
+
end
|
|
22
|
+
elsif x[:formatCode].downcase =~ /[dmysh]/
|
|
23
|
+
ostring = datetime x[:formatCode]
|
|
24
|
+
cls = 'date'
|
|
25
|
+
elsif x[:formatCode].downcase == "general"
|
|
26
|
+
ostring = nil
|
|
27
|
+
cls = 'string'
|
|
28
|
+
end
|
|
29
|
+
Formatarray << {:id => x[:numFmtId].to_s, :xl => x[:formatCode].to_s, :ostring => ostring, :cls => cls}
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Convert the excel-style number format to a ruby #Kernel::Format string and return that String.
|
|
34
|
+
# The conversion is internally done by regexp'ing 7 groups: prefix, decimals, separator, floats, exponential (E+)
|
|
35
|
+
# and postfix. Rational numbers ar not handled yet.
|
|
36
|
+
# @param [String] val an Excel number format string.
|
|
37
|
+
# @return [String] a rubyish Kernel::Format string.
|
|
38
|
+
def numeric val
|
|
39
|
+
ostring = "%"
|
|
40
|
+
strippedfmt = @numformat.gsub(/\?/, '0').gsub(',','')
|
|
41
|
+
prefix, decimals, sep, floats, expo, postfix=/(^[^\#0e].?)?([\#0]*)?(\.)?([\#0]*)?(e.?)?(.?[^\#0e]$)?/i.match(strippedfmt).captures
|
|
42
|
+
ostring.prepend prefix.to_s
|
|
43
|
+
if !decimals.nil? && decimals.size != 0
|
|
44
|
+
if (eval decimals) == nil
|
|
45
|
+
ostring += "##{decimals.size}"
|
|
46
|
+
elsif (eval decimals) == 0
|
|
47
|
+
ostring += decimals.size.to_s
|
|
48
|
+
end
|
|
49
|
+
else
|
|
50
|
+
ostring += decimals
|
|
51
|
+
end
|
|
52
|
+
ostring += sep.to_s
|
|
53
|
+
if !floats.nil? && floats.size != 0 # expo!!!
|
|
54
|
+
ostring += ((floats.size.to_s) +"f")
|
|
55
|
+
end
|
|
56
|
+
if sep.nil? && floats.nil? || floats.size == 0
|
|
57
|
+
ostring += "d"
|
|
58
|
+
end
|
|
59
|
+
ostring += (expo.to_s + postfix.to_s) #postfix '+' ?
|
|
60
|
+
return ostring
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Convert excel-style date formats into ruby DateTime strftime format strings
|
|
64
|
+
# @param [String] val an Excel number format string.
|
|
65
|
+
# @return [String] a DateTime::strftime format string.
|
|
66
|
+
def datetime formatcode
|
|
67
|
+
deminutified = formatcode.downcase.gsub(/(?<hrs>H|h)(?<div>.)m/, '\k<hrs>\k<div>i')
|
|
68
|
+
.gsub(/im/, 'ii')
|
|
69
|
+
.gsub(/m(?<div>.)(?<secs>s)/, 'i\k<div>\k<secs>')
|
|
70
|
+
.gsub(/mi/, 'ii')
|
|
71
|
+
return deminutified.gsub(/[yMmDdHhSsi]*/, Dtmap)
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# The Numberhelper module implements methods that return the formatted value or the value converted into a Ruby type (DateTime, Numeric, etc)
|
|
76
|
+
module Numberhelper
|
|
77
|
+
include Numformats
|
|
78
|
+
# Get the cell's value and excel format string and return a string, a ruby Numeric or a DateTime object accordingly
|
|
79
|
+
def to_ru
|
|
80
|
+
if !@value.numeric? || Numformats::Formatarray[@numformat.to_i][:xl] == nil || Numformats::Formatarray[@numformat.to_i][:xl].downcase == "general"
|
|
81
|
+
return @value
|
|
82
|
+
end
|
|
83
|
+
if Numformats::Formatarray[@numformat.to_i][:cls] == 'numeric' || Numformats::Formatarray[@numformat.to_i][:cls] == 'rational'
|
|
84
|
+
return eval @value
|
|
85
|
+
elsif Numformats::Formatarray[@numformat.to_i][:cls] == 'date'
|
|
86
|
+
return DateTime.new(1899, 12, 30) + (eval @value)
|
|
87
|
+
else
|
|
88
|
+
eval @value rescue @value
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Get the cell's value, convert it with to_ru and finally, format it based on the value's type.
|
|
93
|
+
def to_fmt
|
|
94
|
+
begin
|
|
95
|
+
if Numformats::Formatarray[@numformat][:cls] == 'date'
|
|
96
|
+
self.to_ru.strftime(datetime(Numformats::Formatarray[@numformat][:xl])) rescue @value
|
|
97
|
+
elsif Numformats::Formatarray[@numformat.to_i][:cls] == 'numeric' || Numformats::Formatarray[@numformat.to_i][:cls] == 'rational'
|
|
98
|
+
sprintf(numeric(Numformats::Formatarray[@numformat][:xl]), self.to_ru) rescue @value
|
|
99
|
+
else
|
|
100
|
+
return @value
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require 'ox'
|
|
2
|
+
module Oxcelix
|
|
3
|
+
|
|
4
|
+
# Ox based SAX parser which pushes the number formats (taken from the styles.xml file) to an array
|
|
5
|
+
# The reference taken from the cell's 's' attribute points to an element of the
|
|
6
|
+
# style array, which in turn points to a number format (numFmt) that can be
|
|
7
|
+
# either built-in (@formats) or defined in the styles.xml itself.
|
|
8
|
+
class Styles < ::Ox::Sax
|
|
9
|
+
attr_accessor :styleary, :xmlstack, :temparray
|
|
10
|
+
def initialize
|
|
11
|
+
@temparray=[]
|
|
12
|
+
@styleary=[]
|
|
13
|
+
@xmlstack = []
|
|
14
|
+
@numform={}
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def nf key, value
|
|
18
|
+
@numform[key]=value
|
|
19
|
+
if @numform.size == 2
|
|
20
|
+
@temparray << @numform
|
|
21
|
+
@numform = {}
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def numFmtId str
|
|
26
|
+
if @xmlstack[-2] == :cellXfs
|
|
27
|
+
@styleary << str
|
|
28
|
+
elsif @xmlstack[-2] == :numFmts
|
|
29
|
+
nf :numFmtId, str
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def formatCode str
|
|
34
|
+
nf :formatCode, str
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def start_element(name)
|
|
38
|
+
@xmlstack << name
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def end_element(name)
|
|
42
|
+
@xmlstack.pop
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def attr(name, str)
|
|
46
|
+
self.send name, str if self.respond_to?(name)
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
data/lib/oxcelix/sax/xlsheet.rb
CHANGED
|
@@ -62,8 +62,9 @@ module Oxcelix
|
|
|
62
62
|
end
|
|
63
63
|
end
|
|
64
64
|
|
|
65
|
-
#
|
|
66
|
-
# sharedStrings.xml file is done in the #Sharedstrings class
|
|
65
|
+
# Cell content is parsed here. For cells containing strings, interpolation using the
|
|
66
|
+
# sharedStrings.xml file is done in the #Sharedstrings class.
|
|
67
|
+
# The numformat attribute gets a value here based on the styles variable, to preserve the numeric formatting (thus the type) of values.
|
|
67
68
|
def text(str)
|
|
68
69
|
if @xmlstack.last == :c
|
|
69
70
|
if @cell.type != "shared" && @cell.type != "e" && str.numeric?
|
data/lib/oxcelix/sheet.rb
CHANGED
|
@@ -25,5 +25,15 @@ module Oxcelix
|
|
|
25
25
|
super(i,j[0])
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
|
+
|
|
29
|
+
def to_m(*attrs)
|
|
30
|
+
m=Matrix.build(self.col(0).length, self.row(0).length){nil}
|
|
31
|
+
self.each do |x, row, col|
|
|
32
|
+
if attrs.size == 0 || attrs.nil?
|
|
33
|
+
m[row, col]=x.value
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
return m
|
|
37
|
+
end
|
|
28
38
|
end
|
|
29
39
|
end
|
data/lib/oxcelix/workbook.rb
CHANGED
|
@@ -19,7 +19,10 @@ module Oxcelix
|
|
|
19
19
|
class Workbook
|
|
20
20
|
include Cellhelper
|
|
21
21
|
include Workbookhelper
|
|
22
|
+
include Numformats
|
|
23
|
+
|
|
22
24
|
attr_accessor :sheets
|
|
25
|
+
|
|
23
26
|
##
|
|
24
27
|
# Create a new {Workbook} object.
|
|
25
28
|
#
|
|
@@ -31,6 +34,8 @@ module Oxcelix
|
|
|
31
34
|
# the group of three merged cells <tt>| a |</tt> will become <tt>|a|a|a|</tt>
|
|
32
35
|
# * :include (Ary) - an array of sheet names to be included
|
|
33
36
|
# * :exclude (Ary) - an array of sheet names not to be processed
|
|
37
|
+
# * :values (Symbol) - cell values. This can be: :false, if the whole cell is needed, :excel, if the raw excel values need to be inserted
|
|
38
|
+
# and :ruby if ruby objects are preferred.
|
|
34
39
|
#
|
|
35
40
|
# The excel file is first getting unzipped, then the workbook.xml file gets
|
|
36
41
|
# processed. This file stores sheet metadata, which will be filtered (by including
|
|
@@ -56,10 +61,19 @@ module Oxcelix
|
|
|
56
61
|
@sheetbase={}
|
|
57
62
|
@sharedstrings=[]
|
|
58
63
|
|
|
59
|
-
f=IO.read(@destination+'/xl/workbook.xml')
|
|
64
|
+
f=IO.read(@destination + '/xl/workbook.xml')
|
|
60
65
|
@a=Ox::load(f)
|
|
61
66
|
|
|
62
67
|
sheetdata(options); commentsrel; shstrings;
|
|
68
|
+
|
|
69
|
+
styles = Styles.new()
|
|
70
|
+
File.open(@destination + '/xl/styles.xml', 'r') do |f|
|
|
71
|
+
Ox.sax_parse(styles, f)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
styles.temparray.sort_by!{|st| st[:numFmtId].to_i}
|
|
75
|
+
add_custom_formats styles.temparray
|
|
76
|
+
styles.styleary.map!{|s| Numformats::Formatarray[s.to_i][:id].to_i}
|
|
63
77
|
|
|
64
78
|
@sheets.each do |x|
|
|
65
79
|
|
|
@@ -70,6 +84,7 @@ module Oxcelix
|
|
|
70
84
|
end
|
|
71
85
|
comments = mkcomments(x[:comments])
|
|
72
86
|
@sheet.cellarray.each do |sh|
|
|
87
|
+
sh.numformat = styles.styleary[sh.style.to_i]
|
|
73
88
|
if sh.type=="s"
|
|
74
89
|
sh.value = @sharedstrings[sh.value.to_i]
|
|
75
90
|
end
|
|
@@ -85,7 +100,7 @@ module Oxcelix
|
|
|
85
100
|
x[:mergedcells] = @sheet.mergedcells
|
|
86
101
|
end
|
|
87
102
|
FileUtils.remove_dir(@destination, true)
|
|
88
|
-
matrixto
|
|
103
|
+
matrixto options[:copymerge]
|
|
89
104
|
end
|
|
90
105
|
|
|
91
106
|
private
|
|
@@ -196,14 +211,15 @@ module Oxcelix
|
|
|
196
211
|
# of each copied cell is changed to reflect the actual Excel coordinate.
|
|
197
212
|
#
|
|
198
213
|
# The matrix will replace the array of cells in the actual sheet.
|
|
199
|
-
# @param [Bool
|
|
214
|
+
# @param [Bool] copymerge
|
|
215
|
+
# @yield a value to be put as a cell. e.g: matrixto true, { |x| x = x.value.to_ru }
|
|
200
216
|
# @return [Matrix] a Matrix object that stores the cell values, and, depending on the copymerge parameter, will copy the merged value
|
|
201
217
|
# into every merged cell
|
|
202
218
|
def matrixto(copymerge)
|
|
203
219
|
@sheets.each_with_index do |sheet, i|
|
|
204
220
|
m=Sheet.build(sheet[:cells].last.y+1, sheet[:cells].last.x+1) {nil}
|
|
205
221
|
sheet[:cells].each do |c|
|
|
206
|
-
m[c.y, c.x]=c
|
|
222
|
+
m[c.y, c.x] = c
|
|
207
223
|
end
|
|
208
224
|
if copymerge==true
|
|
209
225
|
sheet[:mergedcells].each do |mc|
|
data/lib/oxcelix.rb
CHANGED
|
@@ -4,12 +4,15 @@ require 'matrix'
|
|
|
4
4
|
require 'fileutils'
|
|
5
5
|
require 'zip'
|
|
6
6
|
require 'oxcelix/cellhelper'
|
|
7
|
+
require 'oxcelix/numformats'
|
|
8
|
+
require 'oxcelix/nf'
|
|
7
9
|
require 'oxcelix/cell'
|
|
8
10
|
require 'oxcelix/sheet'
|
|
9
11
|
require 'oxcelix/workbook'
|
|
10
12
|
require 'oxcelix/sax/sharedstrings'
|
|
11
13
|
require 'oxcelix/sax/comments'
|
|
12
14
|
require 'oxcelix/sax/xlsheet'
|
|
15
|
+
require 'oxcelix/sax/styles'
|
|
13
16
|
|
|
14
17
|
class String
|
|
15
18
|
# Returns true if the given String represents a numeric value
|
data/oxcelix.gemspec
CHANGED
|
@@ -3,16 +3,20 @@
|
|
|
3
3
|
require 'rake'
|
|
4
4
|
Gem::Specification.new do |s|
|
|
5
5
|
s.name = 'oxcelix'
|
|
6
|
-
s.version = '0.
|
|
7
|
-
s.date = '2013-
|
|
6
|
+
s.version = '0.3.0'
|
|
7
|
+
s.date = '2013-11-12'
|
|
8
8
|
s.summary = 'A fast Excel 2007/2010 file parser'
|
|
9
|
-
s.description = 'A fast .xlsx file
|
|
9
|
+
s.description = 'A fast Excel 2007/2010 (.xlsx) file parser that returns a collection of Matrix objects'
|
|
10
10
|
s.authors = 'Giovanni Biczo'
|
|
11
11
|
s.homepage = 'http://github.com/gbiczo/oxcelix'
|
|
12
12
|
s.rubyforge_project = 'oxcelix'
|
|
13
13
|
|
|
14
14
|
s.files = FileList["LICENSE", "README.rdoc", "README.md",
|
|
15
|
-
"lib
|
|
15
|
+
"lib/oxcelix.rb", "lib/oxcelix/cellhelper.rb",
|
|
16
|
+
"lib/oxcelix/cell.rb", "lib/oxcelix/numformats.rb",
|
|
17
|
+
"lib/oxcelix/nf.rb",
|
|
18
|
+
"lib/oxcelix/sheet.rb", "lib/oxcelix/workbook.rb",
|
|
19
|
+
"lib/oxcelix/sax/*",
|
|
16
20
|
"oxcelix.gemspec", "spec/*", ".yardopts", "CHANGES"].to_a
|
|
17
21
|
s.license = 'MIT'
|
|
18
22
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: oxcelix
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2013-
|
|
12
|
+
date: 2013-11-12 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: ox
|
|
@@ -43,7 +43,8 @@ dependencies:
|
|
|
43
43
|
- - ! '>='
|
|
44
44
|
- !ruby/object:Gem::Version
|
|
45
45
|
version: 0.9.9
|
|
46
|
-
description: A fast .xlsx file
|
|
46
|
+
description: A fast Excel 2007/2010 (.xlsx) file parser that returns a collection
|
|
47
|
+
of Matrix objects
|
|
47
48
|
email:
|
|
48
49
|
executables: []
|
|
49
50
|
extensions: []
|
|
@@ -52,14 +53,16 @@ files:
|
|
|
52
53
|
- LICENSE
|
|
53
54
|
- README.rdoc
|
|
54
55
|
- README.md
|
|
55
|
-
- lib/lofaszka.rb
|
|
56
56
|
- lib/oxcelix.rb
|
|
57
|
+
- lib/oxcelix/cellhelper.rb
|
|
57
58
|
- lib/oxcelix/cell.rb
|
|
58
|
-
- lib/oxcelix/
|
|
59
|
+
- lib/oxcelix/numformats.rb
|
|
60
|
+
- lib/oxcelix/nf.rb
|
|
59
61
|
- lib/oxcelix/sheet.rb
|
|
60
|
-
- lib/oxcelix/
|
|
62
|
+
- lib/oxcelix/workbook.rb
|
|
61
63
|
- lib/oxcelix/sax/sharedstrings.rb
|
|
62
64
|
- lib/oxcelix/sax/xlsheet.rb
|
|
65
|
+
- lib/oxcelix/sax/styles.rb
|
|
63
66
|
- lib/oxcelix/sax/comments.rb
|
|
64
67
|
- oxcelix.gemspec
|
|
65
68
|
- spec/test.xlsx
|