rods 0.5.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data/README +32 -17
  2. data/Rakefile +2 -2
  3. data/lib/rods.rb +10 -6
  4. data/rods.gemspec +2 -2
  5. metadata +5 -5
data/README CHANGED
@@ -5,7 +5,7 @@
5
5
  manipulates the XML-files in the zipped *.ods-container.
6
6
 
7
7
  On my website http://ruby.homelinux.com/ruby/rods/ you can see the output of the script below.
8
- You can contact me at rodsdotrubyatonlinedotde.
8
+ You can contact me at rodsdotrubyatonlinedotde (and drop me a line, if you like it ;-).
9
9
 
10
10
  link:images/Rods.jpg
11
11
 
@@ -14,6 +14,11 @@
14
14
  Licensed under the same terms as Ruby. No warranty is provided.
15
15
 
16
16
  = Changelog
17
+ * 0.5.2
18
+ * changed interface from
19
+ * getNextRow, getPreviousRow, getNextCell, getPreviousCell to
20
+ * getNextExistentRow, getPreviousExistentRow, getNextExistentCell, getPreviousExistentCell
21
+ See explanation below
17
22
  * 0.5.1
18
23
  * made readCellFromRow() more user-friendly by returning defaults for text and type where
19
24
  till recently error-messages were thrown due to missing values
@@ -47,10 +52,26 @@
47
52
  * OpenOffice.org 3.0 (German)
48
53
  * Ruby 1.9.1 and 1.8.7
49
54
 
55
+ = What you must know
56
+ When you open a (new) spreadsheet in an application like OpenOffice.org, you'll see an infinity of empty cells and
57
+ might be tempted to assume that all these cells actually "exist" in the underlying file format/XML-structure.
58
+ This is not the case ! A "newly born" spreadsheet does not contain even a single cell ! They're created on demand along
59
+ with all other cells of lesser x- or y-coordinate.
60
+ That is: If you write a cell with coordinates (10,10) all cells from (1,1) to (10,10)
61
+ spring into existence or vice versa: If the cell farthest down the sheet and farthest to the right
62
+ having a visible value has coordinates (90,87), then all cells from row 1-90 and column 1-87 exist,
63
+ but no cell out of this virutal rectangle is "alive".
64
+ This is very important for using the interface appropriately: All routines matching 'Existent' merely return "living"
65
+ cells, while all other routines bearing a "get|Get" create a row or cell if necessary (and implicitly all other cells
66
+ within the new boundaries).
67
+ In other words: Use
68
+ * getNextExistentRow, getPreviousExistentRow, getNextExistentCell, getPreviousExistentCell
69
+ whenever you just want to read values you already have (seemlessly skipping visibly emtpy lines and columns) and
70
+ * getCell, writeGetCell and writeGetCellFromRow whenever you want a cell to be created if it does not exist (which
71
+ is undoubtedly the case, when you want to write to it or assign it a style) !
72
+ The first return nil, if an element does not exist yet, the second always return the desired element.
73
+
50
74
  = Howto
51
- Please consider the hints in the next chapter to boost performance when walking
52
- your way through many rows. But first the basics:
53
-
54
75
  $ sudo gem install rods (root-privileges necessary)
55
76
 
56
77
  # coding: UTF-8
@@ -274,17 +295,10 @@
274
295
  puts("Read #{text1} of #{type1} and #{text2} of #{type2}
275
296
  }
276
297
 
277
- in spite of the fact that
278
- getRow
279
- even creates a row if it does not yet exist (returns the specified row in any case !), while
280
- readCell
281
- merely looks up exisiting rows and cells (returns nil,nil otherwise).
282
-
283
298
  This difference hardly matters while dealing with small documents, but degrades performance significantly when you
284
299
  move up or down a sheet with a lot of rows and process several cells on the same row !
285
300
 
286
- Provided you just want to read exisiting cells and not write to at the user level seemingly empty ones, but de facto
287
- non-existent cells according to Open Document format, an absolute speed-booster compared to the above is the following
301
+ Provided you just want to read exisiting cells (i.e. cells with "visible values"), the following is a real speed-buster.
288
302
 
