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