Class: Worksheet

Inherits:
Object
  • Object
show all
Includes:
Utilities
Defined in:
lib/surpass/worksheet.rb

Constant Summary

Constants included from Utilities

Utilities::RE_CELL_EX

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Utilities

#as_boolean, #as_excel_date, #as_numeric, #binary_string_to_hex_array, #cell_to_packed_rowcol, #cell_to_rowcol, #col_by_name, #hex, #hex_array_to_binary_string, #mock_unicode_string, #pixels_to_points, #pixels_to_twips, #points_to_pixels, #twips_to_pixels

Constructor Details

#initialize(name, parent) ⇒ Worksheet

Returns a new instance of Worksheet.



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
# File 'lib/surpass/worksheet.rb', line 94

def initialize(name, parent)
  @name = name
  @parent = parent
  @rows = {}
  @cols = {}
  @merged_ranges = []
  @bmp_rec = ''
  @show_formulas = 0
  @show_grid = 1
  @show_headers = 1
  @panes_frozen = 0
  @show_empty_as_zero = 1
  @auto_colour_grid = 1
  @cols_right_to_left = 0
  @show_outline = 1
  @remove_splits = 0
  @selected = 0
  @sheet_visible = 0
  @page_preview = 0
  
  @first_visible_row = 0
  @first_visible_col = 0
  @grid_colour = 0x40
  @preview_magn = 0
  @normal_magn = 0
  @visibility = 0

  @vert_split_pos = nil
  @horz_split_pos = nil
  @vert_split_first_visible = nil
  @horz_split_first_visible = nil
  @split_active_pane = nil # TODO test implications of converting None -> Nil

  @row_gut_width = 0
  @col_gut_height = 0

  @show_auto_page_breaks = 1
  @dialogue_sheet = 0
  @auto_style_outline = 0
  @outline_below = 0
  @outline_right = 0
  @fit_num_pages = 0
  @show_row_outline = 1
  @show_col_outline = 1
  @alt_expr_eval = 0
  @alt_formula_entries = 0

  @row_default_height = 0x00FF
  @col_default_width = 0x0008
  
  @default_row_height_mismatch = 0
  @default_row_hidden = 0
  @default_row_space_above = 0
  @default_row_space_below = 0

  @calc_mode = 1
  @calc_count = 0x0064
  @rc_ref_mode = 1
  @iterations_on = 0
  @delta = 0.001
  @save_recalc = 0
  @formula_options = Formula::RECALC_ALWAYS | Formula::CALC_ON_OPEN

  @print_headers = 0
  @print_grid = 0
  @grid_set = 1
  @vert_page_breaks = []
  @horz_page_breaks = []
  @header_str = '&P'
  @footer_str = '&F'
  @print_centered_vert = 0
  @print_centered_horz = 1
  @left_margin = 0.3 #0.5
  @right_margin = 0.3 #0.5
  @top_margin = 0.61 #1.0
  @bottom_margin = 0.37 #1.0
  @paper_size_code = 9 # A4
  @print_scaling = 100
  @start_page_number = 1
  @fit_width_to_pages = 1
  @fit_height_to_pages = 1
  @print_in_rows = 1
  @portrait = 1
  @print_not_colour = 0
  @print_draft = 0
  @print_notes = 0
  @print_notes_at_end = 0
  @print_omit_errors = 0
  @print_hres = 0x012C # 300 dpi
  @print_vres = 0x012C # 300 dpi
  @header_margin = 0.1
  @footer_margin = 0.1
  @copies_num = 1

  @wnd_protect = 0
  @obj_protect = 0
  @protect = 0
  @scen_protect = 0
  @password = ''
  
  @charts = []
end

Instance Attribute Details

#alt_expr_evalObject

Returns the value of attribute alt_expr_eval.



81
82
83
# File 'lib/surpass/worksheet.rb', line 81

def alt_expr_eval
  @alt_expr_eval
end

#alt_formula_entriesObject

Returns the value of attribute alt_formula_entries.



82
83
84
# File 'lib/surpass/worksheet.rb', line 82

def alt_formula_entries
  @alt_formula_entries
end

#auto_colour_gridObject

Returns the value of attribute auto_colour_grid.



15
16
17
# File 'lib/surpass/worksheet.rb', line 15

def auto_colour_grid
  @auto_colour_grid
end

#auto_style_outlineObject

Returns the value of attribute auto_style_outline.



