roo 1.10.1 → 1.10.2

Sign up to get free protection for your applications and to get access to all the features.
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