Module: FastExcel::WorksheetExt
- Includes:
- AttributeHelper
- Defined in:
- lib/fast_excel.rb
Instance Attribute Summary collapse
-
#workbook ⇒ Object
Returns the value of attribute workbook.
Instance Method Summary collapse
- #<<(values) ⇒ Object
- #add_text_width(value, format, cell_number) ⇒ Object
- #append_row(values, formats = nil) ⇒ Object
- #auto_width=(v) ⇒ Object
- #auto_width? ⇒ Boolean
- #calculated_column_widths ⇒ Object
- #close ⇒ Object
- #enable_filters!(start_col: 0, end_col:) ⇒ Object
- #initialize(struct) ⇒ Object
- #last_row_number ⇒ Object
- #set_column(start_col, end_col, width = nil, format = nil) ⇒ Object
- #set_column_width(col, width) ⇒ Object
- #set_columns_width(start_col, end_col, width) ⇒ Object
- #write_row(row_number, values, formats = nil) ⇒ Object
- #write_value(row_number, cell_number, value, format = nil) ⇒ Object
Methods included from AttributeHelper
#fields_hash, #pretty_print, #set
Instance Attribute Details
#workbook ⇒ Object
Returns the value of attribute workbook.
423 424 425 |
# File 'lib/fast_excel.rb', line 423 def workbook @workbook end |
Instance Method Details
#<<(values) ⇒ Object
518 519 520 |
# File 'lib/fast_excel.rb', line 518 def <<(values) append_row(values) end |
#add_text_width(value, format, cell_number) ⇒ Object
486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 |
# File 'lib/fast_excel.rb', line 486 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
513 514 515 516 |
# File 'lib/fast_excel.rb', line 513 def append_row(values, formats = nil) @last_row_number += 1 write_row(last_row_number, values, formats) end |
#auto_width=(v) ⇒ Object
448 449 450 451 |
# File 'lib/fast_excel.rb', line 448 def auto_width=(v) @auto_width = v @column_widths = {} end |
#auto_width? ⇒ Boolean
444 445 446 |
# File 'lib/fast_excel.rb', line 444 def auto_width? defined?(@auto_width) && @auto_width end |
#calculated_column_widths ⇒ Object
453 454 455 |
# File 'lib/fast_excel.rb', line 453 def calculated_column_widths @column_widths || {} end |
#close ⇒ Object
549 550 551 552 553 554 555 |
# File 'lib/fast_excel.rb', line 549 def close if auto_width? @column_widths.transform_values!{ |width| width || DEF_COL_WIDTH }.each do |num, width| set_column_width(num, width + 0.2) end end end |
#enable_filters!(start_col: 0, end_col:) ⇒ Object
545 546 547 |
# File 'lib/fast_excel.rb', line 545 def enable_filters!(start_col: 0, end_col:) autofilter(0, start_col, @last_row_number, end_col) end |
#initialize(struct) ⇒ Object
427 428 429 430 431 432 |
# File 'lib/fast_excel.rb', line 427 def initialize(struct) @is_open = true @col_formats = {} @last_row_number = -1 super(struct) end |
#last_row_number ⇒ Object
522 523 524 |
# File 'lib/fast_excel.rb', line 522 def last_row_number @last_row_number end |
#set_column(start_col, end_col, width = nil, format = nil) ⇒ Object
526 527 528 529 530 531 532 533 |
# File 'lib/fast_excel.rb', line 526 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
535 536 537 |
# File 'lib/fast_excel.rb', line 535 def set_column_width(col, width) set_column(col, col, width, @col_formats[col]) end |
#set_columns_width(start_col, end_col, width) ⇒ Object
539 540 541 542 543 |
# File 'lib/fast_excel.rb', line 539 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
434 435 436 437 438 439 440 441 442 |
# File 'lib/fast_excel.rb', line 434 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
457 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 484 |
# File 'lib/fast_excel.rb', line 457 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?(TrueClass) || value.is_a?(FalseClass) write_boolean(row_number, cell_number, value ? 1 : 0, format) elsif value.is_a?(FastExcel::Formula) write_formula(row_number, cell_number, value.fml, format) elsif value.is_a?(FastExcel::URL) write_url(row_number, cell_number, value.url, format) add_text_width(value.url, format, cell_number) if auto_width? 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 |