75
76
77
# File 'lib/surpass/worksheet.rb', line 75

def auto_style_outline
  @auto_style_outline
end

#bmp_recObject

Returns the value of attribute bmp_rec.



9
10
11
# File 'lib/surpass/worksheet.rb', line 9

def bmp_rec
  @bmp_rec
end

#bottom_marginObject

Returns the value of attribute bottom_margin.



54
55
56
# File 'lib/surpass/worksheet.rb', line 54

def bottom_margin
  @bottom_margin
end

#calc_countObject

Returns the value of attribute calc_count.



86
87
88
# File 'lib/surpass/worksheet.rb', line 86

def calc_count
  @calc_count
end

#calc_modeObject

Returns the value of attribute calc_mode.



85
86
87
# File 'lib/surpass/worksheet.rb', line 85

def calc_mode
  @calc_mode
end

#col_default_widthObject

Returns the value of attribute col_default_width.



84
85
86
# File 'lib/surpass/worksheet.rb', line 84

def col_default_width
  @col_default_width
end

#colsObject

Returns the value of attribute cols.



7
8
9
# File 'lib/surpass/worksheet.rb', line 7

def cols
  @cols
end

#cols_right_to_leftObject

Returns the value of attribute cols_right_to_left.



16
17
18
# File 'lib/surpass/worksheet.rb', line 16

def cols_right_to_left
  @cols_right_to_left
end

#copies_numObject

Returns the value of attribute copies_num.



71
72
73
# File 'lib/surpass/worksheet.rb', line 71

def copies_num
  @copies_num
end

#deltaObject

Returns the value of attribute delta.



39
40
41
# File 'lib/surpass/worksheet.rb', line 39

def delta
  @delta
end

#dialogue_sheetObject

Returns the value of attribute dialogue_sheet.



74
75
76
# File 'lib/surpass/worksheet.rb', line 74

def dialogue_sheet
  @dialogue_sheet
end

#first_visible_colObject

Returns the value of attribute first_visible_col.



29
30
31
# File 'lib/surpass/worksheet.rb', line 29

def first_visible_col
  @first_visible_col
end

#first_visible_rowObject

Returns the value of attribute first_visible_row.



28
29
30
# File 'lib/surpass/worksheet.rb', line 28

def first_visible_row
  @first_visible_row
end

#fit_height_to_pagesObject

Returns the value of attribute fit_height_to_pages.



59
60
61
# File 'lib/surpass/worksheet.rb', line 59

def fit_height_to_pages
  @fit_height_to_pages
end

#fit_num_pagesObject

Returns the value of attribute fit_num_pages.



78
79
80
# File 'lib/surpass/worksheet.rb', line 78

def fit_num_pages
  @fit_num_pages
end

#fit_width_to_pagesObject

Returns the value of attribute fit_width_to_pages.



58
59
60
# File 'lib/surpass/worksheet.rb', line 58

def fit_width_to_pages
  @fit_width_to_pages
end

Returns the value of attribute footer_margin.



70
71
72
# File 'lib/surpass/worksheet.rb', line 70

def footer_margin
  @footer_margin
end

Returns the value of attribute footer_str.



48
49
50
# File 'lib/surpass/worksheet.rb', line 48

def footer_str
  @footer_str
end

#formula_optionsObject

Returns the value of attribute formula_options.



41
42
43
# File 'lib/surpass/worksheet.rb', line 41

def formula_options
  @formula_options
end

#grid_colourObject

Returns the value of attribute grid_colour.



30
31
32
# File 'lib/surpass/worksheet.rb', line 30

def grid_colour
  @grid_colour
end

#grid_setObject

Returns the value of attribute grid_set.



44
45
46
# File 'lib/surpass/worksheet.rb', line 44

def grid_set
  @grid_set
end

#header_marginObject

Returns the value of attribute header_margin.



69
70
71
# File 'lib/surpass/worksheet.rb', line 69

def header_margin
  @header_margin
end

#header_strObject

Returns the value of attribute header_str.



47
48
49
# File 'lib/surpass/worksheet.rb', line 47

def header_str
  @header_str
end

#horz_page_breaksObject

Returns the value of attribute horz_page_breaks.



46
47
48
# File 'lib/surpass/worksheet.rb', line 46

def horz_page_breaks
  @horz_page_breaks
end

#horz_split_first_visibleObject

Returns the value of attribute horz_split_first_visible.



37
38
39
# File 'lib/surpass/worksheet.rb', line 37

