Method: RubyXL::LegacyWorksheet#add_cell

Defined in:
lib/rubyXL/worksheet.rb

#add_cell(row_index = 0, column_index = 0, data = '', formula = nil, overwrite = true) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/rubyXL/worksheet.rb', line 34

def add_cell(row_index = 0, column_index = 0, data = '', formula = nil, overwrite = true)
  validate_workbook
  validate_nonnegative(row_index)
  validate_nonnegative(column_index)
  row = sheet_data.rows[row_index] || add_row(row_index)

  c = row.cells[column_index]

  if overwrite || c.nil?
    c = RubyXL::Cell.new
    c.worksheet = self
    c.row = row_index
    c.column = column_index

    if formula then
      c.formula = RubyXL::Formula.new(:expression => formula)
      c.raw_value = data
    else
      case data
      when Numeric          then c.raw_value = data
      when String           then
        if data.length > TEXT_LENGTH_LIMIT_IN_CELL
          raise ArgumentError, "The maximum length of cell contents (text) is #{TEXT_LENGTH_LIMIT_IN_CELL} characters"
        end
        c.raw_value = data
        c.datatype = RubyXL::DataType::RAW_STRING
      when RubyXL::RichText then
        if data.to_s.length > TEXT_LENGTH_LIMIT_IN_CELL
          raise ArgumentError, "The maximum length of cell contents (text) is #{TEXT_LENGTH_LIMIT_IN_CELL} characters"
        end
        c.is = data
        c.datatype = RubyXL::DataType::INLINE_STRING
      when Time, Date, DateTime then
        c.raw_value = workbook.date_to_num(data)
      when NilClass then nil
      end
    end

    range = cols&.locate_range(column_index)
    c.style_index = row.style_index || range&.style_index || 0
    row.cells[column_index] = c
  end

  c
end