289
303
  # coding: UTF-8
290
304
  #
@@ -299,15 +313,16 @@
299
313
  row=mySheet.getRow(1)
300
314
  #---------------------------------------------------------------------------------
301
315
  # The routines
302
- # - getNextRow(row)
303
- # - getPreviousRow(row)
304
- # - getNextCell(cell)
305
- # - getPreviousCell(cell)
316
+ # - getNextExistentRow(row)
317
+ # - getPreviousExistentRow(row)
318
+ # - getNextExistentCell(cell)
319
+ # - getPreviousExistentCell(cell)
306
320
  # allow the XML-Parser to just continue from the "adjacent" node and
307
321
  # return the previsous/next element without having to start from the top-node
308
322
  # of the document over and over again !
323
+ #
309
324
  #---------------------------------------------------------------------------------
310
- while(row=mySheet.getNextRow(row))
325
+ while(row=mySheet.getNextExistentRow(row))
311
326
  i+=1
312
327
  puts("#{i}")
313
328
  confirmed,type=mySheet.readCellFromRow(row,1)
data/Rakefile CHANGED
@@ -2,8 +2,8 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require 'echoe'
4
4
 
5
- Echoe.new('rods', '0.5.1') do |p|
6
- p.description = "OpenOffice.org oocalc: Fast automated batch-processing of spreadsheets (*.ods) conforming to Open Document Format v1.1. used by e.g. OpenOffice.org and LibreOffice. Please see screenshot and Rdoc-Documentation at http://ruby.homelinux.com/ruby/rods/. You can contact me at rodsdotrubyatonlinedotde."
5
+ Echoe.new('rods', '0.6.0') do |p|
6
+ p.description = "OpenOffice.org oocalc: Fast automated batch-processing of spreadsheets (*.ods) conforming to Open Document Format v1.1. used by e.g. OpenOffice.org and LibreOffice. Please see screenshot and Rdoc-Documentation at http://ruby.homelinux.com/ruby/rods/. You can contact me at rodsdotrubyatonlinedotde (and drop me a line, if you like it ;-)"
7
7
  p.summary = "Automation of OpenOffice/LibreOffice by batch-processing of spreadsheets conforming to Open Document v1.1"
8
8
  p.url = "http://ruby.homelinux.com/ruby/rods/"
9
9
  p.author = "Dr. Heinz Breinlinger"
@@ -2460,32 +2460,36 @@ class Rods
2460
2460
  # Fast Routine to get the previous row, because XML-Parser does not have
2461
2461
  # to start from top-node of document to find row !
2462
2462
  # Returns previous row as a REXML::Element or nil if no element exists.
2463
+ # Cf. explanation in README !
2463
2464
  #------------------------------------------------------------------------
2464
- def getPreviousRow(row)
2465
+ def getPreviousExistentRow(row)
2465
2466
  return row.previous_sibling
2466
2467
  end
2467
2468
  ##########################################################################
2468
2469
  # Fast Routine to get the next cell, because XML-Parser does not have
2469
2470
  # to start from top-node of row to find cell !
2470
2471
  # Returns next cell as a REXML::Element or nil if no element exists
2472
+ # Cf. explanation in README !
2471
2473
  #------------------------------------------------------------------------
2472
- def getNextCell(cell)
2474
+ def getNextExistentCell(cell)
2473
2475
  return cell.next_sibling
2474
2476
  end
2475
2477
  ##########################################################################
2476
2478
  # Fast Routine to get the previous cell, because XML-Parser does not have
2477
2479
  # to start from top-node of row to find cell !
2478
2480
  # Returns previous cell as a REXML::Element or nil if no element exists
2481
+ # Cf. explanation in README !
2479
2482
  #------------------------------------------------------------------------
2480
- def getPreviousCell(cell)
2483
+ def getPreviousExistentCell(cell)
2481
2484
  return cell.previous_sibling