def horz_split_first_visible
  @horz_split_first_visible
end

#horz_split_posObject

Returns the value of attribute horz_split_pos.



35
36
37
# File 'lib/surpass/worksheet.rb', line 35

def horz_split_pos
  @horz_split_pos
end

#left_marginObject

Returns the value of attribute left_margin.



51
52
53
# File 'lib/surpass/worksheet.rb', line 51

def left_margin
  @left_margin
end

#merged_rangesObject

Returns the value of attribute merged_ranges.



8
9
10
# File 'lib/surpass/worksheet.rb', line 8

def merged_ranges
  @merged_ranges
end

#nameObject

Returns the value of attribute name.



4
5
6
# File 'lib/surpass/worksheet.rb', line 4

def name
  @name
end

#normal_magnObject

Returns the value of attribute normal_magn.



32
33
34
# File 'lib/surpass/worksheet.rb', line 32

def normal_magn
  @normal_magn
end

#obj_protectObject

Returns the value of attribute obj_protect.



90
91
92
# File 'lib/surpass/worksheet.rb', line 90

def obj_protect
  @obj_protect
end

#outline_belowObject

Returns the value of attribute outline_below.



76
77
78
# File 'lib/surpass/worksheet.rb', line 76

def outline_below
  @outline_below
end

#outline_rightObject

Returns the value of attribute outline_right.



77
78
79
# File 'lib/surpass/worksheet.rb', line 77

def outline_right
  @outline_right
end

#page_previewObject

Returns the value of attribute page_preview.



27
28
29
# File 'lib/surpass/worksheet.rb', line 27

def page_preview
  @page_preview
end

#panes_frozenObject

Returns the value of attribute panes_frozen.



13
14
15
# File 'lib/surpass/worksheet.rb', line 13

def panes_frozen
  @panes_frozen
end

#paper_size_codeObject

Returns the value of attribute paper_size_code.



55
56
57
# File 'lib/surpass/worksheet.rb', line 55

def paper_size_code
  @paper_size_code
end

#parentObject

Returns the value of attribute parent.



5
6
7
# File 'lib/surpass/worksheet.rb', line 5

def parent
  @parent
end

#passwordObject

Returns the value of attribute password.



92
93
94
# File 'lib/surpass/worksheet.rb', line 92

def password
  @password
end

#portraitObject

Returns the value of attribute portrait.



61
62
63
# File 'lib/surpass/worksheet.rb', line 61

def portrait
  @portrait
end

#preview_magnObject

Returns the value of attribute preview_magn.



31
32
33
# File 'lib/surpass/worksheet.rb', line 31

def preview_magn
  @preview_magn
end

Returns the value of attribute print_centered_horz.



50
51
52
# File 'lib/surpass/worksheet.rb', line 50

def print_centered_horz
  @print_centered_horz
end

Returns the value of attribute print_centered_vert.



49
50
51
# File 'lib/surpass/worksheet.rb', line 49

def print_centered_vert
  @print_centered_vert
end

Returns the value of attribute print_draft.



63
64
65
# File 'lib/surpass/worksheet.rb', line 63

def print_draft
  @print_draft
end

Returns the value of attribute print_grid.



43
44
45
# File 'lib/surpass/worksheet.rb', line 43

def print_grid
  @print_grid
end

Returns the value of attribute print_headers.



42
43
44
# File 'lib/surpass/worksheet.rb', line 42

def print_headers
  @print_headers
end

Returns the value of attribute print_hres.



67
68
69
# File 'lib/surpass/worksheet.rb', line 67

def print_hres
  @print_hres
end

Returns the value of attribute print_in_rows.



60
61
62
# File 'lib/surpass/worksheet.rb', line 60

def print_in_rows
  @print_in_rows
end

Returns the value of attribute print_not_colour.



62
63
64
# File 'lib/surpass/worksheet.rb', line 62

def print_not_colour
  @print_not_colour
end

Returns the value of attribute print_notes.



64
65
66
# File 'lib/surpass/worksheet.rb', line 64

def print_notes
  @print_notes
end

Returns the value of attribute print_notes_at_end.



65
66
67
# File 'lib/surpass/worksheet.rb', line 65

def print_notes_at_end
  @print_notes_at_end
end

Returns the value of attribute print_omit_errors.



66
67
68
# File 'lib/surpass/worksheet.rb', line 66

def print_omit_errors
  @print_omit_errors
