roo 1.13.2 → 2.0.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.
Files changed (172) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +7 -0
  3. data/.simplecov +4 -0
  4. data/.travis.yml +13 -0
  5. data/CHANGELOG.md +500 -0
  6. data/Gemfile +16 -10
  7. data/Guardfile +24 -0
  8. data/LICENSE +3 -1
  9. data/README.md +254 -0
  10. data/Rakefile +23 -23
  11. data/examples/roo_soap_client.rb +28 -31
  12. data/examples/roo_soap_server.rb +4 -6
  13. data/examples/write_me.rb +9 -10
  14. data/lib/roo/base.rb +303 -388
  15. data/lib/roo/csv.rb +120 -113
  16. data/lib/roo/excelx/comments.rb +24 -0
  17. data/lib/roo/excelx/extractor.rb +20 -0
  18. data/lib/roo/excelx/relationships.rb +26 -0
  19. data/lib/roo/excelx/shared_strings.rb +40 -0
  20. data/lib/roo/excelx/sheet_doc.rb +202 -0
  21. data/lib/roo/excelx/styles.rb +62 -0
  22. data/lib/roo/excelx/workbook.rb +59 -0
  23. data/lib/roo/excelx.rb +452 -484
  24. data/lib/roo/font.rb +17 -0
  25. data/lib/roo/libre_office.rb +5 -0
  26. data/lib/roo/link.rb +15 -0
  27. data/lib/roo/{openoffice.rb → open_office.rb} +678 -496
  28. data/lib/roo/spreadsheet.rb +20 -23
  29. data/lib/roo/utils.rb +78 -0
  30. data/lib/roo/version.rb +3 -0
  31. data/lib/roo.rb +18 -24
  32. data/roo.gemspec +20 -204
  33. data/spec/lib/roo/base_spec.rb +1 -4
  34. data/spec/lib/roo/csv_spec.rb +21 -13
  35. data/spec/lib/roo/excelx/format_spec.rb +7 -6
  36. data/spec/lib/roo/excelx_spec.rb +388 -11
  37. data/spec/lib/roo/libreoffice_spec.rb +16 -6
  38. data/spec/lib/roo/openoffice_spec.rb +2 -8
  39. data/spec/lib/roo/spreadsheet_spec.rb +40 -12
  40. data/spec/lib/roo/utils_spec.rb +106 -0
  41. data/spec/spec_helper.rb +2 -1
  42. data/test/test_generic_spreadsheet.rb +19 -67
  43. data/test/test_helper.rb +9 -56
  44. data/test/test_roo.rb +252 -477
  45. metadata +63 -302
  46. data/CHANGELOG +0 -417
  47. data/Gemfile.lock +0 -78
  48. data/README.markdown +0 -126
  49. data/VERSION +0 -1
  50. data/lib/roo/excel.rb +0 -355
  51. data/lib/roo/excel2003xml.rb +0 -300
  52. data/lib/roo/google.rb +0 -292
  53. data/lib/roo/roo_rails_helper.rb +0 -83
  54. data/lib/roo/worksheet.rb +0 -18
  55. data/spec/lib/roo/excel2003xml_spec.rb +0 -15
  56. data/spec/lib/roo/excel_spec.rb +0 -17
  57. data/spec/lib/roo/google_spec.rb +0 -64
  58. data/test/files/1900_base.xls +0 -0
  59. data/test/files/1900_base.xlsx +0 -0
  60. data/test/files/1904_base.xls +0 -0
  61. data/test/files/1904_base.xlsx +0 -0
  62. data/test/files/Bibelbund.csv +0 -3741
  63. data/test/files/Bibelbund.ods +0 -0
  64. data/test/files/Bibelbund.xls +0 -0
  65. data/test/files/Bibelbund.xlsx +0 -0
  66. data/test/files/Bibelbund.xml +0 -62518
  67. data/test/files/Bibelbund1.ods +0 -0
  68. data/test/files/Pfand_from_windows_phone.xlsx +0 -0
  69. data/test/files/bad_excel_date.xls +0 -0
  70. data/test/files/bbu.ods +0 -0
  71. data/test/files/bbu.xls +0 -0
  72. data/test/files/bbu.xlsx +0 -0
  73. data/test/files/bbu.xml +0 -152
  74. data/test/files/bode-v1.ods.zip +0 -0
  75. data/test/files/bode-v1.xls.zip +0 -0
  76. data/test/files/boolean.csv +0 -2
  77. data/test/files/boolean.ods +0 -0
  78. data/test/files/boolean.xls +0 -0
  79. data/test/files/boolean.xlsx +0 -0
  80. data/test/files/boolean.xml +0 -112
  81. data/test/files/borders.ods +0 -0
  82. data/test/files/borders.xls +0 -0
  83. data/test/files/borders.xlsx +0 -0
  84. data/test/files/borders.xml +0 -144
  85. data/test/files/bug-numbered-sheet-names.xlsx +0 -0
  86. data/test/files/bug-row-column-fixnum-float.xls +0 -0
  87. data/test/files/bug-row-column-fixnum-float.xml +0 -127
  88. data/test/files/comments.ods +0 -0
  89. data/test/files/comments.xls +0 -0
  90. data/test/files/comments.xlsx +0 -0
  91. data/test/files/csvtypes.csv +0 -1
  92. data/test/files/datetime.ods +0 -0
  93. data/test/files/datetime.xls +0 -0
  94. data/test/files/datetime.xlsx +0 -0
  95. data/test/files/datetime.xml +0 -142
  96. data/test/files/datetime_floatconv.xls +0 -0
  97. data/test/files/datetime_floatconv.xml +0 -148
  98. data/test/files/dreimalvier.ods +0 -0
  99. data/test/files/emptysheets.ods +0 -0
  100. data/test/files/emptysheets.xls +0 -0
  101. data/test/files/emptysheets.xlsx +0 -0
  102. data/test/files/emptysheets.xml +0 -105
  103. data/test/files/excel2003.xml +0 -21140
  104. data/test/files/false_encoding.xls +0 -0
  105. data/test/files/false_encoding.xml +0 -132
  106. data/test/files/file_item_error.xlsx +0 -0
  107. data/test/files/formula.ods +0 -0
  108. data/test/files/formula.xls +0 -0
  109. data/test/files/formula.xlsx +0 -0
  110. data/test/files/formula.xml +0 -134
  111. data/test/files/formula_parse_error.xls +0 -0
  112. data/test/files/formula_parse_error.xml +0 -1833
  113. data/test/files/formula_string_error.xlsx +0 -0
  114. data/test/files/html-escape.ods +0 -0
  115. data/test/files/link.xls +0 -0
  116. data/test/files/link.xlsx +0 -0
  117. data/test/files/matrix.ods +0 -0
  118. data/test/files/matrix.xls +0 -0
  119. data/test/files/named_cells.ods +0 -0
  120. data/test/files/named_cells.xls +0 -0
  121. data/test/files/named_cells.xlsx +0 -0
  122. data/test/files/no_spreadsheet_file.txt +0 -1
  123. data/test/files/numbers1.csv +0 -18
  124. data/test/files/numbers1.ods +0 -0
  125. data/test/files/numbers1.xls +0 -0
  126. data/test/files/numbers1.xlsx +0 -0
  127. data/test/files/numbers1.xml +0 -312
  128. data/test/files/numeric-link.xlsx +0 -0
  129. data/test/files/only_one_sheet.ods +0 -0
  130. data/test/files/only_one_sheet.xls +0 -0
  131. data/test/files/only_one_sheet.xlsx +0 -0
  132. data/test/files/only_one_sheet.xml +0 -67
  133. data/test/files/paragraph.ods +0 -0
  134. data/test/files/paragraph.xls +0 -0
  135. data/test/files/paragraph.xlsx +0 -0
  136. data/test/files/paragraph.xml +0 -127
  137. data/test/files/prova.xls +0 -0
  138. data/test/files/ric.ods +0 -0
  139. data/test/files/simple_spreadsheet.ods +0 -0
  140. data/test/files/simple_spreadsheet.xls +0 -0
  141. data/test/files/simple_spreadsheet.xlsx +0 -0
  142. data/test/files/simple_spreadsheet.xml +0 -225
  143. data/test/files/simple_spreadsheet_from_italo.ods +0 -0
  144. data/test/files/simple_spreadsheet_from_italo.xls +0 -0
  145. data/test/files/simple_spreadsheet_from_italo.xml +0 -242
  146. data/test/files/so_datetime.csv +0 -7
  147. data/test/files/style.ods +0 -0
  148. data/test/files/style.xls +0 -0
  149. data/test/files/style.xlsx +0 -0
  150. data/test/files/style.xml +0 -154
  151. data/test/files/time-test.csv +0 -2
  152. data/test/files/time-test.ods +0 -0
  153. data/test/files/time-test.xls +0 -0
  154. data/test/files/time-test.xlsx +0 -0
  155. data/test/files/time-test.xml +0 -131
  156. data/test/files/type_excel.ods +0 -0
  157. data/test/files/type_excel.xlsx +0 -0
  158. data/test/files/type_excelx.ods +0 -0
  159. data/test/files/type_excelx.xls +0 -0
  160. data/test/files/type_openoffice.xls +0 -0
  161. data/test/files/type_openoffice.xlsx +0 -0
  162. data/test/files/whitespace.ods +0 -0
  163. data/test/files/whitespace.xls +0 -0
  164. data/test/files/whitespace.xlsx +0 -0
  165. data/test/files/whitespace.xml +0 -184
  166. data/test/rm_sub_test.rb +0 -12
  167. data/test/rm_test.rb +0 -7
  168. data/website/index.html +0 -385
  169. data/website/index.txt +0 -423
  170. data/website/javascripts/rounded_corners_lite.inc.js +0 -285
  171. data/website/stylesheets/screen.css +0 -130
  172. data/website/template.rhtml +0 -48
