roo 1.10.1 → 1.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. data/.gitignore +2 -0
  2. data/Gemfile +4 -0
  3. data/Gemfile.lock +38 -0
  4. data/History.txt +4 -4
  5. data/License.txt +20 -0
  6. data/Manifest.txt +68 -0
  7. data/README.markdown +109 -0
  8. data/Rakefile +5 -4
  9. data/bin/roo +0 -0
  10. data/examples/roo_soap_client.rb +53 -0
  11. data/examples/roo_soap_server.rb +29 -0
  12. data/examples/write_me.rb +33 -0
  13. data/lib/roo.rb +20 -61
  14. data/lib/roo/csv.rb +13 -11
  15. data/lib/roo/excel.rb +108 -219
  16. data/lib/roo/excel2003xml.rb +312 -0
  17. data/lib/roo/excelx.rb +205 -341
  18. data/lib/roo/generic_spreadsheet.rb +371 -268
  19. data/lib/roo/google.rb +64 -54
  20. data/lib/roo/openoffice.rb +101 -156
  21. data/lib/roo/roo_rails_helper.rb +5 -5
  22. data/lib/roo/worksheet.rb +18 -0
  23. data/roo.gemspec +43 -0
  24. data/scripts/txt2html +67 -0
  25. data/test/all_ss.rb +8 -10
  26. data/test/{1900_base.xls → files/1900_base.xls} +0 -0
  27. data/test/{1904_base.xls → files/1904_base.xls} +0 -0
  28. data/test/{Bibelbund.csv → files/Bibelbund.csv} +0 -0
  29. data/test/{Bibelbund.ods → files/Bibelbund.ods} +0 -0
  30. data/test/{Bibelbund.xls → files/Bibelbund.xls} +0 -0
  31. data/test/{Bibelbund.xlsx → files/Bibelbund.xlsx} +0 -0
  32. data/test/files/Bibelbund.xml +62518 -0
  33. data/test/{Bibelbund1.ods → files/Bibelbund1.ods} +0 -0
  34. data/test/{Pfand_from_windows_phone.xlsx → files/Pfand_from_windows_phone.xlsx} +0 -0
  35. data/test/files/bad_excel_date.xls +0 -0
  36. data/test/{bbu.ods → files/bbu.ods} +0 -0
  37. data/test/{bbu.xls → files/bbu.xls} +0 -0
  38. data/test/{bbu.xlsx → files/bbu.xlsx} +0 -0
  39. data/test/files/bbu.xml +152 -0
  40. data/test/{bode-v1.ods.zip → files/bode-v1.ods.zip} +0 -0
  41. data/test/{bode-v1.xls.zip → files/bode-v1.xls.zip} +0 -0
  42. data/test/{boolean.ods → files/boolean.ods} +0 -0
  43. data/test/{boolean.xls → files/boolean.xls} +0 -0
  44. data/test/{boolean.xlsx → files/boolean.xlsx} +0 -0
  45. data/test/files/boolean.xml +112 -0
  46. data/test/{borders.ods → files/borders.ods} +0 -0
  47. data/test/{borders.xls → files/borders.xls} +0 -0
  48. data/test/{borders.xlsx → files/borders.xlsx} +0 -0
  49. data/test/files/borders.xml +144 -0
  50. data/test/{bug-row-column-fixnum-float.xls → files/bug-row-column-fixnum-float.xls} +0 -0
  51. data/test/files/bug-row-column-fixnum-float.xml +127 -0
  52. data/test/{comments.ods → files/comments.ods} +0 -0
  53. data/test/{comments.xls → files/comments.xls} +0 -0
  54. data/test/{comments.xlsx → files/comments.xlsx} +0 -0
  55. data/test/{csvtypes.csv → files/csvtypes.csv} +0 -0
  56. data/test/{datetime.ods → files/datetime.ods} +0 -0
  57. data/test/{datetime.xls → files/datetime.xls} +0 -0
  58. data/test/{datetime.xlsx → files/datetime.xlsx} +0 -0
  59. data/test/files/datetime.xml +142 -0
  60. data/test/{datetime_floatconv.xls → files/datetime_floatconv.xls} +0 -0
  61. data/test/files/datetime_floatconv.xml +148 -0
  62. data/test/{dreimalvier.ods → files/dreimalvier.ods} +0 -0
  63. data/test/{emptysheets.ods → files/emptysheets.ods} +0 -0
  64. data/test/{emptysheets.xls → files/emptysheets.xls} +0 -0
  65. data/test/{emptysheets.xlsx → files/emptysheets.xlsx} +0 -0
  66. data/test/files/emptysheets.xml +105 -0
  67. data/test/files/excel2003.xml +21140 -0
  68. data/test/{false_encoding.xls → files/false_encoding.xls} +0 -0
  69. data/test/files/false_encoding.xml +132 -0
  70. data/test/{formula.ods → files/formula.ods} +0 -0
  71. data/test/{formula.xls → files/formula.xls} +0 -0
  72. data/test/{formula.xlsx → files/formula.xlsx} +0 -0
  73. data/test/files/formula.xml +134 -0
  74. data/test/files/formula_parse_error.xls +0 -0
  75. data/test/files/formula_parse_error.xml +1833 -0
  76. data/test/{formula_string_error.xlsx → files/formula_string_error.xlsx} +0 -0
  77. data/test/{html-escape.ods → files/html-escape.ods} +0 -0
  78. data/test/{matrix.ods → files/matrix.ods} +0 -0
  79. data/test/{matrix.xls → files/matrix.xls} +0 -0
  80. data/test/{named_cells.ods → files/named_cells.ods} +0 -0
  81. data/test/{named_cells.xls → files/named_cells.xls} +0 -0
  82. data/test/{named_cells.xlsx → files/named_cells.xlsx} +0 -0
  83. data/test/{no_spreadsheet_file.txt → files/no_spreadsheet_file.txt} +0 -0
  84. data/test/{numbers1.csv → files/numbers1.csv} +0 -0
  85. data/test/{numbers1.ods → files/numbers1.ods} +0 -0
  86. data/test/{numbers1.xls → files/numbers1.xls} +0 -0
  87. data/test/{numbers1.xlsx → files/numbers1.xlsx} +0 -0
  88. data/test/files/numbers1.xml +312 -0
  89. data/test/{only_one_sheet.ods → files/only_one_sheet.ods} +0 -0
  90. data/test/{only_one_sheet.xls → files/only_one_sheet.xls} +0 -0
  91. data/test/{only_one_sheet.xlsx → files/only_one_sheet.xlsx} +0 -0
  92. data/test/files/only_one_sheet.xml +67 -0
  93. data/test/{paragraph.ods → files/paragraph.ods} +0 -0
  94. data/test/{paragraph.xls → files/paragraph.xls} +0 -0
  95. data/test/{paragraph.xlsx → files/paragraph.xlsx} +0 -0
  96. data/test/files/paragraph.xml +127 -0
  97. data/test/{prova.xls → files/prova.xls} +0 -0
  98. data/test/{ric.ods → files/ric.ods} +0 -0
  99. data/test/{simple_spreadsheet.ods → files/simple_spreadsheet.ods} +0 -0
  100. data/test/{simple_spreadsheet.xls → files/simple_spreadsheet.xls} +0 -0
  101. data/test/{simple_spreadsheet.xlsx → files/simple_spreadsheet.xlsx} +0 -0
  102. data/test/files/simple_spreadsheet.xml +225 -0
  103. data/test/{simple_spreadsheet_from_italo.ods → files/simple_spreadsheet_from_italo.ods} +0 -0
  104. data/test/{simple_spreadsheet_from_italo.xls → files/simple_spreadsheet_from_italo.xls} +0 -0
  105. data/test/files/simple_spreadsheet_from_italo.xml +242 -0
  106. data/test/{so_datetime.csv → files/so_datetime.csv} +0 -0
  107. data/test/{style.ods → files/style.ods} +0 -0
  108. data/test/{style.xls → files/style.xls} +0 -0
  109. data/test/{style.xlsx → files/style.xlsx} +0 -0
  110. data/test/files/style.xml +154 -0
  111. data/test/{time-test.csv → files/time-test.csv} +0 -0
  112. data/test/{time-test.ods → files/time-test.ods} +0 -0
  113. data/test/{time-test.xls → files/time-test.xls} +0 -0
  114. data/test/{time-test.xlsx → files/time-test.xlsx} +0 -0
  115. data/test/files/time-test.xml +131 -0
  116. data/test/{type_excel.ods → files/type_excel.ods} +0 -0
  117. data/test/{type_excel.xlsx → files/type_excel.xlsx} +0 -0
  118. data/test/{type_excelx.ods → files/type_excelx.ods} +0 -0
  119. data/test/{type_excelx.xls → files/type_excelx.xls} +0 -0
  120. data/test/{type_openoffice.xls → files/type_openoffice.xls} +0 -0
  121. data/test/{type_openoffice.xlsx → files/type_openoffice.xlsx} +0 -0
  122. data/test/{whitespace.ods → files/whitespace.ods} +0 -0
  123. data/test/{whitespace.xls → files/whitespace.xls} +0 -0
  124. data/test/{whitespace.xlsx → files/whitespace.xlsx} +0 -0
  125. data/test/files/whitespace.xml +184 -0
  126. data/test/test_generic_spreadsheet.rb +257 -0
  127. data/test/test_helper.rb +167 -27
  128. data/test/test_roo.rb +1178 -930
  129. data/website/index.html +385 -0
  130. data/website/index.txt +423 -0
  131. data/website/javascripts/rounded_corners_lite.inc.js +285 -0
  132. data/website/stylesheets/screen.css +130 -0
  133. data/website/template.rhtml +48 -0
  134. metadata +151 -121
  135. data/README.txt +0 -110
  136. data/lib/roo/.csv.rb.swp +0 -0
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ pkg/
2
+ test/log/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'http://rubygems.org'
2
+
3
+ # pull reqs from gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,38 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ roo (1.10.1)
5
+ nokogiri (>= 1.5.2)
6
+ rubyzip (>= 0.9.6.1)
7
+ spreadsheet (> 0.6.4)
8
+
9
+ GEM
10
+ remote: http://rubygems.org/
11
+ specs:
12
+ bones (3.8.0)
13
+ little-plugger (~> 1.1.3)
14
+ loquacious (~> 1.9.1)
15
+ rake (>= 0.8.7)
16
+ little-plugger (1.1.3)
17
+ loquacious (1.9.1)
18
+ nokogiri (1.5.5)
19
+ nokogiri (1.5.5-java)
20
+ rake (0.9.2.2)
21
+ ruby-ole (1.2.11.4)
22
+ rubyzip (0.9.9)
23
+ shoulda (3.0.1)
24
+ shoulda-context (~> 1.0.0)
25
+ shoulda-matchers (~> 1.0.0)
26
+ shoulda-context (1.0.0)
27
+ shoulda-matchers (1.0.0)
28
+ spreadsheet (0.7.3)
29
+ ruby-ole (>= 1.0)
30
+
31
+ PLATFORMS
32
+ java
33
+ ruby
34
+
35
+ DEPENDENCIES
36
+ bones (>= 3.8.0)
37
+ roo!
38
+ shoulda (~> 3.0)
data/History.txt CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  * 2 bugfixes
4
4
  * forgot dependency 'rubyzip'