end

Returns the value of attribute print_scaling.



56
57
58
# File 'lib/surpass/worksheet.rb', line 56

def print_scaling
  @print_scaling
end

Returns the value of attribute print_vres.



68
69
70
# File 'lib/surpass/worksheet.rb', line 68

def print_vres
  @print_vres
end

#protectObject

Returns the value of attribute protect.



88
89
90
# File 'lib/surpass/worksheet.rb', line 88

def protect
  @protect
end

#remove_splitsObject

Returns the value of attribute remove_splits.



18
19
20
# File 'lib/surpass/worksheet.rb', line 18

def remove_splits
  @remove_splits
end

#right_marginObject

Returns the value of attribute right_margin.



52
53
54
# File 'lib/surpass/worksheet.rb', line 52

def right_margin
  @right_margin
end

#rowsObject

Returns the value of attribute rows.



6
7
8
# File 'lib/surpass/worksheet.rb', line 6

def rows
  @rows
end

#save_recalcObject

Returns the value of attribute save_recalc.



40
41
42
# File 'lib/surpass/worksheet.rb', line 40

def save_recalc
  @save_recalc
end

#scen_protectObject

Returns the value of attribute scen_protect.



91
92
93
# File 'lib/surpass/worksheet.rb', line 91

def scen_protect
  @scen_protect
end

#selectedObject

Returns the value of attribute selected.



19
20
21
# File 'lib/surpass/worksheet.rb', line 19

def selected
  @selected
end

#sheet_visibleObject

RED HERRING ALERT: “sheet_visible” is a clone of the “selected” attribute. Typically a workbook created by the Excel UI will have one sheet (the sheet that was selected when the user saved it) with both bits set to 1, and all other sheets will have both bits set to 0. The true visibility of the sheet is found in the “visibility” attribute obtained from the BOUNDSHEET record.



26
27
28
# File 'lib/surpass/worksheet.rb', line 26

def sheet_visible
  @sheet_visible
end

#show_auto_page_breaksObject

Returns the value of attribute show_auto_page_breaks.



73
74
75
# File 'lib/surpass/worksheet.rb', line 73

def show_auto_page_breaks
  @show_auto_page_breaks
end

#show_col_outlineObject

Returns the value of attribute show_col_outline.



80
81
82
# File 'lib/surpass/worksheet.rb', line 80

def show_col_outline
  @show_col_outline
end

#show_empty_as_zeroObject

Returns the value of attribute show_empty_as_zero.



14
15
16
# File 'lib/surpass/worksheet.rb', line 14

def show_empty_as_zero
  @show_empty_as_zero
end

#show_formulasObject

Returns the value of attribute show_formulas.



10
11
12
# File 'lib/surpass/worksheet.rb', line 10

def show_formulas
  @show_formulas
end

#show_gridObject

Returns the value of attribute show_grid.



11
12
13
# File 'lib/surpass/worksheet.rb', line 11

def show_grid
  @show_grid
end

#show_headersObject

Returns the value of attribute show_headers.



12
13
14
# File 'lib/surpass/worksheet.rb', line 12

def show_headers
  @show_headers
end

#show_outlineObject

Returns the value of attribute show_outline.



17
18
19
# File 'lib/surpass/worksheet.rb', line 17

def show_outline
  @show_outline
end

#show_row_outlineObject

Returns the value of attribute show_row_outline.



79
80
81
# File 'lib/surpass/worksheet.rb', line 79

def show_row_outline
  @show_row_outline
end

#start_page_numberObject

Returns the value of attribute start_page_number.



57
58
59
# File 'lib/surpass/worksheet.rb', line 57

def start_page_number
  @start_page_number
end

#top_marginObject

Returns the value of attribute top_margin.



53
54
55
# File 'lib/surpass/worksheet.rb', line 53

def top_margin
  @top_margin
end

#vert_page_breaksObject

Returns the value of attribute vert_page_breaks.



45
46
47
# File 'lib/surpass/worksheet.rb', line 45

def vert_page_breaks
  @vert_page_breaks
end

#vert_split_first_visibleObject

Returns the value of attribute vert_split_first_visible.



36
37
38
# File 'lib/surpass/worksheet.rb', line 36

def vert_split_first_visible
  @vert_split_first_visible
end

#vert_split_posObject

Returns the value of attribute vert_split_pos.



34
35
36
# File 'lib/surpass/worksheet.rb', line 34

