| Class | Spreadsheet::Excel::Worksheet |
| In: |
lib/spreadsheet/excel/worksheet.rb
|
| Parent: | Spreadsheet::Worksheet |
| links | [R] | |
| offset | [R] | |
| ole | [R] |
# File lib/spreadsheet/excel/worksheet.rb, line 15
15: def initialize opts = {}
16: @row_addresses = nil
17: super
18: @offset, @ole, @reader = opts[:offset], opts[:ole], opts[:reader]
19: @dimensions = nil
20: @links = {}
21: end
# File lib/spreadsheet/excel/worksheet.rb, line 22
22: def add_link row, column, link
23: @links.store [row, column], link
24: end
# File lib/spreadsheet/excel/worksheet.rb, line 25
25: def column idx
26: ensure_rows_read
27: super
28: end
# File lib/spreadsheet/excel/worksheet.rb, line 29
29: def date_base
30: @workbook.date_base
31: end
# File lib/spreadsheet/excel/worksheet.rb, line 32
32: def each *args
33: ensure_rows_read
34: super
35: end
# File lib/spreadsheet/excel/worksheet.rb, line 36
36: def ensure_rows_read
37: return if @row_addresses
38: @dimensions = nil
39: @row_addresses = []
40: @reader.read_worksheet self, @offset if @reader
41: end
# File lib/spreadsheet/excel/worksheet.rb, line 42
42: def row idx
43: @rows[idx] or begin
44: ensure_rows_read
45: if addr = @row_addresses[idx]
46: row = @reader.read_row self, addr
47: [:default_format, :height, :outline_level, :hidden, ].each do |key|
48: row.send "unupdated_#{key}=", addr[key]
49: end
50: row.worksheet = self
51: row
52: else
53: Row.new self, idx
54: end
55: end
56: end
# File lib/spreadsheet/excel/worksheet.rb, line 57
57: def row_updated idx, row
58: res = super
59: @workbook.changes.store self, true
60: @workbook.changes.store :boundsheets, true
61: @changes.store idx, true
62: @changes.store :dimensions, true
63: res
64: end
# File lib/spreadsheet/excel/worksheet.rb, line 65
65: def set_row_address idx, opts
66: @offsets.store idx, opts[:row_block]
67: @row_addresses[idx] = opts
68: end
# File lib/spreadsheet/excel/worksheet.rb, line 69
69: def shared_string idx
70: @workbook.shared_string idx
71: end
premature optimization?
# File lib/spreadsheet/excel/worksheet.rb, line 74
74: def have_set_dimensions value, pos, len
75: if @row_addresses.size < row_count
76: @row_addresses.concat Array.new(row_count - @row_addresses.size)
77: end
78: end
# File lib/spreadsheet/excel/worksheet.rb, line 79
79: def recalculate_dimensions
80: ensure_rows_read
81: shorten @rows
82: @dimensions = []
83: @dimensions[0] = [ index_of_first(@rows),
84: index_of_first(@row_addresses) ].compact.min || 0
85: @dimensions[1] = [ @rows.size, @row_addresses.size ].compact.max || 0
86: compact = @rows.compact
87: first_rows = compact.collect do |row| row.first_used end.compact.min
88: first_addrs = @row_addresses.compact.collect do |addr|
89: addr[:first_used] end.min
90: @dimensions[2] = [ first_rows, first_addrs ].compact.min || 0
91: last_rows = compact.collect do |row| row.first_unused end.max
92: last_addrs = @row_addresses.compact.collect do |addr|
93: addr[:first_unused] end.max
94: @dimensions[3] = [last_rows, last_addrs].compact.max || 0
95: @dimensions
96: end