5
- * at least one external application does create xlsx-files with different internal file names which differ from the original file names of Excel. Solution: ignore lower-/upper case in file names.
5
+ * at least one external application does create xlsx-files with different internal file names which differ from the original file names of Excel. Solution: ignore lower-/upper case in file names.
6
6
 
7
7
  == 1.10.0 2011-10-10
8
8
 
@@ -11,7 +11,7 @@
11
11
  * Openoffice, Libreoffice: new method 'labels'
12
12
  * Excelx: implemented all methods concerning labels
13
13
  * Openoffice, Excelx: new methods concerning comments (comment, comment? and comments)
14
-
14
+
15
15
  * 2 bugfixes
16
16
  * XLSX: some cells were not recognized correctly from a spreadsheet file from a windows mobile phone.
17
17
  * labels: Moved to a separate methode. There were problems if there was an access to a label before read_cells were called.
@@ -51,11 +51,11 @@
51
51
  * 1 enhancement
52
52
  * removed gem 'builder'. Functionality goes to gem 'nokogiri'.
53
53
  * 3 bugfixes
54
- * Excel: remove temporary files if spreadsheed-file is not an excel file
54
+ * Excel: remove temporary files if spreadsheed-file is not an excel file
55
55
  and an exception was raised
56
56
  * Excelx: a referenced cell with a string had the content 0.0 not the