def vert_split_pos
  @vert_split_pos
end

#visibilityObject

Returns the value of attribute visibility.



33
34
35
# File 'lib/surpass/worksheet.rb', line 33

def visibility
  @visibility
end

#wnd_protectObject

Returns the value of attribute wnd_protect.



89
90
91
# File 'lib/surpass/worksheet.rb', line 89

def wnd_protect
  @wnd_protect
end

Instance Method Details

#col(index) ⇒ Object Also known as: column

Fetch the col indicated by index, or create it if necessary.



543
544
545
# File 'lib/surpass/worksheet.rb', line 543

def col(index)
  cols[index] ||= Column.new(index, self)
end

#col_width(column_index) ⇒ Object



556
557
558
559
560
561
562
# File 'lib/surpass/worksheet.rb', line 556

def col_width(column_index)
  if cols.keys.include?(column_index)
    cols[column_index].width_in_pixels
  else
    64
  end
end

#default_row_height_recordObject



401
402
403
404
405
406
407
408
409
# File 'lib/surpass/worksheet.rb', line 401

def default_row_height_record
  options = 0x00
  options |= (@default_row_height_mismatch & 0x01) << 0
  options |= (@default_row_hidden & 0x01) << 1
  options |= (@default_row_space_above & 0x01) << 2
  options |= (@default_row_space_below & 0x01) << 3
  
  DefaultRowHeight.new(options, @row_default_height).to_biff
end

#dimensions_recObject



427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
# File 'lib/surpass/worksheet.rb', line 427

def dimensions_rec
  first_used_row = 0
  last_used_row = 0
  first_used_col = 0
  last_used_col = 0
  
  if !@rows.empty?
    first_used_row = @rows.keys.sort.first
    last_used_row = @rows.keys.sort.last
    first_used_col = 0xFFFFFFFF
    last_used_col = 0
  end
  
  first_used_col = @rows.values.inject(first_used_col) {|min_col, r| r.min_col_index < min_col ? min_col = r.min_col_index : min_col }
  last_used_col = @rows.values.inject(last_used_col) {|max_col, r| r.max_col_index > max_col ? max_col = r.max_col_index : max_col }

  DimensionsRecord.new(first_used_row, last_used_row, first_used_col, last_used_col).to_biff
end

#guts_recordObject



391
392
393
394
395
396
397
398
399
# File 'lib/surpass/worksheet.rb', line 391

def guts_record
  max_row_level = @rows.values.inject(-1) {|level, row|  row.level > level ? row.level : level }
  max_col_level = @cols.values.inject(-1) {|level, col| col.level > level ? col.level : level }
  
  row_visible_levels = @rows.empty? ? 0 : max_row_level + 1
  col_visible_levels = @cols.empty? ? 0 : max_col_level + 1
  
  GutsRecord.new(@row_gut_width, @col_gut_height, row_visible_levels, col_visible_levels).to_biff
end

#hide_column(c) ⇒ Object



237
238
239
# File 'lib/surpass/worksheet.rb', line 237

def hide_column(c)
  col(c).hidden = true
end

#hide_columns(col_range) ⇒ Object



219
220
221
222
223
# File 'lib/surpass/worksheet.rb', line 219

def hide_columns(col_range)
  col_range.each do |c|
    hide_column(c)
  end
end


525
526
527
528
529
530
531
532
533
534
535
# File 'lib/surpass/worksheet.rb', line 525

def hyperlink_table_record
  result = ''
  return result if @links.nil?
  @links.each do |a, b|
    x, y = a
    url, target, textmark, description = b
    result += HyperlinkRecord.new(x, x, y, y, url, target, textmark, description).to_biff
    result += QuicktipRecord(x, x, y, y).to_biff unless description.nil?
  end
  result
end

#insert_bitmap(filename, row, col, x = 0, y = 0, scale_x = 1, scale_y = 1) ⇒ Object



564
565
566
567
568
569
# File 'lib/surpass/worksheet.rb', line 564

def insert_bitmap(filename, row, col, x = 0, y = 0, scale_x = 1, scale_y = 1)
  bmp = ImDataBmpRecord.new(filename)
  obj = ObjBmpRecord.new(row, col, self, bmp, x, y, scale_x, scale_y)

  @bmp_rec += obj.to_biff + bmp.to_biff
end

#merge(r1, r2, c1, c2, style = @parent.styles.default_style) ⇒ Object

