simple-spreadsheet 0.0.5 → 0.0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. data/.gitignore +6 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +4 -0
  4. data/Gemfile.lock +60 -0
  5. data/README.md +94 -0
  6. data/Rakefile +6 -0
  7. data/lib/simple_spreadsheet.rb +114 -0
  8. data/lib/simple_spreadsheet/classes/csv_extended.rb +64 -0
  9. data/lib/simple_spreadsheet/classes/csvt_extended.rb +64 -0
  10. data/lib/simple_spreadsheet/classes/csvx_extended.rb +64 -0
  11. data/lib/simple_spreadsheet/classes/excel_extended.rb +37 -0
  12. data/lib/simple_spreadsheet/editors/csv_editor.rb +3 -0
  13. data/lib/simple_spreadsheet/editors/excel_editor.rb +3 -0
  14. data/lib/simple_spreadsheet/editors/excelx_editor.rb +3 -0
  15. data/lib/simple_spreadsheet/editors/excelxml_editor.rb +3 -0
  16. data/lib/simple_spreadsheet/editors/google_editor.rb +3 -0
  17. data/lib/simple_spreadsheet/editors/openoffice_editor.rb +3 -0
  18. data/lib/simple_spreadsheet/editors/spreadsheet_editor.rb +3 -0
  19. data/lib/simple_spreadsheet/exceptions.rb +5 -0
  20. data/lib/simple_spreadsheet/generic_sheet.rb +11 -0
  21. data/lib/simple_spreadsheet/modules/roo_module.rb +39 -0
  22. data/lib/simple_spreadsheet/readers/csv_reader.rb +12 -0
  23. data/lib/simple_spreadsheet/readers/csvt_reader.rb +12 -0
  24. data/lib/simple_spreadsheet/readers/csvx_reader.rb +12 -0
  25. data/lib/simple_spreadsheet/readers/excel_reader.rb +12 -0
  26. data/lib/simple_spreadsheet/readers/excelx_reader.rb +12 -0
  27. data/lib/simple_spreadsheet/readers/openoffice_reader.rb +12 -0
  28. data/lib/simple_spreadsheet/readers/spreadsheet_reader.rb +31 -0
  29. data/lib/simple_spreadsheet/version.rb +3 -0
  30. data/lib/simple_spreadsheet/writers/csv_writer.rb +3 -0
  31. data/lib/simple_spreadsheet/writers/excel_writer.rb +3 -0
  32. data/lib/simple_spreadsheet/writers/excelx_writer.rb +3 -0
  33. data/lib/simple_spreadsheet/writers/excelxml_writer.rb +3 -0
  34. data/lib/simple_spreadsheet/writers/google_writer.rb +3 -0
  35. data/lib/simple_spreadsheet/writers/openoffice_writer.rb +3 -0
  36. data/lib/simple_spreadsheet/writers/spreadsheet_writer.rb +3 -0
  37. data/simple_spreadsheet.gemspec +23 -0
  38. data/spec/fixtures/file.csv +1 -0
  39. data/spec/fixtures/file.csvt +1 -0
  40. data/spec/fixtures/file.csvx +1 -0
  41. data/spec/fixtures/file.ods +0 -0
  42. data/spec/fixtures/file.xls +0 -0
  43. data/spec/fixtures/file.xlsx +0 -0
  44. data/spec/simple_spreadsheet_csv_spec.rb +27 -0
  45. data/spec/simple_spreadsheet_csvt_spec.rb +27 -0
  46. data/spec/simple_spreadsheet_csvx_spec.rb +27 -0
  47. data/spec/simple_spreadsheet_ods_spec.rb +41 -0
  48. data/spec/simple_spreadsheet_spec.rb +7 -0
  49. data/spec/simple_spreadsheet_xls_spec.rb +41 -0
  50. data/spec/simple_spreadsheet_xlsx_spec.rb +41 -0
  51. data/spec/spec_helper.rb +1 -0
  52. metadata +76 -11
