File: biff5.rb

package info (click to toggle)
ruby-spreadsheet 1.3.4-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 8,980 kB
  • sloc: ruby: 6,939; makefile: 10
file content (41 lines) | stat: -rw-r--r-- 1,311 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
module Spreadsheet
  module Excel
    class Reader
      ##
      # This Module collects reader methods such as read_string that are specific to
      # Biff5.  This Module is likely to be expanded as Support for older Versions
      # of Excel grows.
      module Biff5
        ##
        # Read a String of 8-bit Characters
        def read_string work, count_length = 1
          # Offset    Size  Contents
          #      0  1 or 2  Length of the string (character count, ln)
          # 1 or 2      ln  Character array (8-bit characters)
          fmt = (count_length == 1) ? "C" : "v"
          length, = work.unpack fmt
          work[count_length, length]
        end

        def read_range_address_list work, len
          # Cell range address, BIFF2-BIFF5:
          # Offset  Size  Contents
          # 0       2     Index to first row
          # 2       2     Index to last row
          # 4       1     Index to first column
          # 5       1     Index to last column
          #
          results = []
          return results if len < 2
          count = work[0..1].unpack1("v")
          offset = 2
          count.times do |i|
            results << work[offset...offset + 6].unpack("v2c2")
            offset += 6
          end
          results
        end
      end
    end
  end
end