Module: Spreadsheet::Excel::Internals
- Included in:
- Reader, Reader::Biff8, Writer::Format, Writer::Workbook, Writer::Worksheet
- Defined in:
- lib/spreadsheet/excel/internals.rb,
lib/spreadsheet/excel/internals/biff5.rb,
lib/spreadsheet/excel/internals/biff8.rb
Overview
Ruby 1.9 as simple as possible.
Defined Under Namespace
Constant Summary collapse
- EIGHT_BYTE_DOUBLE =
[0.1].pack('E').size == 8 ? 'E' : 'e'
- CODEPAGES =
{ 367 => "ASCII", 437 => "IBM437", #(US) 720 => "IBM720", #(OEM Arabic) 737 => "IBM737", #(Greek) 775 => "IBM775", #(Baltic) 850 => "IBM850", #(Latin I) 852 => "IBM852", #(Latin II (Central European)) 855 => "IBM855", #(Cyrillic) 857 => "IBM857", #(Turkish) 858 => "IBM858", #(Multilingual Latin I with Euro) 860 => "IBM860", #(Portuguese) 861 => "IBM861", #(Icelandic) 862 => "IBM862", #(Hebrew) 863 => "IBM863", #(Canadian (French)) 864 => "IBM864", #(Arabic) 865 => "IBM865", #(Nordic) 866 => "IBM866", #(Cyrillic (Russian)) 869 => "IBM869", #(Greek (Modern)) 874 => "WINDOWS-874", #(Thai) 932 => "Windows-31J", #(Japanese Shift-JIS) 936 => "GBK", #(Chinese Simplified GBK) 949 => "CP949", #(Korean (Wansung)) 950 => "CP950", #(Chinese Traditional BIG5) 1200 => "UTF-16LE", #(BIFF8) 1250 => "WINDOWS-1250", #(Latin II) (Central European) 1251 => "WINDOWS-1251", #(Cyrillic) 1252 => "WINDOWS-1252", #(Latin I) (BIFF4-BIFF7) 1253 => "WINDOWS-1253", #(Greek) 1254 => "WINDOWS-1254", #(Turkish) 1255 => "WINDOWS-1255", #(Hebrew) 1256 => "WINDOWS-1256", #(Arabic) 1257 => "WINDOWS-1257", #(Baltic) 1258 => "WINDOWS-1258", #(Vietnamese) 1361 => "WINDOWS-1361", #(Korean (Johab)) 10000 => "MACROMAN", 21010 => "UTF-16LE", 32768 => "MACROMAN", 32769 => "WINDOWS-1252", #(Latin I) (BIFF2-BIFF3) }
- SEGAPEDOC =
(Latin I) (BIFF2-BIFF3)
CODEPAGES.reject { |k, _v| k >= 21010 }.invert
- COLOR_CODES =
color_codes according to support.softartisans.com/kbview_1205.aspx synonyms are in comments when reverse lookup
{ 0x0000 => :builtin_black, 0x0001 => :builtin_white, 0x0002 => :builtin_red, 0x0003 => :builtin_green, 0x0004 => :builtin_blue, 0x0005 => :builtin_yellow, 0x0006 => :builtin_magenta, 0x0007 => :builtin_cyan, 0x0008 => :black, #xls_color_0 0x0009 => :white, #xls_color_1 0x000a => :red, #xls_color_2 0x000b => :lime, #xls_color_3 0x000c => :blue, #xls_color_4 0x000d => :yellow, #xls_color_5 0x000e => :magenta, #xls_color_6, fuchsia 0x000f => :cyan, #xls_color_7, aqua 0x0010 => :brown, #xls_color_8 0x0011 => :green, #xls_color_9 0x0012 => :navy, #xls_color_10 0x0013 => :xls_color_11, 0x0014 => :xls_color_12, 0x0015 => :xls_color_13, 0x0016 => :silver, #xls_color_14 0x0017 => :gray, #xls_color_15, grey 0x0018 => :xls_color_16, 0x0019 => :xls_color_17, 0x001a => :xls_color_18, 0x001b => :xls_color_19, 0x001c => :xls_color_20, 0x001d => :xls_color_21, 0x001e => :xls_color_22, 0x001f => :xls_color_23, 0x0020 => :xls_color_24, 0x0021 => :xls_color_25, 0x0022 => :xls_color_26, 0x0023 => :xls_color_27, 0x0024 => :purple, #xls_color_28 0x0025 => :xls_color_29, 0x0026 => :xls_color_30, 0x0027 => :xls_color_31, 0x0028 => :xls_color_32, 0x0029 => :xls_color_33, 0x002a => :xls_color_34, 0x002b => :xls_color_35, 0x002c => :xls_color_36, 0x002d => :xls_color_37, 0x002e => :xls_color_38, 0x002f => :xls_color_39, 0x0030 => :xls_color_40, 0x0031 => :xls_color_41, 0x0032 => :xls_color_42, 0x0033 => :xls_color_43, 0x0034 => :orange, #xls_color_44 0x0035 => :xls_color_45, 0x0036 => :xls_color_46, 0x0037 => :xls_color_47, 0x0038 => :xls_color_48, 0x0039 => :xls_color_49, 0x003a => :xls_color_50, 0x003b => :xls_color_51, 0x003c => :xls_color_52, 0x003d => :xls_color_53, 0x003e => :xls_color_54, 0x003f => :xls_color_55, 0x0040 => :border, 0x0041 => :pattern_bg, 0x0043 => :dialog_bg, 0x004d => :chart_text, 0x004e => :chart_bg, 0x004f => :chart_border, 0x0050 => :tooltip_bg, 0x0051 => :tooltip_text, 0x7fff => :text }
- SEDOC_ROLOC =
COLOR_CODES.invert.update( :xls_color_0 => 0x0008, :xls_color_1 => 0x0009, :xls_color_2 => 0x000a, :xls_color_3 => 0x000b, :xls_color_4 => 0x000c, :xls_color_5 => 0x000d, :xls_color_6 => 0x000e, :fuchsia => 0x000e, :xls_color_7 => 0x000f, :aqua => 0x000f, :xls_color_8 => 0x0010, :xls_color_9 => 0x0011, :xls_color_10 => 0x0012, :xls_color_14 => 0x0016, :xls_color_15 => 0x0017, :grey => 0x0017, :xls_color_28 => 0x0024, :xls_color_44 => 0x0034 )
- BINARY_FORMATS =
{ :blank => 'v3', :boolerr => 'v3C2', :colinfo => 'v5x2', :font => 'v5C3x', :labelsst => 'v3V', :number => "v3#{EIGHT_BYTE_DOUBLE}", :pagesetup => "v8#{EIGHT_BYTE_DOUBLE}2v", :margin => "#{EIGHT_BYTE_DOUBLE}", :rk => 'v3V', :row => 'v4x4V', :window2 => 'v4x2v2x4', :xf => 'v3C4V2v', }
- BUILTIN_FORMATS =
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. The following table 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.
{ # TODO: locale support 0 => 'GENERAL', 1 => '0', 2 => '0.00', 3 => '#,##0', 4 => '#,##0.00', 5 => '"$"#,##0_);("$"#,##0)', 6 => '"$"#,##0_);[Red]("$"#,##0)', 7 => '"$"#,##0.00_);("$"#,##0.00)', 8 => '"$"#,##0.00_);[Red]("$"#,##0.00)', 9 => '0%', 10 => '0.00%', 11 => '0.00E+00', 12 => '# ?/?', 13 => '# ??/??', 14 => 'M/D/YY', 15 => 'D-MMM-YY', 16 => 'D-MMM', 17 => 'MMM-YY', 18 => 'h:mm AM/PM', 19 => 'h:mm:ss AM/PM', 20 => 'h:mm', 21 => 'h:mm:ss', 22 => 'M/D/YY h:mm', 37 => '_(#,##0_);(#,##0)', 38 => '_(#,##0_);[Red](#,##0)', 39 => '_(#,##0.00_);(#,##0.00)', 40 => '_(#,##0.00_);[Red](#,##0.00)', 41 => '_("$"* #,##0_);_("$"* (#,##0);_("$"* "-"_);_(@_)', 42 => '_(* #,##0_);_(* (#,##0);_(* "-"_);_(@_)', 43 => '_("$"* #,##0.00_);_("$"* (#,##0.00);_("$"* "-"??_);_(@_)', 44 => '_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)', 45 => 'mm:ss', 46 => '[h]:mm:ss', 47 => 'mm:ss.0', 48 => '##0.0E+0', 49 => '@', }
- BUILTIN_STYLES =
{ 0x00 => 'Normal', 0x01 => 'RowLevel_lv', 0x02 => 'ColLevel_lv', 0x03 => 'Comma', 0x04 => 'Currency', 0x05 => 'Percent', 0x06 => 'Comma', 0x07 => 'Currency', 0x08 => 'Hyperlink', 0x09 => 'Followed Hyperlink', }
- ESCAPEMENT_TYPES =
{ 0x0001 => :superscript, 0x0002 => :subscript, }
- SEPYT_TNEMEPACSE =
ESCAPEMENT_TYPES.invert
- FONT_ENCODINGS =
{ 0x00 => :iso_latin1, 0x01 => :default, 0x02 => :symbol, 0x4d => :apple_roman, 0x80 => :shift_jis, 0x81 => :korean_hangul, 0x82 => :korean_johab, 0x86 => :chinese_simplified, 0x88 => :chinese_traditional, 0xa1 => :greek, 0xa2 => :turkish, 0xa3 => :vietnamese, 0xb1 => :hebrew, 0xb2 => :arabic, 0xba => :baltic, 0xcc => :cyrillic, 0xde => :thai, 0xee => :iso_latin2, 0xff => :oem_latin1, }
- SGNIDOCNE_TNOF =
FONT_ENCODINGS.invert
- FONT_FAMILIES =
{ 0x01 => :roman, 0x02 => :swiss, 0x03 => :modern, 0x04 => :script, 0x05 => :decorative, }
- SEILIMAF_TNOF =
FONT_FAMILIES.invert
- FONT_WEIGHTS =
{ :bold => 700, :normal => 400, }
- WORKSHEET_VISIBILITIES =
{ 0x00 => :visible, 0x01 => :hidden, 0x02 => :strong_hidden }
- SEITILIBISIV_TEEHSKROW =
WORKSHEET_VISIBILITIES.invert
- LEAP_ERROR =
Date.new 1900, 2, 28
- OPCODES =
{ :blank => 0x0201, # BLANK ➜ 6.7 :boolerr => 0x0205, # BOOLERR ➜ 6.10 :boundsheet => 0x0085, # ●● BOUNDSHEET ➜ 6.12 :codepage => 0x0042, # ○ CODEPAGE ➜ 6.17 :colinfo => 0x007d, # ○○ COLINFO ➜ 6.18 :continue => 0x003c, # ○ CONTINUE ➜ 6.22 :datemode => 0x0022, # ○ DATEMODE ➜ 6.25 :dbcell => 0x0a0b, # ○ DBCELL :dimensions => 0x0200, # ● DIMENSIONS ➜ 6.31 :eof => 0x000a, # ● EOF ➜ 6.36 :font => 0x0031, # ●● FONT ➜ 6.43 :format => 0x041e, # ○○ FORMAT (Number Format) ➜ 6.45 :formula => 0x0006, # FORMULA ➜ 6.46 :hlink => 0x01b8, # HLINK ➜ 6.52 (BIFF8 only) :label => 0x0204, # LABEL ➜ 6.59 (BIFF2-BIFF7) :labelsst => 0x00fd, # LABELSST ➜ 6.61 (BIFF8 only) :mergedcells => 0x00e5, # ○○ MERGEDCELLS ➜ 5.67 (BIFF8 only) :mulblank => 0x00be, # MULBLANK ➜ 6.64 (BIFF5-BIFF8) :mulrk => 0x00bd, # MULRK ➜ 6.65 (BIFF5-BIFF8) :number => 0x0203, # NUMBER ➜ 6.68 :rk => 0x027e, # RK ➜ 6.82 (BIFF3-BIFF8) :row => 0x0208, # ● ROW ➜ 6.83 :rstring => 0x00d6, # RSTRING ➜ 6.84 (BIFF5/BIFF7) :sst => 0x00fc, # ● SST ➜ 6.96 :string => 0x0207, # STRING ➜ 6.98 :style => 0x0293, # ●● STYLE ➜ 6.99 :xf => 0x00e0, # ●● XF ➜ 6.115 :sharedfmla => 0x04bc, # SHAREDFMLA ➜ 5.94 ########################## Unhandled Opcodes ################################ :extsst => 0x00ff, # ● EXTSST ➜ 6.40 :index => 0x020b, # ○ INDEX ➜ 5.7 (Row Blocks), ➜ 6.55 :uncalced => 0x005e, # ○ UNCALCED ➜ 6.104 ########################## ○ Calculation Settings Block ➜ 5.3 :calccount => 0x000c, # ○ CALCCOUNT ➜ 6.14 :calcmode => 0x000d, # ○ CALCMODE ➜ 6.15 :precision => 0x000e, # ○ PRECISION ➜ 6.74 (moved to Workbook Globals # Substream in BIFF5-BIFF8) :refmode => 0x000f, # ○ REFMODE ➜ 6.80 :delta => 0x0010, # ○ DELTA ➜ 6.30 :iteration => 0x0011, # ○ ITERATION ➜ 6.57 :saverecalc => 0x005f, # ○ SAVERECALC ➜ 6.85 (BIFF3-BIFF8 only) ########################## ○ Workbook Protection Block ➜ 5.18 :protect => 0x0012, # ○ PROTECT # Worksheet contents: 1 = protected (➜ 6.77) :windowprot => 0x0019, # ○ WINDOWPROTECT Window settings: 1 = protected # (BIFF4W only, ➜ 6.110) :objectprot => 0x0063, # ○ OBJECTPROTECT # Embedded objects: 1 = protected (➜ 6.69) :scenprotect => 0x00dd, # ○ SCENPROTECT # Scenarios: 1 = protected (BIFF5-BIFF8, ➜ 6.86) :password => 0x0013, # ○ PASSWORD Hash value of the password; # 0 = no password (➜ 6.72) ########################## ○ File Protection Block ➜ 5.19 :writeprot => 0x0086, # ○ WRITEPROT File is write protected # (BIFF3-BIFF8, ➜ 6.112), password in FILESHARING :filepass => 0x002f, # ○ FILEPASS File is read/write-protected, # encryption information (➜ 6.41) :writeaccess => 0x005c, # ○ WRITEACCESS User name (BIFF3-BIFF8, ➜ 6.111) :filesharing => 0x005b, # ○ FILESHARING File sharing options # (BIFF3-BIFF8, ➜ 6.42) ########################## ○ Link Table ➜ 5.10.3 # ●● SUPBOOK Block(s) # Settings for a referenced document :supbook => 0x01ae, # ● SUPBOOK ➜ 6.100 :externname => 0x0223, # ○○ EXTERNNAME ➜ 6.38 :xct => 0x0059, # ○○ ● XCT ➜ 6.114 :crn => 0x005a, # ●● CRN ➜ 6.24 :externsheet => 0x0017, # ● EXTERNSHEET ➜ 6.39 :name => 0x0218, # ○○ NAME ➜ 6.66 ########################## :window1 => 0x003d, # ● WINDOW1 ➜ 6.108 (has information on # which Spreadsheet is 'active') :backup => 0x0040, # ○ BACKUP ➜ 6.5 :country => 0x008c, # ○ COUNTRY (Make writeable?) ➜ 6.23 :hideobj => 0x008d, # ○ HIDEOBJ ➜ 6.52 :palette => 0x0092, # ○ PALETTE ➜ 6.70 :fngroupcnt => 0x009c, # ○ FNGROUPCOUNT :bookbool => 0x00da, # ○ BOOKBOOL ➜ 6.9 :tabid => 0x013d, # ○ TABID :useselfs => 0x0160, # ○ USESELFS (Natural Language Formulas) ➜ 6.105 :dsf => 0x0161, # ○ DSF (Double Stream File) ➜ 6.32 :refreshall => 0x01b7, # ○ REFRESHALL ########################## ● Worksheet View Settings Block ➜ 5.5 :window2 => 0x023e, # ● WINDOW2 ➜ 5.110 :scl => 0x00a0, # ○ SCL ➜ 5.92 (BIFF4-BIFF8 only) :pane => 0x0041, # ○ PANE ➜ 5.75 :selection => 0x001d, # ○○ SELECTION ➜ 5.93 ########################## ○ Page Settings Block ➜ 5.4 :hpagebreaks => 0x001b, # ○ HORIZONTALPAGEBREAKS ➜ 6.54 :vpagebreaks => 0x001a, # ○ VERTICALPAGEBREAKS ➜ 6.107 :header => 0x0014, # ○ HEADER ➜ 6.51 :footer => 0x0015, # ○ FOOTER ➜ 6.44 :hcenter => 0x0083, # ○ HCENTER ➜ 6.50 (BIFF3-BIFF8 only) :vcenter => 0x0084, # ○ VCENTER ➜ 6.106 (BIFF3-BIFF8 only) :leftmargin => 0x0026, # ○ LEFTMARGIN ➜ 6.62 :rightmargin => 0x0027, # ○ RIGHTMARGIN ➜ 6.81 :topmargin => 0x0028, # ○ TOPMARGIN ➜ 6.103 :bottommargin => 0x0029, # ○ BOTTOMMARGIN ➜ 6.11 # ○ PLS (opcode unknown) :pagesetup => 0x00a1, # ○ PAGESETUP ➜ 6.89 (BIFF4-BIFF8 only) :bitmap => 0x00e9, # ○ BITMAP ➜ 6.6 (Background-Bitmap, BIFF8 only) ########################## :printheaders => 0x002a, # ○ PRINTHEADERS ➜ 6.76 :printgridlns => 0x002b, # ○ PRINTGRIDLINES ➜ 6.75 :gridset => 0x0082, # ○ GRIDSET ➜ 6.48 :guts => 0x0080, # ○ GUTS ➜ 6.49 :defrowheight => 0x0225, # ○ DEFAULTROWHEIGHT ➜ 6.28 :wsbool => 0x0081, # ○ WSBOOL ➜ 6.113 :defcolwidth => 0x0055, # ○ DEFCOLWIDTH ➜ 6.29 :sort => 0x0090, # ○ SORT ➜ 6.95 :note => 0x001c, :obj => 0x005d, :drawing => 0x00EC, :txo => 0x01B6, }
- SEDOCPO =
0x00bf, 0x00c0, 0x00c1, 0x00e1, 0x00e2, 0x00eb, 0x01af, 0x01bc
OPCODES.invert
- TWIPS =
20
- UNDERLINE_TYPES =
{ 0x0001 => :single, 0x0002 => :double, 0x0021 => :single_accounting, 0x0022 => :double_accounting, }
- SEPYT_ENILREDNU =
UNDERLINE_TYPES.invert
- XF_H_ALIGN =
{ :default => 0, :left => 1, :center => 2, :right => 3, :fill => 4, :justify => 5, :merge => 6, :distributed => 7, }
- NGILA_H_FX =
XF_H_ALIGN.invert
- XF_TEXT_DIRECTION =
{ :context => 0, :left_to_right => 1, :right_to_left => 2, }
- NOITCERID_TXET_FX =
XF_TEXT_DIRECTION.invert
- XF_V_ALIGN =
{ :top => 0, :middle => 1, :bottom => 2, :justify => 3, :distributed => 4, }
- NGILA_V_FX =
XF_V_ALIGN.invert
- XF_BORDER_LINE_STYLES =
border line styles taken from www.openoffice.org/sc/excelfileformat.pdf
{ 0x00 => :none, 0x01 => :thin, 0x02 => :medium, 0x03 => :dashed, 0x04 => :dotted, 0x05 => :thick, 0x06 => :double, 0x07 => :hair, # the following are only valid for BIFF8 and higher: 0x08 => :medium_dashed, 0x09 => :thin_dash_dotted, 0x0a => :medium_dash_dotted, 0x0b => :thin_dash_dot_dotted, 0x0c => :medium_dash_dot_dotted, 0x0d => :slanted_medium_dash_dotted }
- SELYTS_ENIL_REDROB_FX =
XF_BORDER_LINE_STYLES.invert
- OPCODE_SIZE =
4
- ROW_HEIGHT =
12.1
- SST_CHUNKSIZE =
20
Instance Method Summary collapse
Instance Method Details
#binfmt(key) ⇒ Object
451 452 453 |
# File 'lib/spreadsheet/excel/internals.rb', line 451 def binfmt key BINARY_FORMATS[key] end |
#opcode(key) ⇒ Object
454 455 456 |
# File 'lib/spreadsheet/excel/internals.rb', line 454 def opcode key OPCODES[key] end |