57
57
  correct string
58
- * Fixed a problem with a date cell which was not recognized as a Date
58
+ * Fixed a problem with a date cell which was not recognized as a Date
59
59
  object (see 2011-05-21 in excelx.rb)
60
60
 
61
61
  == 1.9.3 2010-02-12
data/License.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008-2011 Thomas Preymesser
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Manifest.txt ADDED
@@ -0,0 +1,68 @@
1
+ History.txt
2
+ License.txt
3
+ Manifest.txt
4
+ README.txt
5
+ Rakefile
6
+ base64include.rb
7
+ examples/roo_soap_server.rb
8
+ examples/roo_soap_client.rb
9
+ examples/write_me.rb
10
+ lib/roo.rb
11
+ lib/roo/version.rb
12
+ lib/roo/generic_spreadsheet.rb
13
+ lib/roo/openoffice.rb
14
+ lib/roo/excel.rb
15
+ lib/roo/excelx.rb
16
+ lib/roo/google.rb
17
+ lib/roo/roo_rails_helper.rb
18
+ scripts/txt2html
19
+ setup.rb
20
+ test/false_encoding.xls
21
+ test/Bibelbund1.ods
22
+ test/Bibelbund.ods
23
+ test/Bibelbund.xls
24
+ test/Bibelbund.xlsx
25
+ test/Bibelbund.csv
26
+ test/bbu.xls
27
+ test/bbu.xlsx
28
+ test/bbu.ods
29
+ test/no_spreadsheet_file.txt
30
+ test/simple_spreadsheet.ods
31
+ test/simple_spreadsheet.xls
32
+ test/simple_spreadsheet.xlsx
33
+ test/simple_spreadsheet_from_italo.ods
34
+ test/simple_spreadsheet_from_italo.xls
35
+ test/test_helper.rb
36
+ test/test_roo.rb
37
+ test/time-test.ods
38
+ test/time-test.xls
39
+ test/time-test.xlsx
40
+ test/time-test.csv
41
+ test/numbers1.csv
42
+ test/numbers1_excel.csv
43
+ test/numbers1.ods
44
+ test/numbers1.xls
45
+ test/numbers1.xlsx
46
+ test/borders.ods
47
+ test/borders.xls
48
+ test/borders.xlsx
49
+ test/formula.ods
50
+ test/formula.xls
51
+ test/formula.xlsx
52
+ test/only_one_sheet.ods
53
+ test/only_one_sheet.xls
54
+ test/only_one_sheet.xlsx
55
+ test/bode-v1.xls.zip
56
+ test/bode-v1.ods.zip
57
+ test/ric.ods
58
+ test/bug-row-column-fixnum-float.xls
59
+ test/emptysheets.ods
60
+ test/emptysheets.xls
61
+ test/datetime.ods
62
+ test/datetime.xls
63
+ test/datetime.xlsx
64
+ website/index.html
65
+ website/index.txt
66
+ website/javascripts/rounded_corners_lite.inc.js
67
+ website/stylesheets/screen.css
68
+ website/template.rhtml
data/README.markdown ADDED
@@ -0,0 +1,109 @@
1
+ # README for Roo
2
+
3
+ Roo implements read access for all spreadsheet types and read/write access for
4
+ Google spreadsheets. It can handle
5
+ * Openoffice
6
+ * Excel
7
+ * Google spreadsheets
8
+ * Excelx
9
+ * Libreoffice
10
+ * CSV
11
+
12
+ Using Roo to access Google spreadsheets requires you install the 'google-spreadsheet-ruby' gem separately.
13
+
14
+ Unless the underlying 'spreadsheet' gem supports formulas there is no support
15
+ for formulas in Roo for .xls files (you get the result of a formula in such a
16
+ file but not the formula itself)
17
+
18
+ ## Usage:
19
+
20
+ require 'roo'
21
+
22
+ s = Openoffice.new("myspreadsheet.ods") # creates an Openoffice Spreadsheet instance
23
+ s = Excel.new("myspreadsheet.xls") # creates an Excel Spreadsheet instance
24
+ s = Google.new("myspreadsheetkey_at_google") # creates an Google Spreadsheet instance
25
+ s = Excelx.new("myspreadsheet.xlsx") # creates an Excel Spreadsheet instance for Excel .xlsx files
26
+
27
+ s.default_sheet = s.sheets.first # first sheet in the spreadsheet file will be used
28
+
29
+ # s.sheet is an array which holds the names of the sheets within
30
+ # a spreadsheet.
31
+ # you can also write
32
+ # s.default_sheet = s.sheets[3] or
33
+ # s.default_sheet = 'Sheet 3'
34
+
35
+ s.cell(1,1) # returns the content of the first row/first cell in the sheet
36
+ s.cell('A',1) # same cell
37
+ s.cell(1,'A') # same cell
38
+ s.cell(1,'A',s.sheets[0]) # same cell
39
+
40
+ # almost all methods have an optional argument 'sheet'.
41
+ # If this parameter is omitted, the default_sheet will be used.
42
+
43
+ s.info # prints infos about the spreadsheet file
44
+
45
+ s.first_row # the number of the first row
46
+ s.last_row # the number of the last row
47
+ s.first_column # the number of the first column
48
+ s.last_column # the number of the last column
49
+
50
+ # limited font information is available
51
+
52
+ s.font(1,1).bold?
53
+ s.font(1,1).italic?
54
+ s.font(1,1).underline?
55
+
56
+
57
+ see http://roo.rubyforge.org for a more complete tutorial
58
+
59
+ # Fork Changelog / New Features
60
+
61
+ # Spreadsheet.open can accept both files and paths
62
+
63
+ xls = Roo::Spreadsheet.open('./new_prices.xls')
64
+
65
+ # no more setting xls.default_sheet, just use this
66
+
67
+ xls.sheet('Info').row_count
68
+ xls.sheet(0).row_count
69
+
70
+ # excel likes to create random "Data01" sheets for macros
71
+ # use this to find the sheet with the most data to parse
72
+
73
+ xls.longest_sheet
74
+
75
+ # this excel file has multiple worksheets, let's iterate through each of them and process
76
+
77
+ xls.each_with_pagename do |name,sheet|
78
+ puts sheet.row_count
79
+ end
80
+
81
+ # pull out a hash of exclusive column data (get rid of useless columns and save memory)
82
+
83
+ xls.each(:id => 'UPC',:qty => 'ATS') {|hash| arr << hash}
84
+ #=> hash will appear like {:upc=>727880013358, :qty => 12}
85
+
86
+ # NOTE: .parse does the same as .each, except it returns an array (similar to each vs. map)
87
+
88
+ # not sure exactly what a column will be named? try a wildcard search with the character *
89
+ # regex characters are allowed ('^price\s')
90
+ # case insensitive
91
+
92
+ xls.parse(:id => 'UPC*SKU',:qty => 'ATS*\sATP\s*QTY$')
93
+
94
+ # if you need to locate the header row and assign the header names themselves,
95
+ # use the :header_search option
96
+
97
+ xls.parse(:header_search => ['UPC*SKU','ATS*\sATP\s*QTY$'])
98
+ #=> each element will appear in this fashion:
99
+ #=> {"UPC" => 123456789012, "STYLE" => "987B0", "COLOR" => "blue", "QTY" => 78}
100
+
101
+ # want to strip out annoying unicode characters and surrounding white space?
102
+
103
+ xls.parse(:clean => true)
104
+
105
+ # another bonus feature is a patch to prevent the Spreadsheet gem from parsing
106
+ # thousands and thousands of blank lines. i got fed up after watching my computer
107
+ # nearly catch fire for 4 hours for a spreadsheet with only 200 ACTUAL lines
108
+ # - located in lib/roo/worksheet.rb
109
+
data/Rakefile CHANGED
@@ -12,8 +12,10 @@ task :default => 'test:run'
12
12
 