2482
2485
  end
2483
2486
  ##########################################################################
2484
2487
  # Fast Routine to get the next row, because XML-Parser does not have
2485
2488
  # to start from top-node of document to find row !
2486
2489
  # Returns next row as a REXML::Element or nil if no element exists
2490
+ # Cf. explanation in README !
2487
2491
  #------------------------------------------------------------------------
2488
- def getNextRow(row)
2492
+ def getNextExistentRow(row)
2489
2493
  return row.next_sibling
2490
2494
  end
2491
2495
  ##########################################################################
@@ -2507,8 +2511,8 @@ class Rods
2507
2511
  public :setDateFormat, :writeGetCell, :writeCell, :writeGetCellFromRow, :writeCellFromRow,
2508
2512
  :getCellFromRow, :getCell, :getRow, :renameTable, :setCurrentTable,
2509
2513
  :insertTable, :deleteTable, :readCellFromRow, :readCell, :setAttributes, :writeStyleAbbr,
2510
- :setStyle, :printOfficeStyles, :printAutoStyles, :getNextRow, :getPreviousRow,
2511
- :getNextCell, :getPreviousCell,
2514
+ :setStyle, :printOfficeStyles, :printAutoStyles, :getNextExistentRow, :getPreviousExistentRow,
2515
+ :getNextExistentCell, :getPreviousExistentCell,
2512
2516
  :writeComment, :save, :saveAs, :initialize, :writeText
2513
2517
 
2514
2518
  private :tell, :die, :createCell, :createRow, :getChildByIndex, :createElement, :setRepetition, :initHousekeeping,
@@ -2,12 +2,12 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{rods}
5
- s.version = "0.5.1"
5
+ s.version = "0.6.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Dr. Heinz Breinlinger"]
9
9
  s.date = %q{2011-01-07}
10
- s.description = %q{OpenOffice.org oocalc: Fast automated batch-processing of spreadsheets (*.ods) conforming to Open Document Format v1.1. used by e.g. OpenOffice.org and LibreOffice. Please see screenshot and Rdoc-Documentation at http://ruby.homelinux.com/ruby/rods/. You can contact me at rodsdotrubyatonlinedotde.}
10
+ s.description = %q{OpenOffice.org oocalc: Fast automated batch-processing of spreadsheets (*.ods) conforming to Open Document Format v1.1. used by e.g. OpenOffice.org and LibreOffice. Please see screenshot and Rdoc-Documentation at http://ruby.homelinux.com/ruby/rods/. You can contact me at rodsdotrubyatonlinedotde (and drop me a line, if you like it ;-)}
11
11
  s.email = %q{rods.ruby@online.de}
12
12
  s.extra_rdoc_files = ["README", "lib/example.rb", "lib/rods.rb"]
13
13
  s.files = ["Manifest", "README", "Rakefile", "lib/example.rb", "lib/rods.rb", "rods.gemspec"]
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rods
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
4
+ hash: 7
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 5
9
- - 1
10
- version: 0.5.1
8
+ - 6
9
+ - 0
10
+ version: 0.6.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Dr. Heinz Breinlinger
@@ -19,7 +19,7 @@ date: 2011-01-07 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
22
- description: "OpenOffice.org oocalc: Fast automated batch-processing of spreadsheets (*.ods) conforming to Open Document Format v1.1. used by e.g. OpenOffice.org and LibreOffice. Please see screenshot and Rdoc-Documentation at http://ruby.homelinux.com/ruby/rods/. You can contact me at rodsdotrubyatonlinedotde."
22
+ description: "OpenOffice.org oocalc: Fast automated batch-processing of spreadsheets (*.ods) conforming to Open Document Format v1.1. used by e.g. OpenOffice.org and LibreOffice. Please see screenshot and Rdoc-Documentation at http://ruby.homelinux.com/ruby/rods/. You can contact me at rodsdotrubyatonlinedotde (and drop me a line, if you like it ;-)"
23
23
  email: rods.ruby@online.de
24
24
  executables: []
25
25