Comment from xlwt: Stand-alone merge of previously written cells. Problems: (1) style to be used should be existing style of the top-left cell, not an arg. (2) should ensure that any previous data value in non-top-left cells is nobbled. Note: if a cell is set by a data record then later is referenced by a [MUL]BLANK record, Excel will blank out the cell on the screen, but OOo & Gnu will not blank it out. Need to do something better than writing multiple records. In the meantime, avoid this method and use write_merge() instead.



319
320
321
322
323
324
325
# File 'lib/surpass/worksheet.rb', line 319

def merge(r1, r2, c1, c2, style = @parent.styles.default_style)
  row(r1).write_blanks(c1 + 1, c2, style) if c2 > c1
  ((r1+1)...(r2+1)).each do |r|
    row(r).write_blanks(c1, c2, style)
  end
  @merged_ranges << [r1, r2, c1, c2]
end

#panes_recordObject



502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
# File 'lib/surpass/worksheet.rb', line 502

def panes_record
  return '' if @vert_split_pos.nil? && @horz_split_pos.nil?
  @vert_split_pos = 0 if @vert_split_pos.nil?
  @horz_split_pos = 0 if @horz_split_pos.nil?
  if @panes_frozen
    @vert_split_first_visible = @vert_split_pos if @vert_split_first_visible.nil?
    @horz_split_first_visible = @horz_split_pos if @horz_split_first_visible.nil?
  else
    @vert_split_first_visible = 0 if @vert_split_first_visible.nil?
    @horz_split_first_visible = 0 if @horz_split_first_visible.nil?
    # inspired by pyXLWriter
    @horz_split_pos = 20 * @horz_split_pos + 255
    @vert_split_pos = 113.879 * @vert_split_pos + 390
  end
  @split_active_pane = 0 if @vert_split_pos > 0 and @horz_split_pos > 0
  @split_active_pane = 1 if @vert_split_pos < 0 and @horz_split_pos == 0
  @split_active_pane = 2 if @vert_split_pos == 0 and @horz_split_pos > 0
  @split_active_pane = 3

  args = [@vert_split_pos, @horz_split_pos, @horz_split_first_visible, @vert_split_first_visible, @split_active_pane]
  PanesRecord.new(*args).to_biff
end

#row(index) ⇒ Object

Fetch the row indicated by index, or create it if necessary.



538
539
540
# File 'lib/surpass/worksheet.rb', line 538

def row(index)
  rows[index] ||= Row.new(index, self)
end

#row_default_heightObject

Accessors Performing Conversions



198
199
200
# File 'lib/surpass/worksheet.rb', line 198

def row_default_height
  twips_to_pixels(@row_default_height)
end

#row_default_height=(pixels) ⇒ Object



202
203
204
# File 'lib/surpass/worksheet.rb', line 202

def row_default_height=(pixels)
  @row_default_height = pixels_to_twips(pixels)
end

#row_height(row) ⇒ Object



548
549
550
551
552
553
554
# File 'lib/surpass/worksheet.rb', line 548

def row_height(row)
  if @rows.include?(row)
    @rows[row].height_in_pixels
  else
    17
  end
end

#set_cell_style(r, c, style, create_blanks = false) ⇒ Object



210
211
212
213
214
215
216
217
# File 'lib/surpass/worksheet.rb', line 210

def set_cell_style(r, c, style, create_blanks = false)
  cell = rows[r].cell(c)
  if cell.nil?
    write(r, c, nil, style) if create_blanks
  else
    cell.set_style(style)
  end
end

#set_column_width(c, width) ⇒ Object

TODO fix this if column doesn’t exist yet.



246
247
248
249
250
251
252
253
# File 'lib/surpass/worksheet.rb', line 246

def set_column_width(c, width)
  if width < 100
    # Assume we are trying to use Excel-user style widths, scale up accordingly.
    # You can call col's width method directly to avoid this.
    width = width * 260
  end
  col(c).width = width
end

#set_column_widths(col_range, width) ⇒ Object



231
232
233
234
235
# File 'lib/surpass/worksheet.rb', line 231

def set_column_widths(col_range, width)
  col_range.each do |c|
    set_column_width(c, width)
  end
end

#set_range_style(row_range, col_range, style, create_blanks = false) ⇒ Object

Change the style for a range of cells. If nil is supplied for row_range, the new style is supplied to every row (i.e. the entire column). Only changes style for cells which actually exist, so this does not paint anything which has not been written to.