13
13
  Bones {
14
14
  name 'roo'
15
- authors 'Thomas Preymesser'
15
+ authors 'Thomas Preymesser', 'Hugh McGowan', 'Ben Woosley'
16
16
  email 'thopre@gmail.com'
17
+ summary "Roo can access the contents of various spreadsheet files."
18
+ description "Roo can access the contents of various spreadsheet files. It can handle\n* Openoffice\n* Excel\n* Google spreadsheets\n* Excelx\n* Libreoffice\n* CSV"
17
19
  url 'http://roo.rubyforge.org/'
18
20
  version Roo::VERSION
19
21
  depend_on 'spreadsheet', '> 0.6.4'
@@ -26,9 +28,8 @@ Bones {
26
28
  #depend_on 'febeling-rubyzip','>= 0.9.2' # meine aktuelle Version
27
29
  #TODO: warum brauchen wir das? es lief doch auch vorher ohne dieses spezielle gem
28
30
  depend_on 'rubyzip' # rubyzip wird benoetigt
29
- depend_on 'google-spreadsheet-ruby'
30
- depend_on 'choice'
31
- depend_on 'todonotes'
31
+ # depend_on 'google-spreadsheet-ruby'
32
+ # depend_on 'choice'
32
33
  }
33
34
 
34
35
  # EOF
data/bin/roo CHANGED
File without changes
@@ -0,0 +1,53 @@
1
+ require 'soap/rpc/driver'
2
+
3
+ def ferien_fuer_region(proxy, region, year=nil)
4
+ proxy.first_row.upto(proxy.last_row) { |row|
5
+ if proxy.cell(row, 2) == region
6
+ jahr = proxy.cell(row,1).to_i
7
+ if year == nil || jahr == year
8
+ bis_datum = proxy.cell(row,5)
9
+ if DateTime.now > bis_datum
10
+ print '('
11
+ end
12
+ print jahr.to_s+" "
13
+ print proxy.cell(row,2)+" "
14
+ print proxy.cell(row,3)+" "
15
+ print proxy.cell(row,4).to_s+" "
16
+ print bis_datum.to_s+" "
17
+ print (proxy.cell(row,6) || '')+" "
18
+ if DateTime.now > bis_datum
19
+ print ')'
20
+ end
21
+ puts
22
+ end
23
+ end
24
+ }
25
+ end
26
+
27
+ proxy = SOAP::RPC::Driver.new("http://localhost:12321","spreadsheetserver")
28
+ proxy.add_method('cell','row','col')
29
+ proxy.add_method('officeversion')
30
+ proxy.add_method('last_row')
31
+ proxy.add_method('last_column')
32
+ proxy.add_method('first_row')
33
+ proxy.add_method('first_column')
34
+ proxy.add_method('sheets')
35
+ proxy.add_method('set_default_sheet','s')
36
+ proxy.add_method('ferien_fuer_region', 'region')
37
+
38
+ sheets = proxy.sheets
39
+ proxy.set_default_sheet(sheets.first)
40
+
41
+ puts "first row: #{proxy.first_row}"
42
+ puts "first column: #{proxy.first_column}"
43
+ puts "last row: #{proxy.last_row}"
44
+ puts "last column: #{proxy.last_column}"
45
+ puts "cell: #{proxy.cell('C',8)}"
46
+ puts "cell: #{proxy.cell('F',12)}"
47
+ puts "officeversion: #{proxy.officeversion}"
48
+ puts "Berlin:"
49
+
50
+ ferien_fuer_region(proxy, "Berlin")
51
+
52
+
53
+
@@ -0,0 +1,29 @@
1
+ require 'rubygems'
2
+ require 'roo'
3
+ require 'soap/rpc/standaloneServer'
4
+
5
+ NS = "spreadsheetserver" # name of your service = namespace
6
+ class Server2 < SOAP::RPC::StandaloneServer
7
+
8
+ def on_init
9
+ spreadsheet = Openoffice.new("./Ferien-de.ods")
10
+ add_method(spreadsheet, 'cell', 'row', 'col')
11
+ add_method(spreadsheet, 'officeversion')
12
+ add_method(spreadsheet, 'first_row')
13
+ add_method(spreadsheet, 'last_row')
14
+ add_method(spreadsheet, 'first_column')
15
+ add_method(spreadsheet, 'last_column')
16
+ add_method(spreadsheet, 'sheets')
17
+ #add_method(spreadsheet, 'default_sheet=', 's')
18
+ # method with '...=' did not work? alias method 'set_default_sheet' created
19
+ add_method(spreadsheet, 'set_default_sheet', 's')
20
+ end
21
+
22
+ end
23
+
24
+ PORT = 12321
25
+ puts "serving at port #{PORT}"
26
+ svr = Server2.new('Roo', NS, '0.0.0.0', PORT)
27
+
28
+ trap('INT') { svr.shutdown }
29
+ svr.start
@@ -0,0 +1,33 @@
1
+ require 'rubygems'
2
+ require 'roo'
3
+
4
+ #-- create a new spreadsheet within your google-spreadsheets and paste
5
+ #-- the 'key' parameter in the spreadsheet URL
6
+ MAXTRIES = 1000
7
+ print "what's your name? "
8
+ my_name = gets.chomp
9
+ print "where do you live? "
10
+ my_location = gets.chomp
11
+ print "your message? (if left blank, only your name and location will be inserted) "
12
+ my_message = gets.chomp
13
+ spreadsheet = Google.new('ptu6bbahNZpY0N0RrxQbWdw')
14
+ spreadsheet.default_sheet = 'Sheet1'
15
+ success = false
16
+ MAXTRIES.times do
17
+ col = rand(10)+1
18
+ row = rand(10)+1
19
+ if spreadsheet.empty?(row,col)
20
+ if my_message.empty?
21
+ text = Time.now.to_s+" "+"Greetings from #{my_name} (#{my_location})"
22
+ else
23
+ text = Time.now.to_s+" "+"#{my_message} from #{my_name} (#{my_location})"
24
+ end
25
+ spreadsheet.set_value(row,col,text)
26
+ puts "message written to row #{row}, column #{col}"
27
+ success = true
28
+ break
29
+ end
30
+ puts "Row #{row}, column #{col} already occupied, trying again..."
31
+ end
32
+ puts "no empty cell found within #{MAXTRIES} tries" if !success
33
+
data/lib/roo.rb CHANGED
@@ -1,79 +1,38 @@
1
- # require 'todo_gem'
2
-
3
1
  module Roo
4
2
 
5
- # :stopdoc:
6
- VERSION = '1.10.1'
7
- LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
8
- PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
9
- # :startdoc:
10
-
11
- # Returns the version string for the library.
12
- #
13
- def self.version
14
- VERSION
15
- end
16
-
17
- # Returns the library path for the module. If any arguments are given,
18
- # they will be joined to the end of the libray path using
19
- # <tt>File.join</tt>.
20
- #
21
- def self.libpath( *args )
22
- args.empty? ? LIBPATH : ::File.join(LIBPATH, args.flatten)
23
- end
24
-
25
- # Returns the lpath for the module. If any arguments are given,
26
- # they will be joined to the end of the path using
27
- # <tt>File.join</tt>.
28
- #
29
- def self.path( *args )
30
- args.empty? ? PATH : ::File.join(PATH, args.flatten)
31
- end
32
-
33
- # Utility method used to require all files ending in .rb that lie in the
34
- # directory below this file that has the same name as the filename passed
35
- # in. Optionally, a specific _directory_ name can be passed in such that
36
- # the _filename_ does not have to be equivalent to the directory.
37
- #
38
- def self.require_all_libs_relative_to( fname, dir = nil )
39
- dir ||= ::File.basename(fname, '.*')
40
- search_me = ::File.expand_path(
41
- ::File.join(::File.dirname(fname), dir, '**', '*.rb'))
42
- Dir.glob(search_me).sort.each {|rb|
43
- puts "DEBUG: require #{rb}"
44
- require rb}
45
- end
3
+ VERSION = '1.10.2'
46
4
 
47
5
  class Spreadsheet
48
6
  class << self
49
7
  def open(file)
8
+ file = File === file ? file.path : file
50
9
  case File.extname(file)
51
10
  when '.xls'
52
- Excel.new(file)
11
+ Roo::Excel.new(file)
53
12
  when '.xlsx'
54
- Excelx.new(file)
13
+ Roo::Excelx.new(file)
55
14
  when '.ods'
56
- Openoffice.new(file)
15
+ Roo::Openoffice.new(file)
16
+ when '.xml'
17
+ Roo::Excel2003XML.new(file)
18
+ when ''
19
+ Roo::Google.new(file)
57
20
  when '.csv'
58
- Csv.new(file)
59
- # when ''
21
+ Roo::Csv.new(file)
60
22
  else
61
- Google.new(file)
62
- # else
63
- # raise ArgumentError, "Don't know how to open file #{file}"
23
+ raise ArgumentError, "Don't know how to open file #{file}"
64
24
  end
65
25
  end
66
26
  end
67
27
  end
68
- end # module Roo
69
-
70
- require 'roo/generic_spreadsheet'
71
- require 'roo/openoffice'
72
- require 'roo/excel'
73
- require 'roo/excelx'
74
- require 'roo/google'
75
- require 'roo/csv'
76
28
 
77
- #Roo.require_all_libs_relative_to(__FILE__)
29
+ autoload :GenericSpreadsheet, 'roo/generic_spreadsheet'
30
+ autoload :Openoffice, 'roo/openoffice'
31
+ autoload :Excel, 'roo/excel'
32
+ autoload :Excelx, 'roo/excelx'
33
+ autoload :Google, 'roo/google'
34
+ autoload :Csv, 'roo/csv'
78
35
 
79
- # EOF
36
+ autoload :Excel2003XML, 'roo/excel2003xml'
37
+ autoload :RooRailsHelper, 'roo/roo_rails_helper'
38
+ end