Module: FastExcel::WorksheetExt

Includes:
AttributeHelper
Defined in:
lib/fast_excel.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from AttributeHelper

#fields_hash, #pretty_print, #set

Instance Attribute Details

#workbookObject

Returns the value of attribute workbook.



400
401
402
# File 'lib/fast_excel.rb', line 400

def workbook
  @workbook
end

Instance Method Details

#add_text_width(value, format, cell_number) ⇒ Object



458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
# File 'lib/fast_excel.rb', line 458

def add_text_width(value, format, cell_number)
  font_size = 0
  if format
    font_size = format.font_size
  end

  if font_size == 0
    if @col_formats[cell_number] && @col_formats[cell_number].font_size
      font_size = @col_formats[cell_number].font_size
    end
  end

  if font_size == 0
    font_size = workbook.default_format.font_size
  end

  font_size = 13 if font_size == nil || font_size == 0

  scale = 0.08
  new_width = (scale * font_size * value.to_s.length )
  @column_widths[cell_number] = if new_width > (@column_widths[cell_number] || 0)
    new_width
  else
    @column_widths[cell_number]
  end
end

#append_row(values, formats = nil) ⇒ Object



485
486
487
488
# File 'lib/fast_excel.rb', line 485

def append_row(values, formats = nil)
  @last_row_number += 1
  write_row(last_row_number, values, formats)
end

#auto_width=(v) ⇒ Object



425
426
427
428
# File 'lib/fast_excel.rb', line 425

def auto_width=(v)
  @auto_width = v
  @column_widths = {}
end

#auto_width?Boolean

Returns:

  • (Boolean)


421
422
423
# File 'lib/fast_excel.rb', line 421

def auto_width?
  defined?(@auto_width) && @auto_width
end

#calculated_column_widthsObject



430
431
432
# File 'lib/fast_excel.rb', line 430

def calculated_column_widths
  @column_widths || {}
end

#closeObject



513
514
515
516
517
518
519
# File 'lib/fast_excel.rb', line 513

def close
  if auto_width?
    @column_widths.each do |num, width|
      set_column_width(num, width + 0.2)
    end
  end
end

#initialize(struct) ⇒ Object



404
405
406
407
408
409
# File 'lib/fast_excel.rb', line 404

def initialize(struct)
  @is_open = true
  @col_formats = {}
  @last_row_number = -1
  super(struct)
end

#last_row_numberObject



490
491
492
# File 'lib/fast_excel.rb', line 490

def last_row_number
  @last_row_number
end

#set_column(start_col, end_col, width = nil, format = nil) ⇒ Object



494
495
496
497
498
499
500
501
# File 'lib/fast_excel.rb', line 494

def set_column(start_col, end_col, width = nil, format = nil)
  super(start_col, end_col, width || DEF_COL_WIDTH, format)

  return unless format
  start_col.upto(end_col) do |i|
    @col_formats[i] = format
  end
end

#set_column_width(col, width) ⇒ Object



503
504
505
# File 'lib/fast_excel.rb', line 503

def set_column_width(col, width)
  set_column(col, col, width, @col_formats[col])
end

#set_columns_width(start_col, end_col, width) ⇒ Object



507
508
509
510
511
# File 'lib/fast_excel.rb', line 507

def set_columns_width(start_col, end_col, width)
  start_col.upto(end_col) do |i|
    set_column_width(i, width)
  end
end

#write_row(row_number, values, formats = nil) ⇒ Object



411
412
413
414
415
416
417
418
419
# File 'lib/fast_excel.rb', line 411

def write_row(row_number, values, formats = nil)
  values.each_with_index do |value, index|
    format = if formats
      formats.is_a?(Array) ? formats[index] : formats
    end

    write_value(row_number, index, value, format)
  end
end

#write_value(row_number, cell_number, value, format = nil) ⇒ Object



434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
# File 'lib/fast_excel.rb', line 434

def write_value(row_number, cell_number, value, format = nil)

  if workbook.constant_memory? && row_number < @last_row_number
    raise ArgumentError, "Can not write to saved row in constant_memory mode (attempted row: #{row_number}, last saved row: #{last_row_number})"
  end

  if value.is_a?(Numeric)
    write_number(row_number, cell_number, value, format)
  elsif defined?(Date) && value.is_a?(Date)
    write_datetime(row_number, cell_number, FastExcel.lxw_datetime(value.to_datetime), format)
  elsif value.is_a?(Time)
    write_number(row_number, cell_number, FastExcel.date_num(value), format)
  elsif defined?(DateTime) && value.is_a?(DateTime)
    write_number(row_number, cell_number, FastExcel.date_num(value), format)
  elsif value.is_a?(Formula)
    write_formula(row_number, cell_number, value.fml, format)
  else
    write_string(row_number, cell_number, value.to_s, format)
    add_text_width(value, format, cell_number) if auto_width?
  end

  @last_row_number = row_number > @last_row_number ? row_number : @last_row_number
end