259
260
261
262
263
264
265
266
267
268
269
270
# File 'lib/surpass/worksheet.rb', line 259

def set_range_style(row_range, col_range, style, create_blanks = false)
  row_range ||= 0..65535
  col_range ||= 0..255
  
  @rows.each do |i, r|
    next unless row_range.include?(i)
    r.cells.each do |c|
      next unless col_range.include?(c.col)
      c.set_style(style)
    end
  end
end

#setup_page_recordObject



446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
# File 'lib/surpass/worksheet.rb', line 446

def setup_page_record
  setup_page_options =  (@print_in_rows & 0x01) << 0
  setup_page_options |=  (@portrait & 0x01) << 1
  setup_page_options |=  (0x00 & 0x01) << 2
  setup_page_options |=  (@print_not_colour & 0x01) << 3
  setup_page_options |=  (@print_draft & 0x01) << 4
  setup_page_options |=  (@print_notes & 0x01) << 5
  setup_page_options |=  (0x00 & 0x01) << 6
  setup_page_options |=  (0x01 & 0x01) << 7
  setup_page_options |=  (@print_notes_at_end & 0x01) << 9
  setup_page_options |=  (@print_omit_errors & 0x03) << 10

  args = [
    @paper_size_code,
    @print_scaling,
    @start_page_number,
    @fit_width_to_pages,
    @fit_height_to_pages,
    setup_page_options,
    @print_hres,
    @print_vres,
    @header_margin,
    @footer_margin,
    @copies_num
  ]
  SetupPageRecord.new(*args).to_biff
end

#to_biffObject



332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
# File 'lib/surpass/worksheet.rb', line 332

def to_biff
  result = []
  result << Biff8BOFRecord.new(Biff8BOFRecord::WORKSHEET).to_biff
  # Calc Settings
  result << CalcModeRecord.new(@calc_mode).to_biff
  result << CalcCountRecord.new(@calc_count & 0xFFFF).to_biff
  result << RefModeRecord.new(@rc_ref_mode & 0x01).to_biff
  result << IterationRecord.new(@iterations_on & 0x01).to_biff
  result << DeltaRecord.new(@delta).to_biff
  result << SaveRecalcRecord.new(@save_recalc & 0x01).to_biff
  
  result << guts_record
  result << default_row_height_record
  result << wsbool_record
  result << @cols.sort.collect {|k, v| v.to_biff }.join
  result << dimensions_rec
  
  # Print Settings
  result << PrintHeadersRecord.new(@print_headers).to_biff
  result << PrintGridLinesRecord.new(@print_grid).to_biff
  result << GridSetRecord.new(@grid_set).to_biff
  result << HorizontalPageBreaksRecord.new(@horz_page_breaks.collect {|b| b.is_a?(Integer) ? [b, 0, -1] : b }).to_biff
  result << VerticalPageBreaksRecord.new(@vert_page_breaks.collect {|b| b.is_a?(Integer) ? [b, 0, -1] : b }).to_biff
  result << HeaderRecord.new(@header_str).to_biff
  result << FooterRecord.new(@footer_str).to_biff
  result << HCenterRecord.new(@print_centered_horz).to_biff
  result << VCenterRecord.new(@print_centered_vert).to_biff
  result << LeftMarginRecord.new(@left_margin).to_biff
  result << RightMarginRecord.new(@right_margin).to_biff
  result << TopMarginRecord.new(@top_margin).to_biff
  result << BottomMarginRecord.new(@bottom_margin).to_biff
  result << setup_page_record
  
  # Protection Settings
  result << ProtectRecord.new(as_numeric(@protect)).to_biff()
  result << ScenarioProtectRecord.new(as_numeric(@scen_protect)).to_biff()
  result << WindowProtectRecord.new(as_numeric(@wnd_protect)).to_biff()
  result << ObjectProtectRecord.new(as_numeric(@obj_protect)).to_biff()
  result << PasswordRecord.new(@password).to_biff()

  keys = @rows.keys.sort
  keys.each do |i|
    result << @rows[i].to_biff
    result << @rows[i].cells_biff
  end
  
  # @charts.each do |c|
  #   result << c.to_biff
  # end
  result << MergedCellsRecord.new(@merged_ranges).to_biff
  result << @bmp_rec
  result << window_2_record
  result << panes_record
  # result << hyperlink_table_record
  result << EOFRecord.new.to_biff
  
  result.join
end

#unhide_column(c) ⇒ Object