@@ -0,0 +1,6 @@
1
+ utils.txt
2
+ spec/.DS_Store
3
+ objects/
4
+ logs/
5
+ lib/.DS_Store
6
+ .DS_Store
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'http://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in simple_spreadsheet.gemspec
4
+ gemspec
@@ -0,0 +1,60 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ simple-spreadsheet (0.0.4.alpha)
5
+ roo (= 1.10.1)
6
+ rubyXL (= 1.2.5)
7
+ spreadsheet (= 0.6.5.9)
8
+
9
+ GEM
10
+ remote: http://rubygems.org/
11
+ specs:
12
+ addressable (2.2.6)
13
+ choice (0.1.4)
14
+ diff-lcs (1.1.3)
15
+ faraday (0.7.5)
16
+ addressable (~> 2.2.6)
17
+ multipart-post (~> 1.1.3)
18
+ rack (>= 1.1.0, < 2)
19
+ google-spreadsheet-ruby (0.1.6)
20
+ nokogiri (>= 1.4.3.1)
21
+ oauth (>= 0.3.6)
22
+ oauth2 (>= 0.5.0)
23
+ log4r (1.1.9)
24
+ multi_json (1.0.4)
25
+ multipart-post (1.1.4)
26
+ nokogiri (1.5.0)
27
+ oauth (0.4.5)
28
+ oauth2 (0.5.1)
29
+ faraday (~> 0.7.4)
30
+ multi_json (~> 1.0.3)
31
+ rack (1.4.1)
32
+ roo (1.10.1)
33
+ choice (>= 0.1.4)
34
+ google-spreadsheet-ruby (>= 0.1.5)
35
+ nokogiri (>= 1.5.0)
36
+ rubyzip (>= 0.9.4)
37
+ spreadsheet (> 0.6.4)
38
+ todonotes (>= 0.1.0)
39
+ rspec (2.6.0)
40
+ rspec-core (~> 2.6.0)
41
+ rspec-expectations (~> 2.6.0)
42
+ rspec-mocks (~> 2.6.0)
43
+ rspec-core (2.6.4)
44
+ rspec-expectations (2.6.0)
45
+ diff-lcs (~> 1.1.2)
46
+ rspec-mocks (2.6.0)
47
+ ruby-ole (1.2.11.2)
48
+ rubyXL (1.2.5)
49
+ rubyzip (0.9.5)
50
+ spreadsheet (0.6.5.9)
51
+ ruby-ole (>= 1.0)
52
+ todonotes (0.1.0)
53
+ log4r
54
+
55
+ PLATFORMS
56
+ ruby
57
+
58
+ DEPENDENCIES
59
+ rspec (~> 2.6.0)
60
+ simple-spreadsheet!
@@ -0,0 +1,94 @@
1
+ # Simple Spreadsheet
2
+
3
+ Recently a wrote a module to import raw data from Excel-like files to database and export it in various formats. To accomplish this i have to use different gems with different usage patterns so I decide to wrap them in a single simple gem. This is a spreadsheet reader and writer that (will) supports common formats: CSV (.csv), Excel (.xls, .xlsx), Open-office (.ods) and Google (online).
4
+
5
+ Used gems:
6
+
7
+ - Roo (http://roo.rubyforge.org/)
8
+ - Spreadsheet (http://spreadsheet.ch/)
9
+ - RubyXL (https://github.com/gilt/rubyXL)
10
+
11
+ ## Installing
12
+
13
+ Add to your Gemfile and run the `bundle` command to install it.
14
+
15
+ ```ruby
16
+ gem "simple-spreadsheet"
17
+ ```
18
+
19
+ **N.B. Requires Ruby 1.9.2 or later.**
20
+
21
+ ## Basic functionality
22
+
23
+ ### Reading Spreadsheet
24
+
25
+ Example:
26
+
27
+ ```ruby
28
+ s = SimpleSpreadsheet::Workbook.read("my_spreadsheets_file.xls")
29
+ ```
30
+
31
+ Supported formats:
32
+
33
+ <table>
34
+ <tr>
35
+ <th>Excel (.xls)</th>
36
+ <th>Excelx (.xlsx)</th>
37
+ <th>Openoffice (.ods)</th>
38
+ <th>CSV (.csv)</th>
39
+ <th>CSV Excel</th>
40
+ <th>CSV Tab Separated</th>
41
+ </tr>
42
+ <tr>
43
+ <td>Yes</td>
44
+ <td>Yes</td>
45
+ <td>Yes</td>
46
+ <td>Yes</td>
47
+ <td>Yes</td>
48
+ <td>Yes</td>
49
+ </tr>
50
+ </table>
51
+
52
+
53
+ ## Recipes
54
+
55
+ ### Get all data from some cols of first sheet of a XLS file
56
+
57
+ ```ruby
58
+ s = SimpleSpreadsheet::Workbook.read("my_spreadsheets_file.xls")
59
+ s.select_worksheet = s.sheets.first
60
+ s.first_row.upto(@workbook.last_row) do |line|
61
+ data1 = s.cell(line, 1)
62
+ data2 = s.cell(line, 3)
63
+ end
64
+ ```
65
+
66
+ ### Get all data from some cols of first sheet of a XLS file (option 2)
67
+
68
+ ```ruby
69
+ s = SimpleSpreadsheet::Workbook.read("my_spreadsheets_file.xls")
70
+ s.first_row.upto(@workbook.last_row) do |line|
71
+ data1 = s.cell(line, 1, 1)
72
+ data2 = s.cell(line, 3, 1)
73
+ end
74
+ ```
75
+
76
+ ### Accessing CSV Excel (semicolon separated)
77
+
78
+ ```ruby
79
+ s = SimpleSpreadsheet::Workbook.read("my_spreadsheets_file.csv", ".csvx")
80
+ ```
81
+
82
+ ### Accessing CSV Tab separated
83
+
84
+ ```ruby
85
+ s = SimpleSpreadsheet::Workbook.read("my_spreadsheets_file.csv", ".csvt")
86
+ ```
87
+
88
+ ## Future plans
89
+
90
+ - Reading support for all formats
91
+ - More efficent reading for big spreadsheets (extending Roo)
92
+ - Writing support for all formats
93
+ - More reading functionalities
94
+ - Edit support fo all formats
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+ require 'rspec/core/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new(:spec)
6
+ task default: :spec
@@ -0,0 +1,114 @@
1
+ require "simple_spreadsheet/version"
2
+
3
+ module SimpleSpreadsheet
4
+
5
+ class Workbook
6
+
7
+ def self.read(file, ext = nil)
8
+ ext = File.extname(file) if ext.nil?
9
+ case ext
10
+ when '.xls'
11
+ return ExcelReader.new(file)
12
+ when '.xlsx'
13
+ return ExcelxReader.new(file)
14
+ when '.ods'
15
+ return OpenofficeReader.new(file)
16
+ when '.csv'
17
+ return CsvReader.new(file)
18
+ when '.csvx'
19
+ return CsvxReader.new(file)
20
+ when '.csvt'
21
+ return CsvtReader.new(file)
22
+ else
23
+ return nil
24
+ end
25
+ end
26
+
27
+ def self.edit(file, ext = nil)
28
+ ext = File.extname(file) if ext.nil?
29
+ case ext
30
+ when '.xls'
31
+ ExcelEditor.new(file)
32
+ when '.xlsx'
33
+ ExcelxEditor.new(file)
34
+ when '.ods'
35
+ OpenofficeEditor.new(file)
36
+ when '.csv'
37
+ CsvEditor.new(file)
38
+ when '.csvz'
39
+ return CsvzEditor.new(file)
40
+ when '.csvt'
41
+ return CsvtEditor.new(file)
42
+ else
43
+ return nil
44
+ end
45
+ end
46
+
47
+ def self.write(file, ext = nil)
48
+ ext = File.extname(file) if ext.nil?
49
+ case ext
50
+ when '.xls'
51
+ ExcelWriter.new(file)
52
+ when '.xlsx'
53
+ ExcelxWriter.new(file)
54
+ when '.ods'
55
+ OpenofficeWriter.new(file)
56
+ when '.csv'
57
+ CsvWriter.new(file)
58
+ when '.csvz'
59
+ return CsvzWriter.new(file)
60
+ when '.csvt'
61
+ return CsvtWriter.new(file)
62
+ else
63
+ return nil
64
+ end
65
+ end
66
+
67
+ end
68
+
69
+ # General
70
+ require 'simple_spreadsheet/generic_sheet'
71
+
72
+ # Extendend classes
73
+ require 'simple_spreadsheet/classes/excel_extended'
74
+ require 'simple_spreadsheet/classes/csv_extended'
75
+ require 'simple_spreadsheet/classes/csvx_extended'
76
+ require 'simple_spreadsheet/classes/csvt_extended'
77
+
78
+ # General for mode
79
+ require 'simple_spreadsheet/readers/spreadsheet_reader'
80
+ require 'simple_spreadsheet/editors/spreadsheet_editor'
81
+ require 'simple_spreadsheet/writers/spreadsheet_writer'
82
+
83
+ # .xls (Excel 97-2003)
84
+ require 'simple_spreadsheet/readers/excel_reader'
85
+ require 'simple_spreadsheet/editors/excel_editor'
86
+ require 'simple_spreadsheet/writers/excel_writer'
87
+
88
+ # .xlsx (Excel 2007-2010)
89
+ require 'simple_spreadsheet/readers/excelx_reader'
90
+ require 'simple_spreadsheet/editors/excelx_editor'
91
+ require 'simple_spreadsheet/writers/excelx_writer'
92
+
93
+ # .ods (Openoffice)
94
+ require 'simple_spreadsheet/readers/openoffice_reader'
95
+ require 'simple_spreadsheet/editors/openoffice_editor'
96
+ require 'simple_spreadsheet/writers/openoffice_writer'
97
+
98
+ # .csv (CSV)
99
+ require 'simple_spreadsheet/readers/csv_reader'
100
+ require 'simple_spreadsheet/editors/csv_editor'
101
+ require 'simple_spreadsheet/writers/csv_writer'
102
+
103
+ # .csvx (CSV)
104
+ require 'simple_spreadsheet/readers/csvx_reader'
105
+
106
+ # .csvt (CSV)
107
+ require 'simple_spreadsheet/readers/csvt_reader'
108
+
109
+
110
+ end
111
+
112
+ # Gems
113
+ require 'roo'
114
+
@@ -0,0 +1,64 @@
1
+ require 'roo/generic_spreadsheet'
2
+ require 'roo/csv'
3
+
4
+ class CsvExtended < Csv
5
+ # def read_cells(sheet=nil)
6
+ # sheet = @default_sheet unless sheet
7
+ # @cell_type = {} unless @cell_type
8
+ # @cell = {} unless @cell
9
+ # @first_row[sheet] = 1
10
+ # @last_row[sheet] = 0
11
+ # @first_column[sheet] = 1
12
+ # @last_column[sheet] = 1
13
+ # rownum = 1
14
+ # CSV.foreach(@filename) do |row|
15
+ # row.each_with_index do |elem,i|
16
+ # @cell[[rownum,i+1]] = cell_postprocessing rownum,i+1, elem
17
+ # @cell_type[[rownum,i+1]] = celltype_class @cell[[rownum,i+1]]
18
+ # if i+1 > @last_column[sheet]
19
+ # @last_column[sheet] += 1
20
+ # end
21
+ # end
22
+ # rownum += 1
23
+ # @last_row[sheet] += 1
24
+ # end
25
+ # @cells_read[sheet] = true
26
+ # #-- adjust @first_row if neccessary
27
+ # loop do
28
+ # if !row(@first_row[sheet]).any? and @first_row[sheet] < @last_row[sheet]
29
+ # @first_row[sheet] += 1
30
+ # else
31
+ # break
32
+ # end
33
+ # end
34
+ # #-- adjust @last_row if neccessary
35
+ # loop do
36
+ # if !row(@last_row[sheet]).any? and @last_row[sheet] and
37
+ # @last_row[sheet] > @first_row[sheet]
38
+ # @last_row[sheet] -= 1
39
+ # else
40
+ # break
41
+ # end
42
+ # end
43
+ # #-- adjust @first_column if neccessary
44
+ # loop do
45
+ # if !column(@first_column[sheet]).any? and
46
+ # @first_column[sheet] and
47
+ # @first_column[sheet] < @last_column[sheet]
48
+ # @first_column[sheet] += 1
49
+ # else
50
+ # break
51
+ # end
52
+ # end
53
+ # #-- adjust @last_column if neccessary
54
+ # loop do
55
+ # if !column(@last_column[sheet]).any? and
56
+ # @last_column[sheet] and
57
+ # @last_column[sheet] > @first_column[sheet]
58
+ # @last_column[sheet] -= 1
59
+ # else
60
+ # break
61
+ # end
62
+ # end
63
+ # end
64
+ end
@@ -0,0 +1,64 @@
1
+ require 'roo/generic_spreadsheet'
2
+ require 'roo/csv'
3
+
4
+ class CsvtExtended < Csv
5
+ def read_cells(sheet=nil)
6
+ sheet = @default_sheet unless sheet
7
+ @cell_type = {} unless @cell_type
8
+ @cell = {} unless @cell
9
+ @first_row[sheet] = 1
10
+ @last_row[sheet] = 0
11
+ @first_column[sheet] = 1
12
+ @last_column[sheet] = 1
13
+ rownum = 1
14
+ CSV.foreach(@filename, {:col_sep => "\t"}) do |row|
15
+ row.each_with_index do |elem,i|
16
+ @cell[[rownum,i+1]] = cell_postprocessing rownum,i+1, elem
17
+ @cell_type[[rownum,i+1]] = celltype_class @cell[[rownum,i+1]]
18
+ if i+1 > @last_column[sheet]
19
+ @last_column[sheet] += 1
20
+ end
21
+ end
22
+ rownum += 1
23
+ @last_row[sheet] += 1
24
+ end
25
+ @cells_read[sheet] = true
26
+ #-- adjust @first_row if neccessary
27
+ loop do
28
+ if !row(@first_row[sheet]).any? and @first_row[sheet] < @last_row[sheet]
29
+ @first_row[sheet] += 1
30
+ else
31
+ break
32
+ end
33
+ end
34
+ #-- adjust @last_row if neccessary
35
+ loop do
36
+ if !row(@last_row[sheet]).any? and @last_row[sheet] and
37
+ @last_row[sheet] > @first_row[sheet]
38
+ @last_row[sheet] -= 1
39
+ else
40
+ break
41
+ end
42
+ end
43
+ #-- adjust @first_column if neccessary
44
+ loop do
45
+ if !column(@first_column[sheet]).any? and
46
+ @first_column[sheet] and
47
+ @first_column[sheet] < @last_column[sheet]
48
+ @first_column[sheet] += 1
49
+ else
50
+ break
51
+ end
52
+ end
53
+ #-- adjust @last_column if neccessary
54
+ loop do
55
+ if !column(@last_column[sheet]).any? and
56
+ @last_column[sheet] and
57
+ @last_column[sheet] > @first_column[sheet]
58
+ @last_column[sheet] -= 1
59
+ else
60
+ break
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,64 @@
1
+ require 'roo/generic_spreadsheet'
2
+ require 'roo/csv'
3
+
4
+ class CsvxExtended < Csv
5
+ def read_cells(sheet=nil)
6
+ sheet = @default_sheet unless sheet
7
+ @cell_type = {} unless @cell_type
8
+ @cell = {} unless @cell
9
+ @first_row[sheet] = 1
10
+ @last_row[sheet] = 0
11
+ @first_column[sheet] = 1
12
+ @last_column[sheet] = 1
13
+ rownum = 1
14
+ CSV.foreach(@filename, {:col_sep => ";"}) do |row|
15
+ row.each_with_index do |elem,i|
16
+ @cell[[rownum,i+1]] = cell_postprocessing rownum,i+1, elem
17
+ @cell_type[[rownum,i+1]] = celltype_class @cell[[rownum,i+1]]
18
+ if i+1 > @last_column[sheet]
19
+ @last_column[sheet] += 1
20
+ end
21
+ end
22
+ rownum += 1
23
+ @last_row[sheet] += 1
24
+ end
25
+ @cells_read[sheet] = true
26
+ #-- adjust @first_row if neccessary
27
+ loop do
28
+ if !row(@first_row[sheet]).any? and @first_row[sheet] < @last_row[sheet]
29
+ @first_row[sheet] += 1
30
+ else
31
+ break
32
+ end
33
+ end
34
+ #-- adjust @last_row if neccessary
35
+ loop do
36
+ if !row(@last_row[sheet]).any? and @last_row[sheet] and
37
+ @last_row[sheet] > @first_row[sheet]
38
+ @last_row[sheet] -= 1
39
+ else
40
+ break
41
+ end
42
+ end
43
+ #-- adjust @first_column if neccessary
44
+ loop do
45
+ if !column(@first_column[sheet]).any? and
46
+ @first_column[sheet] and
47
+ @first_column[sheet] < @last_column[sheet]
48
+ @first_column[sheet] += 1
49
+ else
50
+ break
51
+ end
52
+ end
53
+ #-- adjust @last_column if neccessary
54
+ loop do
55
+ if !column(@last_column[sheet]).any? and
56
+ @last_column[sheet] and
57
+ @last_column[sheet] > @first_column[sheet]
58
+ @last_column[sheet] -= 1
59
+ else
60
+ break
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,37 @@
1
+ require 'roo/generic_spreadsheet'
2
+ require 'roo/excel'
3
+
4
+ class ExcelExtended < Excel
5
+ # def read_cells(sheet=nil)
6
+ # sheet = @default_sheet unless sheet
7
+ # raise ArgumentError, "Error: sheet '#{sheet||'nil'}' not valid" if @default_sheet == nil and sheet==nil
8
+ # raise RangeError unless self.sheets.include? sheet
9
+ #
10
+ # if @cells_read[sheet]
11
+ # raise "sheet #{sheet} already read"
12
+ # end
13
+ #
14
+ # worksheet = @workbook.worksheet(sheet_no(sheet))
15
+ # row_index=1
16
+ # worksheet.each(0) do |row|
17
+ # (0..row.size).each do |cell_index|
18
+ # cell = row.at(cell_index)
19
+ # next if cell.nil? #skip empty cells
20
+ # next if cell.class == Spreadsheet::Formula && cell.value.nil? # skip empty formula cells
21
+ # if date_or_time?(row, cell_index)
22
+ # vt, v = read_cell_date_or_time(row, cell_index)
23
+ # else
24
+ # vt, v = read_cell(row, cell_index)
25
+ # end
26
+ # formula = tr = nil #TODO:???
27
+ # col_index = cell_index + 1
28
+ # font = row.format(cell_index).font
29
+ # font.extend(ExcelFontExtensions)
30
+ # set_cell_values(sheet,row_index,col_index,0,v,vt,formula,tr,font)
31
+ # end #row
32
+ # row_index += 1
33
+ # end # worksheet
34
+ # @cells_read[sheet] = true
35
+ # end
36
+
37
+ end
@@ -0,0 +1,3 @@
1
+ class CsvEditor < SpreadsheetEditor
2
+
3
+ end
@@ -0,0 +1,3 @@
1
+ class ExcelEditor < SpreadsheetEditor
2
+
3
+ end
@@ -0,0 +1,3 @@
1
+ class ExcelxEditor < SpreadsheetEditor
2
+
3
+ end
@@ -0,0 +1,3 @@
1
+ class ExcelxmlEditor < SpreadsheetEditor
2
+
3
+ end
@@ -0,0 +1,3 @@
1
+ class GoogleEditor < SpreadsheetEditor
2
+
3
+ end
@@ -0,0 +1,3 @@
1
+ class OpenofficeEditor < SpreadsheetEditor
2
+
3
+ end
@@ -0,0 +1,3 @@
1
+ class SpreadsheetEditor
2
+
3
+ end
@@ -0,0 +1,5 @@
1
+ class NotRecognizedModeException < Exception
2
+ end
3
+
4
+ class NotImplementedYetException < Exception
5
+ end
@@ -0,0 +1,11 @@
1
+ class GenericSheet
2
+
3
+ def initialize(file)
4
+ @path = file
5
+ end
6
+
7
+ def path
8
+ return @path
9
+ end
10
+
11
+ end
@@ -0,0 +1,39 @@
1
+ module RooModule
2
+
3
+ def sheets
4
+ @engine.sheets
5
+ end
6
+
7
+ def default_sheet=(sheet)
8
+ if sheet.is_a? Integer
9
+ @engine.default_sheet = @engine.sheets[sheet - 1]
10
+ else
11
+ @engine.default_sheet = sheet
12
+ end
13
+ end
14
+
15
+ def first_row
16
+ 1
17
+ end
18
+
19
+ def last_row
20
+ @engine.last_row
21
+ end
22
+
23
+ def cell(row, col, sheet=nil)
24
+ if sheet.is_a? Integer
25
+ @engine.cell(row, col, @engine.sheets[sheet - 1])
26
+ else
27
+ @engine.cell(row, col, sheet)
28
+ end
29
+ end
30
+
31
+ def celltype(row, col, sheet=nil)
32
+ if sheet.is_a? Integer
33
+ @engine.celltype(row, col, @engine.sheets[sheet - 1])
34
+ else
35
+ @engine.celltype(row, col, sheet)
36
+ end
37
+ end
38
+
39
+ end
@@ -0,0 +1,12 @@
1
+ require 'simple_spreadsheet/modules/roo_module'
2
+
3
+ class CsvReader < SpreadsheetReader
4
+
5
+ def initialize(file)
6
+ super
7
+ @engine = CsvExtended.new(@path) # Roo
8
+ end
9
+
10
+ include RooModule
11
+
12
+ end
@@ -0,0 +1,12 @@
1
+ require 'simple_spreadsheet/modules/roo_module'
2
+
3
+ class CsvtReader < SpreadsheetReader
4
+
5
+ def initialize(file)
6
+ super
7
+ @engine = CsvtExtended.new(@path) # Roo
8
+ end
9
+
10
+ include RooModule
11
+
12
+ end
@@ -0,0 +1,12 @@
1
+ require 'simple_spreadsheet/modules/roo_module'
2
+
3
+ class CsvxReader < SpreadsheetReader
4
+
5
+ def initialize(file)
6
+ super
7
+ @engine = CsvxExtended.new(@path) # Roo
8
+ end
9
+
10
+ include RooModule
11
+
12
+ end
@@ -0,0 +1,12 @@
1
+ require 'simple_spreadsheet/modules/roo_module'
2
+
3
+ class ExcelReader < SpreadsheetReader
4
+
5
+ def initialize(file)
6
+ super
7
+ @engine = ExcelExtended.new(@path) # Roo
8
+ end
9
+
10
+ include RooModule
11
+
12
+ end
@@ -0,0 +1,12 @@
1
+ require 'simple_spreadsheet/modules/roo_module'
2
+
3
+ class ExcelxReader < SpreadsheetReader
4
+
5
+ def initialize(file)
6
+ super
7
+ @engine = Excelx.new(file) # Roo
8
+ end
9
+
10
+ include RooModule
11
+
12
+ end
@@ -0,0 +1,12 @@
1
+ require 'simple_spreadsheet/modules/roo_module'
2
+
3
+ class OpenofficeReader < SpreadsheetReader
4
+
5
+ def initialize(file)
6
+ super
7
+ @engine = Openoffice.new(@path) # Roo
8
+ end
9
+
10
+ include RooModule
11
+
12
+ end
@@ -0,0 +1,31 @@
1
+ class SpreadsheetReader < GenericSheet
2
+
3
+ def sheets
4
+ # return array of sheets manes
5
+ end
6
+
7
+ def default_sheet=(sheet)
8
+ # set default sheet
9
+ end
10
+
11
+ def first_row
12
+ # return first row index
13
+ end
14
+
15
+ def last_row
16
+ # return last row index
17
+ end
18
+
19
+ def cell(row, col, sheet=nil)
20
+ # return cell content
21
+ end
22
+
23
+ def celltype(row, col, sheet=nil)
24
+ # return cell type
25
+ end
26
+
27
+ def parse(&block)
28
+ # cicle on each line and execute block
29
+ end
30
+
31
+ end
@@ -0,0 +1,3 @@
1
+ module SimpleSpreadsheet
2
+ VERSION = "0.0.5.1"
3
+ end
@@ -0,0 +1,3 @@
1
+ class CsvWriter < SpreadsheetWriter
2
+
3
+ end
@@ -0,0 +1,3 @@
1
+ class ExcelWriter < SpreadsheetWriter
2
+
3
+ end
@@ -0,0 +1,3 @@
1
+ class ExcelxWriter < SpreadsheetWriter
2
+
3
+ end
@@ -0,0 +1,3 @@
1
+ class ExcelxmlWriter < SpreadsheetWriter
2
+
3
+ end
@@ -0,0 +1,3 @@
1
+ class GoogleWriter < SpreadsheetWriter
2
+
3
+ end
@@ -0,0 +1,3 @@
1
+ class OpenofficeWriter < SpreadsheetWriter
2
+
3
+ end
@@ -0,0 +1,3 @@
1
+ class SpreadsheetWriter
2
+
3
+ end
@@ -0,0 +1,23 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/simple_spreadsheet/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Andrea Mostosi"]
6
+ gem.email = ["andrea.mostosi@zenkay.net"]
7
+ gem.description = %q{Simple spreadsheet reader for common formats: Excel (.xls, .xlsx), Open-office (.ods) and some CSV (standard, excel, tab separated). Future versions: writing and more formats.}
8
+ gem.summary = %q{Read and write most common spreadsheet format}
9
+ gem.homepage = "https://github.com/zenkay/simple-spreadsheet"
10
+
11
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
+ gem.files = `git ls-files`.split("\n")
13
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ gem.name = "simple-spreadsheet"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = SimpleSpreadsheet::VERSION
17
+
18
+ # specify any dependencies here; for example:
19
+ gem.add_development_dependency "rspec", "~> 2.6.0"
20
+ gem.add_runtime_dependency "roo", "1.10.1"
21
+ gem.add_runtime_dependency "spreadsheet", "0.6.5.9"
22
+ gem.add_runtime_dependency "rubyXL", "1.2.5"
23
+ end
@@ -0,0 +1 @@
1
+ String1,1
@@ -0,0 +1 @@
1
+ String1 1
@@ -0,0 +1 @@
1
+ String1;1
Binary file
Binary file
Binary file
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe SimpleSpreadsheet do
5
+
6
+ describe "Open CSV (.csv) file read-only mode" do
7
+ before do
8
+ @workbook = SimpleSpreadsheet::Workbook.read(File.join(File.dirname(__FILE__), "fixtures/file.csv"))
9
+ end
10
+ it "should can open the file" do
11
+ @workbook.should_not be_nil
12
+ end
13
+ it "should use right class" do
14
+ @workbook.class.to_s.should eq("CsvReader")
15
+ end
16
+ it "should see the right number of sheets" do
17
+ @workbook.sheets.count.should eq(1)
18
+ end
19
+ it "should read strings from first sheets" do
20
+ @workbook.cell(1,1).should eq("String1")
21
+ end
22
+ it "should read integer from first sheets" do
23
+ @workbook.cell(1,2).should eq("1")
24
+ end
25
+ end
26
+
27
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe SimpleSpreadsheet do
5
+
6
+ describe "Open CSV (.csvt) file read-only mode" do
7
+ before do
8
+ @workbook = SimpleSpreadsheet::Workbook.read(File.join(File.dirname(__FILE__), "fixtures/file.csvt"))
9
+ end
10
+ it "should can open the file" do
11
+ @workbook.should_not be_nil
12
+ end
13
+ it "should use right class" do
14
+ @workbook.class.to_s.should eq("CsvtReader")
15
+ end
16
+ it "should see the right number of sheets" do
17
+ @workbook.sheets.count.should eq(1)
18
+ end
19
+ it "should read strings from first sheets" do
20
+ @workbook.cell(1,1).should eq("String1")
21
+ end
22
+ it "should read integer from first sheets" do
23
+ @workbook.cell(1,2).should eq("1")
24
+ end
25
+ end
26
+
27
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe SimpleSpreadsheet do
5
+
6
+ describe "Open CSV (.csvx) file read-only mode" do
7
+ before do
8
+ @workbook = SimpleSpreadsheet::Workbook.read(File.join(File.dirname(__FILE__), "fixtures/file.csvx"), ".csvx")
9
+ end
10
+ it "should can open the file" do
11
+ @workbook.should_not be_nil
12
+ end
13
+ it "should use right class" do
14
+ @workbook.class.to_s.should eq("CsvxReader")
15
+ end
16
+ it "should see the right number of sheets" do
17
+ @workbook.sheets.count.should eq(1)
18
+ end
19
+ it "should read strings from first sheets" do
20
+ @workbook.cell(1,1).should eq("String1")
21
+ end
22
+ it "should read integer from first sheets" do
23
+ @workbook.cell(1,2).should eq("1")
24
+ end
25
+ end
26
+
27
+ end
@@ -0,0 +1,41 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe SimpleSpreadsheet do
5
+
6
+ describe "Open Openoffice (.ods) file read-only mode" do
7
+ before do
8
+ @workbook = SimpleSpreadsheet::Workbook.read(File.join(File.dirname(__FILE__), "fixtures/file.ods"))
9
+ end
10
+ it "should can open the file" do
11
+ @workbook.should_not be_nil
12
+ end
13
+ it "should use right class" do
14
+ @workbook.class.to_s.should eq("OpenofficeReader")
15
+ end
16
+ it "should see the right number of sheets" do
17
+ @workbook.sheets.count.should eq(2)
18
+ end
19
+ it "should read strings from first sheets" do
20
+ @workbook.cell(1,1).should eq("String1")
21
+ end
22
+ it "should read integer from first sheets" do
23
+ @workbook.cell(1,2).should eq(1)
24
+ end
25
+ it "should read strings from other sheets" do
26
+ @workbook.cell(1, 1, 2).should eq("String2")
27
+ end
28
+ it "should read integer from other sheets" do
29
+ @workbook.cell(1, 2, 2).should eq(2)
30
+ end
31
+ it "should read strings from other sheets (way 2)" do
32
+ @workbook.default_sheet = 2
33
+ @workbook.cell(1, 1).should eq("String2")
34
+ end
35
+ it "should read integer from other sheets (way 2)" do
36
+ @workbook.default_sheet = 2
37
+ @workbook.cell(1, 2).should eq(2)
38
+ end
39
+ end
40
+
41
+ end
@@ -0,0 +1,7 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe SimpleSpreadsheet do
5
+
6
+
7
+ end
@@ -0,0 +1,41 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe SimpleSpreadsheet do
5
+
6
+ describe "Open Excel (.xls) file read-only mode" do
7
+ before do
8
+ @workbook = SimpleSpreadsheet::Workbook.read(File.join(File.dirname(__FILE__), "fixtures/file.xls"))
9
+ end
10
+ it "should can open the file" do
11
+ @workbook.should_not be_nil
12
+ end
13
+ it "should use right class" do
14
+ @workbook.class.to_s.should eq("ExcelReader")
15
+ end
16
+ it "should see the right number of sheets" do
17
+ @workbook.sheets.count.should eq(2)
18
+ end
19
+ it "should read strings from first sheets" do
20
+ @workbook.cell(1, 1).should eq("String1")
21
+ end
22
+ it "should read integer from first sheets" do
23
+ @workbook.cell(1, 2).should eq(1)
24
+ end
25
+ it "should read strings from other sheets" do
26
+ @workbook.cell(1, 1, 2).should eq("String2")
27
+ end
28
+ it "should read integer from other sheets" do
29
+ @workbook.cell(1, 2, 2).should eq(2)
30
+ end
31
+ it "should read strings from other sheets (way 2)" do
32
+ @workbook.default_sheet = 2
33
+ @workbook.cell(1, 1).should eq("String2")
34
+ end
35
+ it "should read integer from other sheets (way 2)" do
36
+ @workbook.default_sheet = 2
37
+ @workbook.cell(1, 2).should eq(2)
38
+ end
39
+ end
40
+
41
+ end
@@ -0,0 +1,41 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe SimpleSpreadsheet do
5
+
6
+ describe "Open Excelx (.xlsx) file read-only mode" do
7
+ before do
8
+ @workbook = SimpleSpreadsheet::Workbook.read(File.join(File.dirname(__FILE__), "fixtures/file.xlsx"))
9
+ end
10
+ it "should can open the file" do
11
+ @workbook.should_not be_nil
12
+ end
13
+ it "should use right class" do
14
+ @workbook.class.to_s.should eq("ExcelxReader")
15
+ end
16
+ it "should see the right number of sheets" do
17
+ @workbook.sheets.count.should eq(2)
18
+ end
19
+ it "should read strings from first sheets" do
20
+ @workbook.cell(1,1).should eq("String1")
21
+ end
22
+ it "should read integer from first sheets" do
23
+ @workbook.cell(1,2).should eq(1)
24
+ end
25
+ it "should read strings from other sheets" do
26
+ @workbook.cell(1, 1, 2).should eq("String2")
27
+ end
28
+ it "should read integer from other sheets" do
29
+ @workbook.cell(1, 2, 2).should eq(2)
30
+ end
31
+ it "should read strings from other sheets (way 2)" do
32
+ @workbook.default_sheet = 2
33
+ @workbook.cell(1, 1).should eq("String2")
34
+ end
35
+ it "should read integer from other sheets (way 2)" do
36
+ @workbook.default_sheet = 2
37
+ @workbook.cell(1, 2).should eq(2)
38
+ end
39
+ end
40
+
41
+ end
@@ -0,0 +1 @@
1
+ require 'simple-spreadsheet'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple-spreadsheet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.5.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-04-03 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70238295738920 !ruby/object:Gem::Requirement
16
+ requirement: &70314673199160 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.6.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70238295738920
24
+ version_requirements: *70314673199160
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: roo
27
- requirement: &70238295738420 !ruby/object:Gem::Requirement
27
+ requirement: &70314673198580 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - =
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.10.1
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70238295738420
35
+ version_requirements: *70314673198580
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: spreadsheet
38
- requirement: &70238295737960 !ruby/object:Gem::Requirement
38
+ requirement: &70314673198100 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - =
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.6.5.9
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70238295737960
46
+ version_requirements: *70314673198100
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rubyXL
49
- requirement: &70238295737500 !ruby/object:Gem::Requirement
49
+ requirement: &70314673197640 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - =
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: 1.2.5
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70238295737500
57
+ version_requirements: *70314673197640
58
58
  description: ! 'Simple spreadsheet reader for common formats: Excel (.xls, .xlsx),
59
59
  Open-office (.ods) and some CSV (standard, excel, tab separated). Future versions:
60
60
  writing and more formats.'
@@ -63,7 +63,58 @@ email:
63
63
  executables: []
64
64
  extensions: []
65
65
  extra_rdoc_files: []
66
- files: []
66
+ files:
67
+ - .gitignore
68
+ - .rspec
69
+ - Gemfile
70
+ - Gemfile.lock
71
+ - README.md
72
+ - Rakefile
73
+ - lib/simple_spreadsheet.rb
74
+ - lib/simple_spreadsheet/classes/csv_extended.rb
75
+ - lib/simple_spreadsheet/classes/csvt_extended.rb
76
+ - lib/simple_spreadsheet/classes/csvx_extended.rb
77
+ - lib/simple_spreadsheet/classes/excel_extended.rb
78
+ - lib/simple_spreadsheet/editors/csv_editor.rb
79
+ - lib/simple_spreadsheet/editors/excel_editor.rb
80
+ - lib/simple_spreadsheet/editors/excelx_editor.rb
81
+ - lib/simple_spreadsheet/editors/excelxml_editor.rb
82
+ - lib/simple_spreadsheet/editors/google_editor.rb
83
+ - lib/simple_spreadsheet/editors/openoffice_editor.rb
84
+ - lib/simple_spreadsheet/editors/spreadsheet_editor.rb
85
+ - lib/simple_spreadsheet/exceptions.rb
86
+ - lib/simple_spreadsheet/generic_sheet.rb
87
+ - lib/simple_spreadsheet/modules/roo_module.rb
88
+ - lib/simple_spreadsheet/readers/csv_reader.rb
89
+ - lib/simple_spreadsheet/readers/csvt_reader.rb
90
+ - lib/simple_spreadsheet/readers/csvx_reader.rb
91
+ - lib/simple_spreadsheet/readers/excel_reader.rb
92
+ - lib/simple_spreadsheet/readers/excelx_reader.rb
93
+ - lib/simple_spreadsheet/readers/openoffice_reader.rb
94
+ - lib/simple_spreadsheet/readers/spreadsheet_reader.rb
95
+ - lib/simple_spreadsheet/version.rb
96
+ - lib/simple_spreadsheet/writers/csv_writer.rb
97
+ - lib/simple_spreadsheet/writers/excel_writer.rb
98
+ - lib/simple_spreadsheet/writers/excelx_writer.rb
99
+ - lib/simple_spreadsheet/writers/excelxml_writer.rb
100
+ - lib/simple_spreadsheet/writers/google_writer.rb
101
+ - lib/simple_spreadsheet/writers/openoffice_writer.rb
102
+ - lib/simple_spreadsheet/writers/spreadsheet_writer.rb
103
+ - simple_spreadsheet.gemspec
104
+ - spec/fixtures/file.csv
105
+ - spec/fixtures/file.csvt
106
+ - spec/fixtures/file.csvx
107
+ - spec/fixtures/file.ods
108
+ - spec/fixtures/file.xls
109
+ - spec/fixtures/file.xlsx
110
+ - spec/simple_spreadsheet_csv_spec.rb
111
+ - spec/simple_spreadsheet_csvt_spec.rb
112
+ - spec/simple_spreadsheet_csvx_spec.rb
113
+ - spec/simple_spreadsheet_ods_spec.rb
114
+ - spec/simple_spreadsheet_spec.rb
115
+ - spec/simple_spreadsheet_xls_spec.rb
116
+ - spec/simple_spreadsheet_xlsx_spec.rb
117
+ - spec/spec_helper.rb
67
118
  homepage: https://github.com/zenkay/simple-spreadsheet
68
119
  licenses: []
69
120
  post_install_message:
@@ -88,4 +139,18 @@ rubygems_version: 1.8.6
88
139
  signing_key:
89
140
  specification_version: 3
90
141
  summary: Read and write most common spreadsheet format
91
- test_files: []
142
+ test_files:
143
+ - spec/fixtures/file.csv
144
+ - spec/fixtures/file.csvt
145
+ - spec/fixtures/file.csvx
146
+ - spec/fixtures/file.ods
147
+ - spec/fixtures/file.xls
148
+ - spec/fixtures/file.xlsx
149
+ - spec/simple_spreadsheet_csv_spec.rb
150
+ - spec/simple_spreadsheet_csvt_spec.rb
151
+ - spec/simple_spreadsheet_csvx_spec.rb
152
+ - spec/simple_spreadsheet_ods_spec.rb
153
+ - spec/simple_spreadsheet_spec.rb
154
+ - spec/simple_spreadsheet_xls_spec.rb
155
+ - spec/simple_spreadsheet_xlsx_spec.rb
156
+ - spec/spec_helper.rb