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

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

#write_formats(workbook, writer) ⇒ Object



299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
# File 'lib/spreadsheet/excel/writer/workbook.rb', line 299

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