241
242
243
# File 'lib/surpass/worksheet.rb', line 241

def unhide_column(c)
  col(c).hidden = false
end

#unhide_columns(col_range) ⇒ Object



225
226
227
228
229
# File 'lib/surpass/worksheet.rb', line 225

def unhide_columns(col_range)
  col_range.each do |c|
    unhide_column(c)
  end
end

#window_2_recordObject



474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
# File 'lib/surpass/worksheet.rb', line 474

def window_2_record
  options = 0
  options |= (as_numeric(@show_formulas       ) & 0x01) << 0
  options |= (as_numeric(@show_grid           ) & 0x01) << 1
  options |= (as_numeric(@show_headers        ) & 0x01) << 2
  options |= (as_numeric(@panes_frozen        ) & 0x01) << 3
  options |= (as_numeric(@show_empty_as_zero  ) & 0x01) << 4
  options |= (as_numeric(@auto_colour_grid    ) & 0x01) << 5
  options |= (as_numeric(@cols_right_to_left  ) & 0x01) << 6
  options |= (as_numeric(@show_outline        ) & 0x01) << 7
  options |= (as_numeric(@remove_splits       ) & 0x01) << 8
  options |= (as_numeric(@selected            ) & 0x01) << 9
  options |= (as_numeric(@sheet_visible       ) & 0x01) << 10
  options |= (as_numeric(@page_preview        ) & 0x01) << 11

  if @page_preview != 0
    if @preview_magn == 0
      scl_magn = 60
    else
      scl_magn = @preview_magn
    end
  else
    scl_magn = @normal_magn
  end
  
  Window2Record.new(options, @first_visible_row, @first_visible_col, @grid_colour, @preview_magn, @normal_magn, scl_magn).to_biff
end

#write(r, c, label = "", style = nil) ⇒ Object

TODO get rid of meaningless default value for label, should be required?



274
275
276
277
278
279
280
281
282
283
284
# File 'lib/surpass/worksheet.rb', line 274

def write(r, c, label = "", style = nil)
  if label.is_a?(Array)
    if label[0].is_a?(Array)
      write_arrays(r, c, label, style || true)
    else
      write_array_to_row(label, r, c, style || true)
    end
  else
    row(r).write(c, label, style)
  end
end

#write_array_to_column(array, c, r = 0, style = true) ⇒ Object



293
294
295
296
297
# File 'lib/surpass/worksheet.rb', line 293

def write_array_to_column(array, c, r = 0, style = true)
  array.each_with_index do |a, i|
    row(r + i).write(c, a, style)
  end
end

#write_array_to_row(array, r, c = 0, style = true) ⇒ Object



287
288
289
290
291
# File 'lib/surpass/worksheet.rb', line 287

def write_array_to_row(array, r, c = 0, style = true)
  array.each_with_index do |a, i|
    row(r).write(c + i, a, style)
  end
end

#write_arrays(r, c, array_of_arrays, style = true) ⇒ Object



299
300
301
302
303
304
# File 'lib/surpass/worksheet.rb', line 299

def write_arrays(r, c, array_of_arrays, style = true)
  array_of_arrays.each_with_index do |a, i|
    raise "not an array of arrays!" unless a.is_a?(Array)
    write_array_to_row(a, r + i, c, style)
  end
end

#write_merge(r1, r2, c1, c2, label = "", style = @parent.styles.default_style) ⇒ Object



327
328
329
330
# File 'lib/surpass/worksheet.rb', line 327

def write_merge(r1, r2, c1, c2, label="", style = @parent.styles.default_style)
  write(r1, c1,  label, style)
  merge(r1, r2, c1, c2, style)
end

#wsbool_recordObject



411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
# File 'lib/surpass/worksheet.rb', line 411

def wsbool_record
  options = 0x00
  options |= (@show_auto_page_breaks & 0x01) << 0
  options |= (@dialogue_sheet & 0x01) << 4
  options |= (@auto_style_outline & 0x01) << 5
  options |= (@outline_below & 0x01) << 6
  options |= (@outline_right & 0x01) << 7
  options |= (@fit_num_pages & 0x01) << 8
  options |= (@show_row_outline & 0x01) << 10
  options |= (@show_col_outline & 0x01) << 11
  options |= (@alt_expr_eval & 0x01) << 14
  options |= (@alt_formula_entries & 0x01) << 15

  WSBoolRecord.new(options).to_biff
end