Method: Spreadsheet::Excel::Writer::Workbook#write_formats

Defined in:
lib/spreadsheet/excel/writer/workbook.rb

#write_formats(workbook, writer) ⇒ Object



358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
# File 'lib/spreadsheet/excel/writer/workbook.rb', line 358

def write_formats workbook, writer
  # From BIFF5 on, the built-in number formats will be omitted. The built-in
  # formats are dependent on the current regional settings of the operating
  # system. BUILTIN_FORMATS shows which number formats are used by
  # default in a US-English environment. All indexes from 0 to 163 are
  # reserved for built-in formats.
  # The first user-defined format starts at 164 (0xa4).
  formats = @number_formats[workbook] = {}
  BUILTIN_FORMATS.each do |idx, str|
    formats.store client(str, 'UTF-8'), idx
  end
  ## Ensure at least a 'GENERAL' format is written
  formats.delete client('GENERAL', 'UTF-8')
  idx = 0xa4
  workbook.formats.each do |fmt|
    str = fmt.number_format
    unless formats[str]
      formats.store str, idx
      # Number format string (Unicode string, 16-bit string length, ➜ 3.4)
      write_op writer, opcode(:format), [idx].pack('v'), unicode_string(str, 2)
      idx += 1
    end
  end
end