data/README.md ADDED
@@ -0,0 +1,254 @@
1
+ # Roo
2
+
3
+ [![Build Status](https://img.shields.io/travis/roo-rb/roo.svg?style=flat-square)](https://travis-ci.org/roo-rb/roo) [![Code Climate](https://img.shields.io/codeclimate/github/roo-rb/roo.svg?style=flat-square)](https://codeclimate.com/github/roo-rb/roo) [![Coverage Status](https://img.shields.io/coveralls/roo-rb/roo.svg?style=flat-square)](https://coveralls.io/r/roo-rb/roo) [![Gem Version](https://img.shields.io/gem/v/roo.svg?style=flat-square)](https://rubygems.org/gems/roo)
4
+
5
+ Roo implements read access for all common spreadsheet types. It can handle:
6
+
7
+ * Excelx
8
+ * OpenOffice / LibreOffice
9
+ * CSV
10
+
11
+ ## Additional Libraries
12
+
13
+ In addition, the [roo-xls](https://github.com/roo-rb/roo-xls) and [roo-google](https://github.com/roo-rb/roo-google) gems exist to extend Roo to support reading classic Excel formats (i.e. `.xls` and ``Excel2003XML``) and read/write access for Google spreadsheets.
14
+
15
+ # #Installation
16
+
17
+ Install as a gem
18
+
19
+ $ gem install roo
20
+
21
+ Or add it to your Gemfile
22
+
23
+ ```ruby
24
+ gem 'roo', '~> 2.0.0'
25
+ ```
26
+ ## Usage
27
+
28
+ Opening a spreadsheet
29
+
30
+ ```ruby
31
+ require 'roo'
32
+
33
+ xlsx = Roo::Spreadsheet.open('./new_prices.xlsx')
34
+ xlsx = Roo::Excelx.new("./new_prices.xlsx")
35
+
36
+ # Use the extension option if the extension is ambiguous.
37
+ xlsx = Roo::Spreadsheet.open('./rails_temp_upload', extension: :xlsx)
38
+
39
+ xlsx.info
40
+ # => Returns basic info about the spreadsheet file
41
+ ```
42
+
43
+ ``Roo::Spreadsheet.open`` can accept both paths and ``File`` instances.
44
+
45
+ ### Working with sheets
46
+
47
+ ```ruby
48
+ ods.sheets
49
+ # => ['Info', 'Sheet 2', 'Sheet 3'] # an Array of sheet names in the workbook
50
+
51
+ ods.sheet('Info').row(1)
52
+ ods.sheet(0).row(1)
53
+
54
+ # Set the last sheet as the default sheet.
55
+ ods.default_sheet = ods.sheets.last
56
+ ods.default_sheet = s.sheets[3]
57
+ ods.default_sheet = 'Sheet 3'
58
+
59
+ # Iterate through each sheet
60
+ ods.each_with_pagename do |name, sheet|
61
+ p sheet.row(1)
62
+ end
63
+ ```
64
+
65
+ ### Accessing rows and columns
66
+
67
+ Roo uses Excel's numbering for rows, columns and cells, so `1` is the first index, not `0` as it is in an ``Array``
68
+
69
+ ```ruby
70
+ sheet.row(1)
71
+ # returns the first row of the spreadsheet.
72
+
73
+ sheet.column(1)
74
+ # returns the first column of the spreadsheet.
75
+ ```
76
+
77
+ Almost all methods have an optional argument `sheet`. If this parameter is omitted, the default_sheet will be used.
78
+
79
+ ```ruby
80
+ sheet.first_row(sheet.sheets[0])
81
+ # => 1 # the number of the first row
82
+ sheet.last_row
83
+ # => 42 # the number of the last row
84
+ sheet.first_column
85
+ # => 1 # the number of the first column
86
+ sheet.last_column
87
+ # => 10 # the number of the last column
88
+ ```
89
+
90
+ #### Accessing cells
91
+
92
+ You can access the top-left cell in the following ways
93
+
94
+ ```ruby
95
+ s.cell(1,1)
96
+ s.cell('A',1)
97
+ s.cell(1,'A')
98
+ s.a1
99
+
100
+ # Access the second sheet's top-left cell.
101
+ s.cell(1,'A',s.sheets[1])
102
+ ```
103
+
104
+ #### Querying a spreadsheet
105
+ Use ``each`` with a ``block`` to iterate over each row.
106
+
107
+ If each is given a hash with the names of some columns, then each will generate a hash with the columns supplied for each row.
108
+
109
+ ```ruby
110
+ sheet.each(id: 'ID', name: 'FULL_NAME') do |hash|
111
+ puts hash.inspect
112
+ # => { id: 1, name: 'John Smith' }
113
+ end
114
+ ```
115
+
116
+ Use ``sheet.parse`` to return an array of rows. Column names can be a ``String`` or a ``Regexp``.
117
+
118
+ ```ruby
119
+ sheet.parse(:id => /UPC|SKU/,:qty => /ATS*\sATP\s*QTY\z/)
120
+ # => [{:upc => 727880013358, :qty => 12}, ...]
121
+ ```
122
+
123
+ Use the ``:header_search`` option to locate the header row and assign the header names.
124
+
125
+ ```ruby
126
+ sheet.parse(header_search: [/UPC*SKU/,/ATS*\sATP\s*QTY\z/])
127
+ ```
128
+
129
+ Use the ``:clean`` option to strip out control characters and surrounding white space.
130
+
131
+ ```ruby
132
+ sheet.parse(:clean => true)
133
+ ```
134
+
135
+ ### Exporting spreadsheets
136
+ Roo has the ability to export sheets using the following formats. It
137
+ will only export the ``default_sheet``.
138
+
139
+ ```ruby
140
+ sheet.to_csv
141
+ sheet.to_matrix
142
+ sheet.to_xml
143
+ sheet.to_yaml
144
+ ```
145
+
146
+ ### Excel (xlsx) Support
147
+
148
+ Stream rows from an Excelx spreadsheet.
149
+
150
+ ```ruby
151
+ xlsx = Roo::Excelx.new("./test_data/test_small.xlsx")
152
+ xlsx.each_row_streaming do |row|
153
+ puts row.inspect # Array of Excelx::Cell objects
154
+ end
155
+ ```
156
+
157
+ Iterate over each row
158
+
159
+ ```ruby
160
+ xlsx.each_row do |row|
161
+ ...
162
+ end
163
+ ```
164
+
165
+ ``Roo::Excelx`` also provides these helpful methods.
166
+
167
+ ```ruby
168
+ xlsx.excelx_type(3, 'C')
169
+ # => :numeric_or_formula
170
+
171
+ xlsx.cell(3, 'C')
172
+ # => 600000383.0
173
+
174
+ xlsx.excelx_value(row,col)
175
+ # => '0600000383'
176
+ ```
177
+
178
+ ``Roo::Excelx`` can access celltype, comments, font information, formulas, hyperlinks and labels.
179
+
180
+ ```ruby
181
+ xlsx.comment(1,1, ods.sheets[-1])
182
+ xlsx.font(1,1).bold?
183
+ xlsx.formula('A', 2)
184
+ ```
185
+
186
+ ### OpenOffice / LibreOffice Support
187
+
188
+ Roo::OpenOffice supports for encrypted OpenOffice spreadsheets.
189
+
190
+ ```ruby
191
+ # Load an encrypted OpenOffice Spreadsheet
192
+ ods = Roo::OpenOffice.new("myspreadsheet.ods", :password => "password")
193
+ ```
194
+
195
+ ``Roo::OpenOffice`` can access celltype, comments, font information, formulas and labels.
196
+
197
+ ```ruby
198
+ ods.celltype
199
+ # => :percentage
200
+
201
+ ods.comment(1,1, ods.sheets[-1])
202
+
203
+ ods.font(1,1).italic?
204
+ # => false
205
+
206
+ ods.formula('A', 2)
207
+ ```
208
+
209
+ ### CSV Support
210
+
211
+ ```ruby
212
+ # Load a CSV file
213
+ s = Roo::CSV.new("mycsv.csv")
214
+ ```
215
+
216
+ Because Roo uses the [standard CSV library](), and you can use options available to that library to parse csv files. You can pass options using the ``csv_options`` key.
217
+
218
+ For instance, you can load tab-delimited files (``.tsv``), and you can use a particular encoding when opening the file.
219
+
220
+
221
+ ```ruby
222
+ # Load a tab-delimited csv
223
+ s = Roo::CSV.new("mytsv.tsv", csv_options: {col_sep: "\t"})
224
+
225
+ # Load a csv with an explicit encoding
226
+ s = Roo::CSV.new("mycsv.csv", csv_options: {encoding: Encoding::ISO_8859_1})
227
+ ```
228
+
229
+ ## Upgrading from Roo 1.13.x
230
+ If you use ``.xls`` or Google spreadsheets, you will need to install ``roo-xls`` or ``roo-google`` to continue using that functionality.
231
+
232
+ Roo's public methods have stayed relatively consistent between 1.13.x and 2.0.0, but please check the [Changelog](https://github.com/roo-rb/roo/blob/master/CHANGELOG.md) to better understand the changes made since 1.13.x.
233
+
234
+
235
+
236
+ ## Contributing
237
+ ### Features
238
+ 1. Fork it ( https://github.com/[my-github-username]/roo/fork )
239
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
240
+ 3. Commit your changes (`git commit -am 'My new feature'`)
241
+ 4. Push to the branch (`git push origin my-new-feature`)
242
+ 5. Create a new Pull Request
243
+
244
+ ### Issues
245
+
246
+ If you find an issue, please create a gist and refer to it in an issue ([sample gist](https://gist.github.com/stevendaniels/98a05849036e99bb8b3c)). Here are some instructions for creating such a gist.
247
+
248
+ 1. [Create a gist](https://gist.github.com) with code that creates the error.
249
+ 2. Clone the gist repo locally, add a stripped down version of the offending spreadsheet to the gist repo, and push the gist's changes master.
250
+ 3. Paste the gist url here.
251
+
252
+
253
+ ## License
254
+ [Roo uses an MIT License](https://github.com/roo-rb/roo/blob/master/LICENSE)
data/Rakefile CHANGED
@@ -1,23 +1,23 @@
1
- require 'jeweler'
2
-
3
- Jeweler::Tasks.new do |gem|
4
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
5
- gem.name = "roo"
6
- gem.summary = "Roo can access the contents of various spreadsheet files."
7
- gem.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"
8
- gem.email = "ruby.ruby.ruby.roo@gmail.com"
9
- gem.homepage = "http://github.com/Empact/roo"
10
- gem.authors = ['Thomas Preymesser', 'Hugh McGowan', 'Ben Woosley']
11
-
12
- gem.license = 'MIT'
13
- gem.required_ruby_version = '>= 1.9.0'
14
-
15
- gem.test_files = FileList["{spec,test}/**/*.*"]
16
- end
17
-
18
- require 'rake/testtask'
19
- Rake::TestTask.new do |t|
20
- t.libs << "test"
21
- t.test_files = FileList['test/test*.rb']
22
- t.verbose = true
23
- end
1
+ require 'bundler/gem_tasks'
2
+
3
+ require 'rake/testtask'
4
+ require 'rspec/core/rake_task'
5
+ require 'coveralls/rake/task'
6
+
7
+ # Test unit
8
+ Rake::TestTask.new do |t|
9
+ t.libs << 'test'
10
+ t.test_files = FileList['test/test*.rb']
11
+ t.verbose = true
12
+ end
13
+
14
+ # RSpec
15
+ RSpec::Core::RakeTask.new(:spec)
16
+
17
+ # Coveralls
18
+ Coveralls::RakeTask.new
19
+
20
+ default_task = [:test, :spec]
21
+ default_task << 'coveralls:push' if ENV['TRAVIS']
22
+
23
+ task default: default_task
@@ -1,38 +1,38 @@
1
1
  require 'soap/rpc/driver'
2
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
3
+ def ferien_fuer_region(proxy, region, year = nil)
4
+ proxy.first_row.upto(proxy.last_row) do |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 '('
22
11
  end
23
- end
24
- }
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
25
24
  end
25
+ end
26
26
 
27
- proxy = SOAP::RPC::Driver.new("http://localhost:12321","spreadsheetserver")
28
- proxy.add_method('cell','row','col')
27
+ proxy = SOAP::RPC::Driver.new('http://localhost:12321', 'spreadsheetserver')
28
+ proxy.add_method('cell', 'row', 'col')
29
29
  proxy.add_method('officeversion')
30
30
  proxy.add_method('last_row')
31
31
  proxy.add_method('last_column')
32
32
  proxy.add_method('first_row')
33
33
  proxy.add_method('first_column')
34
34
  proxy.add_method('sheets')
35
- proxy.add_method('set_default_sheet','s')
35
+ proxy.add_method('set_default_sheet', 's')
36
36
  proxy.add_method('ferien_fuer_region', 'region')
37
37
 
38
38
  sheets = proxy.sheets
@@ -42,12 +42,9 @@ puts "first row: #{proxy.first_row}"
42
42
  puts "first column: #{proxy.first_column}"
43
43
  puts "last row: #{proxy.last_row}"
44
44
  puts "last column: #{proxy.last_column}"
45
- puts "cell: #{proxy.cell('C',8)}"
46
- puts "cell: #{proxy.cell('F',12)}"
45
+ puts "cell: #{proxy.cell('C', 8)}"
46
+ puts "cell: #{proxy.cell('F', 12)}"
47
47
  puts "officeversion: #{proxy.officeversion}"
48
- puts "Berlin:"
49
-
50
- ferien_fuer_region(proxy, "Berlin")
51
-
52
-
48
+ puts 'Berlin:'
53
49
 
50
+ ferien_fuer_region(proxy, 'Berlin')
@@ -1,11 +1,10 @@
1
1
  require 'roo'
2
2
  require 'soap/rpc/standaloneServer'
3
3
 
4
- NS = "spreadsheetserver" # name of your service = namespace
4
+ NS = 'spreadsheetserver' # name of your service = namespace
5
5
  class Server2 < SOAP::RPC::StandaloneServer
6
-
7
6
  def on_init
8
- spreadsheet = OpenOffice.new("./Ferien-de.ods")
7
+ spreadsheet = OpenOffice.new('./Ferien-de.ods')
9
8
  add_method(spreadsheet, 'cell', 'row', 'col')
10
9
  add_method(spreadsheet, 'officeversion')
11
10
  add_method(spreadsheet, 'first_row')
@@ -13,14 +12,13 @@ class Server2 < SOAP::RPC::StandaloneServer
13
12
  add_method(spreadsheet, 'first_column')
14
13
  add_method(spreadsheet, 'last_column')
15
14
  add_method(spreadsheet, 'sheets')
16
- #add_method(spreadsheet, 'default_sheet=', 's')
15
+ # add_method(spreadsheet, 'default_sheet=', 's')
17
16
  # method with '...=' did not work? alias method 'set_default_sheet' created
18
17
  add_method(spreadsheet, 'set_default_sheet', 's')
19
18
  end
20
-
21
19
  end
22
20
 
23
- PORT = 12321
21
+ PORT = 12_321
24
22
  puts "serving at port #{PORT}"
25
23
  svr = Server2.new('Roo', NS, '0.0.0.0', PORT)
26
24
 
data/examples/write_me.rb CHANGED
@@ -5,28 +5,27 @@ require 'roo'
5
5
  MAXTRIES = 1000
6
6
  print "what's your name? "
7
7
  my_name = gets.chomp
8
- print "where do you live? "
8
+ print 'where do you live? '
9
9
  my_location = gets.chomp
10
- print "your message? (if left blank, only your name and location will be inserted) "
10
+ print 'your message? (if left blank, only your name and location will be inserted) '
11
11
  my_message = gets.chomp
12
12
  spreadsheet = Google.new('ptu6bbahNZpY0N0RrxQbWdw')
13
13
  spreadsheet.default_sheet = 'Sheet1'
14
14
  success = false
15
15
  MAXTRIES.times do
16
- col = rand(10)+1
17
- row = rand(10)+1
18
- if spreadsheet.empty?(row,col)
16
+ col = rand(10) + 1
17
+ row = rand(10) + 1
18
+ if spreadsheet.empty?(row, col)
19
19
  if my_message.empty?
20
- text = Time.now.to_s+" "+"Greetings from #{my_name} (#{my_location})"
20
+ text = Time.now.to_s + ' ' + "Greetings from #{my_name} (#{my_location})"
21
21
  else
22
- text = Time.now.to_s+" "+"#{my_message} from #{my_name} (#{my_location})"
22
+ text = Time.now.to_s + ' ' + "#{my_message} from #{my_name} (#{my_location})"
23
23
  end
24
- spreadsheet.set_value(row,col,text)
24
+ spreadsheet.set_value(row, col, text)
25
25
  puts "message written to row #{row}, column #{col}"
26
26
  success = true
27
27
  break
28
28
  end
29
29
  puts "Row #{row}, column #{col} already occupied, trying again..."
30
30
  end
31
- puts "no empty cell found within #{MAXTRIES} tries" if !success
32
-
31
+ puts "no empty cell found within #{MAXTRIES} tries" unless success