Apache Software Foundation > Apache POI
 

Chart record information

Introduction

This document is intended as a work in progress for describing our current understanding of how the chart records are are written to produce a valid chart.

Bar chart

The following records detail the records written for a 'simple' bar chart.

===========================================
ectype = 0xec, recsize = 0xc8
BEGIN DUMP---------------------------------
0000000 0F 00 02 F0 C0 00 00 00 10 00 08 F0 08 00 00 00 ................
0000010 02 00 00 00 02 04 00 00 0F 00 03 F0 A8 00 00 00 ................
0000020 0F 00 04 F0 28 00 00 00 01 00 09 F0 10 00 00 00 ....(...........
0000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000040 02 00 0A F0 08 00 00 00 00 04 00 00 05 00 00 00 ................
0000050 0F 00 04 F0 70 00 00 00 92 0C 0A F0 08 00 00 00 ....p...........
0000060 02 04 00 00 00 0A 00 00 93 00 0B F0 36 00 00 00 ............6...
0000070 7F 00 04 01 04 01 BF 00 08 00 08 00 81 01 4E 00 ..............N.
0000080 00 08 83 01 4D 00 00 08 BF 01 10 00 11 00 C0 01 ....M...........
0000090 4D 00 00 08 FF 01 08 00 08 00 3F 02 00 00 02 00 M.........?.....
00000A0 BF 03 00 00 08 00 00 00 10 F0 12 00 00 00 00 00 ................
00000B0 04 00 C0 02 0A 00 F4 00 0E 00 66 01 20 00 E9 00 ..........f. ...
00000C0 00 00 11 F0 00 00 00 00 ........
END DUMP-----------------------------------
ecordid = 0xec, size =200
UNKNOWN RECORD:ec]
.id = ec
/UNKNOWN RECORD]
===========================================
ectype = 0x5d, recsize = 0x1a
BEGIN DUMP---------------------------------
0000000 15 00 12 00 05 00 02 00 11 60 00 00 00 00 B8 03 .........`......
0000010 87 03 00 00 00 00 00 00 00 00 ..........
END DUMP-----------------------------------
ecordid = 0x5d, size =26
UNKNOWN RECORD:5d]
.id = 5d
/UNKNOWN RECORD]
===========================================
ectype = 0x809, recsize = 0x10
BEGIN DUMP---------------------------------
0000000 00 06 20 00 FE 1C CD 07 C9 40 00 00 06 01 00 00 .. ......@......
END DUMP-----------------------------------
ecordid = 0x809, size =16
BOF RECORD]
.version = 600
.type = 20
.build = 1cfe
.buildyear = 1997
.history = 40c9
.requiredversion = 106
/BOF RECORD]
===========================================
ectype = 0x14, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x14, size =0
HEADER]
.length = 0
.header = null
/HEADER]
===========================================
ectype = 0x15, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x15, size =0
FOOTER]
.footerlen = 0
.footer = null
/FOOTER]
===========================================
ectype = 0x83, recsize = 0x2
BEGIN DUMP---------------------------------
0000000 00 00 ..
END DUMP-----------------------------------
ecordid = 0x83, size =2
HCENTER]
.hcenter = false
/HCENTER]
===========================================
ectype = 0x84, recsize = 0x2
BEGIN DUMP---------------------------------
0000000 00 00 ..
END DUMP-----------------------------------
ecordid = 0x84, size =2
VCENTER]
.vcenter = false
/VCENTER]
===========================================
ectype = 0xa1, recsize = 0x22
BEGIN DUMP---------------------------------
0000000 00 00 12 00 01 00 01 00 01 00 04 00 00 00 B8 03 ................
0000010 00 00 00 00 00 00 E0 3F 00 00 00 00 00 00 E0 3F .......?.......?
0000020 0F 00 ..
END DUMP-----------------------------------
ecordid = 0xa1, size =34
PRINTSETUP]
.papersize = 0
.scale = 18
.pagestart = 1
.fitwidth = 1
.fitheight = 1
.options = 4
.ltor = false
.landscape = false
.valid = true
.mono = false
.draft = false
.notes = false
.noOrientat = false
.usepage = false
.hresolution = 0
.vresolution = 952
.headermargin = 0.5
.footermargin = 0.5
.copies = 15
/PRINTSETUP]
===========================================
ectype = 0x33, recsize = 0x2
BEGIN DUMP---------------------------------
0000000 03 00 ..
END DUMP-----------------------------------
ecordid = 0x33, size =2
UNKNOWN RECORD:33]
.id = 33
/UNKNOWN RECORD]
===========================================
ectype = 0x1060, recsize = 0xa
BEGIN DUMP---------------------------------
0000000 A0 23 08 16 C8 00 00 00 05 00 .#........
END DUMP-----------------------------------
ecordid = 0x1060, size =10
FBI]
.xBasis = 0x23A0 (9120 )
.yBasis = 0x1608 (5640 )
.heightBasis = 0x00C8 (200 )
.scale = 0x0000 (0 )
.indexToFontTable = 0x0005 (5 )
/FBI]
===========================================
ectype = 0x1060, recsize = 0xa
BEGIN DUMP---------------------------------
0000000 A0 23 08 16 C8 00 01 00 06 00 .#........
END DUMP-----------------------------------
ecordid = 0x1060, size =10
FBI]
.xBasis = 0x23A0 (9120 )
.yBasis = 0x1608 (5640 )
.heightBasis = 0x00C8 (200 )
.scale = 0x0001 (1 )
.indexToFontTable = 0x0006 (6 )
/FBI]
===========================================
ectype = 0x12, recsize = 0x2
BEGIN DUMP---------------------------------
0000000 00 00 ..
END DUMP-----------------------------------
ecordid = 0x12, size =2
PROTECT]
.rowheight = 0
/PROTECT]
===========================================
ffset 0xf22 (3874)
ectype = 0x1001, recsize = 0x2
BEGIN DUMP---------------------------------
0000000 00 00 ..
END DUMP-----------------------------------
ecordid = 0x1001, size =2
UNITS]
.units = 0x0000 (0 )
/UNITS]
===========================================
ffset 0xf28 (3880)
ectype = 0x1002, recsize = 0x10
BEGIN DUMP---------------------------------
0000000 00 00 00 00 00 00 00 00 58 66 D0 01 40 66 22 01 ........Xf..@f".
END DUMP-----------------------------------
ecordid = 0x1002, size =16
CHART]
.x = 0x00000000 (0 )
.y = 0x00000000 (0 )
.width = 0x01D06658 (30434904 )
.height = 0x01226640 (19031616 )
/CHART]
===========================================
ffset 0xf3c (3900)
ectype = 0x1033, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1033, size =0
BEGIN]
/BEGIN]
===========================================
ffset 0xf40 (3904)
ectype = 0xa0, recsize = 0x4
BEGIN DUMP---------------------------------
0000000 01 00 01 00 ....
END DUMP-----------------------------------
ecordid = 0xa0, size =4
SCL]
.numerator = 0x0001 (1 )
.denominator = 0x0001 (1 )
/SCL]
===========================================
ffset 0xf48 (3912)
ectype = 0x1064, recsize = 0x8
BEGIN DUMP---------------------------------
0000000 00 00 01 00 00 00 01 00 ........
END DUMP-----------------------------------
ecordid = 0x1064, size =8
PLOTGROWTH]
.horizontalScale = 0x00010000 (65536 )
.verticalScale = 0x00010000 (65536 )
/PLOTGROWTH]
===========================================
ffset 0xf54 (3924)
ectype = 0x1032, recsize = 0x4
BEGIN DUMP---------------------------------
0000000 00 00 02 00 ....
END DUMP-----------------------------------
ecordid = 0x1032, size =4
FRAME]
.borderType = 0x0000 (0 )
.options = 0x0002 (2 )
.autoSize = false
.autoPosition = true
/FRAME]
===========================================
ffset 0xf5c (3932)
ectype = 0x1033, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1033, size =0
BEGIN]
/BEGIN]
===========================================
ffset 0xf60 (3936)
ectype = 0x1007, recsize = 0xc
BEGIN DUMP---------------------------------
0000000 00 00 00 00 00 00 FF FF 09 00 4D 00 ..........M.
END DUMP-----------------------------------
ecordid = 0x1007, size =12
LINEFORMAT]
.lineColor = 0x00000000 (0 )
.linePattern = 0x0000 (0 )
.weight = 0xFFFF (-1 )
.format = 0x0009 (9 )
.auto = true
.drawTicks = false
.unknown = false
.colourPaletteIndex = 0x004D (77 )
/LINEFORMAT]
===========================================
ffset 0xf70 (3952)
ectype = 0x100a, recsize = 0x10
BEGIN DUMP---------------------------------
0000000 FF FF FF 00 00 00 00 00 01 00 01 00 4E 00 4D 00 ............N.M.
END DUMP-----------------------------------
ecordid = 0x100a, size =16
AREAFORMAT]
.foregroundColor = 0x00FFFFFF (16777215 )
.backgroundColor = 0x00000000 (0 )
.pattern = 0x0001 (1 )
.formatFlags = 0x0001 (1 )
.automatic = true
.invert = false
.forecolorIndex = 0x004E (78 )
.backcolorIndex = 0x004D (77 )
/AREAFORMAT]
===========================================
ffset 0xf84 (3972)
ectype = 0x1034, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1034, size =0
END]
/END]
===========================================
ffset 0xf88 (3976)
ectype = 0x1003, recsize = 0xc
BEGIN DUMP---------------------------------
0000000 01 00 01 00 20 00 1F 00 01 00 00 00 .... .......
END DUMP-----------------------------------
ecordid = 0x1003, size =12
SERIES]
.categoryDataType = 0x0001 (1 )
.valuesDataType = 0x0001 (1 )
.numCategories = 0x0020 (32 )
.numValues = 0x001F (31 )
.bubbleSeriesType = 0x0001 (1 )
.numBubbleValues = 0x0000 (0 )
/SERIES]
===========================================
ffset 0xf98 (3992)
ectype = 0x1033, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1033, size =0
BEGIN]
/BEGIN]
===========================================
ffset 0xf9c (3996)
ectype = 0x1051, recsize = 0x8
BEGIN DUMP---------------------------------
0000000 00 01 00 00 00 00 00 00 ........
END DUMP-----------------------------------
ecordid = 0x1051, size =8
AI]
.linkType = 0x00 (0 )
.referenceType = 0x01 (1 )
.options = 0x0000 (0 )
.customNumberFormat = false
.indexNumberFmtRecord = 0x0000 (0 )
.formulaOfLink = (org.apache.poi.hssf.record.LinkedDataFormulaField@1ee3914 )
/AI]
===========================================
ffset 0xfa8 (4008)
ectype = 0x1051, recsize = 0x13
BEGIN DUMP---------------------------------
0000000 01 02 00 00 00 00 0B 00 3B 00 00 00 00 1E 00 01 ........;.......
0000010 00 01 00 ...
END DUMP-----------------------------------
ecordid = 0x1051, size =19
AI]
.linkType = 0x01 (1 )
.referenceType = 0x02 (2 )
.options = 0x0000 (0 )
.customNumberFormat = false
.indexNumberFmtRecord = 0x0000 (0 )
.formulaOfLink = (org.apache.poi.hssf.record.LinkedDataFormulaField@e5855a )
/AI]
===========================================
ffset 0xfbf (4031)
ectype = 0x1051, recsize = 0x13
BEGIN DUMP---------------------------------
0000000 02 02 00 00 69 01 0B 00 3B 00 00 00 00 1F 00 00 ....i...;.......
0000010 00 00 00 ...
END DUMP-----------------------------------
ecordid = 0x1051, size =19
AI]
.linkType = 0x02 (2 )
.referenceType = 0x02 (2 )
.options = 0x0000 (0 )
.customNumberFormat = false
.indexNumberFmtRecord = 0x0169 (361 )
.formulaOfLink = (org.apache.poi.hssf.record.LinkedDataFormulaField@95fd19 )
/AI]
===========================================
ffset 0xfd6 (4054)
ectype = 0x1051, recsize = 0x8
BEGIN DUMP---------------------------------
0000000 03 01 00 00 00 00 00 00 ........
END DUMP-----------------------------------
ecordid = 0x1051, size =8
AI]
.linkType = 0x03 (3 )
.referenceType = 0x01 (1 )
.options = 0x0000 (0 )
.customNumberFormat = false
.indexNumberFmtRecord = 0x0000 (0 )
.formulaOfLink = (org.apache.poi.hssf.record.LinkedDataFormulaField@11b9fb1 )
/AI]
===========================================
ffset 0xfe2 (4066)
ectype = 0x1006, recsize = 0x8
BEGIN DUMP---------------------------------
0000000 FF FF 00 00 00 00 00 00 ........
END DUMP-----------------------------------
ecordid = 0x1006, size =8
DATAFORMAT]
.pointNumber = 0xFFFF (-1 )
.seriesIndex = 0x0000 (0 )
.seriesNumber = 0x0000 (0 )
.formatFlags = 0x0000 (0 )
.useExcel4Colors = false
/DATAFORMAT]
===========================================
ffset 0xfee (4078)
ectype = 0x1033, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1033, size =0
BEGIN]
/BEGIN]
===========================================
ffset 0xff2 (4082)
ectype = 0x105f, recsize = 0x2
BEGIN DUMP---------------------------------
0000000 00 00 ..
END DUMP-----------------------------------
ecordid = 0x105f, size =2
UNKNOWN RECORD]
.id = 105f
/UNKNOWN RECORD]
===========================================
ffset 0xff8 (4088)
ectype = 0x1034, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1034, size =0
END]
/END]
===========================================
ffset 0xffc (4092)
ectype = 0x1045, recsize = 0x2
BEGIN DUMP---------------------------------
0000000 00 00 ..
END DUMP-----------------------------------
ecordid = 0x1045, size =2
SeriesToChartGroup]
.chartGroupIndex = 0x0000 (0 )
/SeriesToChartGroup]
===========================================
ffset 0x1002 (4098)
ectype = 0x1034, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1034, size =0
END]
/END]
===========================================
ffset 0x1006 (4102)
ectype = 0x1044, recsize = 0x4
BEGIN DUMP---------------------------------
0000000 0A 00 00 00 ....
END DUMP-----------------------------------
ecordid = 0x1044, size =4
SHTPROPS]
.flags = 0x000A (10 )
.chartTypeManuallyFormatted = false
.plotVisibleOnly = true
.doNotSizeWithWindow = false
.defaultPlotDimensions = true
.autoPlotArea = false
.empty = 0x00 (0 )
/SHTPROPS]
===========================================
ffset 0x100e (4110)
ectype = 0x1024, recsize = 0x2
BEGIN DUMP---------------------------------
0000000 02 00 ..
END DUMP-----------------------------------
ecordid = 0x1024, size =2
DEFAULTTEXT]
.categoryDataType = 0x0002 (2 )
/DEFAULTTEXT]
===========================================
ffset 0x1014 (4116)
ectype = 0x1025, recsize = 0x20
BEGIN DUMP---------------------------------
0000000 02 02 01 00 00 00 00 00 DB FF FF FF C4 FF FF FF ................
0000010 00 00 00 00 00 00 00 00 B1 00 4D 00 50 2B 00 00 ..........M.P+..
END DUMP-----------------------------------
ecordid = 0x1025, size =32
TEXT]
.horizontalAlignment = 0x02 (2 )
.verticalAlignment = 0x02 (2 )
.displayMode = 0x0001 (1 )
.rgbColor = 0x00000000 (0 )
.x = 0xFFFFFFDB (-37 )
.y = 0xFFFFFFC4 (-60 )
.width = 0x00000000 (0 )
.height = 0x00000000 (0 )
.options1 = 0x00B1 (177 )
.autoColor = true
.showKey = false
.showValue = false
.vertical = false
.autoGeneratedText = true
.generated = true
.autoLabelDeleted = false
.autoBackground = true
.rotation = 0
.showCategoryLabelAsPercentage = false
.showValueAsPercentage = false
.showBubbleSizes = false
.showLabel = false
.indexOfColorValue = 0x004D (77 )
.options2 = 0x2B50 (11088 )
.dataLabelPlacement = 0
.textRotation = 0x0000 (0 )
/TEXT]
===========================================
ffset 0x1038 (4152)
ectype = 0x1033, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1033, size =0
BEGIN]
/BEGIN]
===========================================
ffset 0x103c (4156)
ectype = 0x104f, recsize = 0x14
BEGIN DUMP---------------------------------
0000000 02 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000010 00 00 00 00 ....
END DUMP-----------------------------------
ecordid = 0x104f, size =20
UNKNOWN RECORD]
.id = 104f
/UNKNOWN RECORD]
===========================================
ffset 0x1054 (4180)
ectype = 0x1026, recsize = 0x2
BEGIN DUMP---------------------------------
0000000 05 00 ..
END DUMP-----------------------------------
ecordid = 0x1026, size =2
FONTX]
.fontIndex = 0x0005 (5 )
/FONTX]
===========================================
ffset 0x105a (4186)
ectype = 0x1051, recsize = 0x8
BEGIN DUMP---------------------------------
0000000 00 01 00 00 00 00 00 00 ........
END DUMP-----------------------------------
ecordid = 0x1051, size =8
AI]
.linkType = 0x00 (0 )
.referenceType = 0x01 (1 )
.options = 0x0000 (0 )
.customNumberFormat = false
.indexNumberFmtRecord = 0x0000 (0 )
.formulaOfLink = (org.apache.poi.hssf.record.LinkedDataFormulaField@913fe2 )
/AI]
===========================================
ffset 0x1066 (4198)
ectype = 0x1034, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1034, size =0
END]
/END]
===========================================
ffset 0x106a (4202)
ectype = 0x1024, recsize = 0x2
BEGIN DUMP---------------------------------
0000000 03 00 ..
END DUMP-----------------------------------
ecordid = 0x1024, size =2
DEFAULTTEXT]
.categoryDataType = 0x0003 (3 )
/DEFAULTTEXT]
===========================================
ffset 0x1070 (4208)
ectype = 0x1025, recsize = 0x20
BEGIN DUMP---------------------------------
0000000 02 02 01 00 00 00 00 00 DB FF FF FF C4 FF FF FF ................
0000010 00 00 00 00 00 00 00 00 B1 00 4D 00 50 2B 00 00 ..........M.P+..
END DUMP-----------------------------------
ecordid = 0x1025, size =32
TEXT]
.horizontalAlignment = 0x02 (2 )
.verticalAlignment = 0x02 (2 )
.displayMode = 0x0001 (1 )
.rgbColor = 0x00000000 (0 )
.x = 0xFFFFFFDB (-37 )
.y = 0xFFFFFFC4 (-60 )
.width = 0x00000000 (0 )
.height = 0x00000000 (0 )
.options1 = 0x00B1 (177 )
.autoColor = true
.showKey = false
.showValue = false
.vertical = false
.autoGeneratedText = true
.generated = true
.autoLabelDeleted = false
.autoBackground = true
.rotation = 0
.showCategoryLabelAsPercentage = false
.showValueAsPercentage = false
.showBubbleSizes = false
.showLabel = false
.indexOfColorValue = 0x004D (77 )
.options2 = 0x2B50 (11088 )
.dataLabelPlacement = 0
.textRotation = 0x0000 (0 )
/TEXT]
===========================================
ffset 0x1094 (4244)
ectype = 0x1033, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1033, size =0
BEGIN]
/BEGIN]
===========================================
ffset 0x1098 (4248)
ectype = 0x104f, recsize = 0x14
BEGIN DUMP---------------------------------
0000000 02 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000010 00 00 00 00 ....
END DUMP-----------------------------------
ecordid = 0x104f, size =20
UNKNOWN RECORD]
.id = 104f
/UNKNOWN RECORD]
===========================================
ffset 0x10b0 (4272)
ectype = 0x1026, recsize = 0x2
BEGIN DUMP---------------------------------
0000000 06 00 ..
END DUMP-----------------------------------
ecordid = 0x1026, size =2
FONTX]
.fontIndex = 0x0006 (6 )
/FONTX]
===========================================
ffset 0x10b6 (4278)
ectype = 0x1051, recsize = 0x8
BEGIN DUMP---------------------------------
0000000 00 01 00 00 00 00 00 00 ........
END DUMP-----------------------------------
ecordid = 0x1051, size =8
AI]
.linkType = 0x00 (0 )
.referenceType = 0x01 (1 )
.options = 0x0000 (0 )
.customNumberFormat = false
.indexNumberFmtRecord = 0x0000 (0 )
.formulaOfLink = (org.apache.poi.hssf.record.LinkedDataFormulaField@1f934ad )
/AI]
===========================================
ffset 0x10c2 (4290)
ectype = 0x1034, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1034, size =0
END]
/END]
===========================================
ffset 0x10c6 (4294)
ectype = 0x1046, recsize = 0x2
BEGIN DUMP---------------------------------
0000000 01 00 ..
END DUMP-----------------------------------
ecordid = 0x1046, size =2
AXISUSED]
.numAxis = 0x0001 (1 )
/AXISUSED]
===========================================
ffset 0x10cc (4300)
ectype = 0x1041, recsize = 0x12
BEGIN DUMP---------------------------------
0000000 00 00 DF 01 00 00 DD 00 00 00 B3 0B 00 00 56 0B ..............V.
0000010 00 00 ..
END DUMP-----------------------------------
ecordid = 0x1041, size =18
AXISPARENT]
.axisType = 0x0000 (0 )
.x = 0x000001DF (479 )
.y = 0x000000DD (221 )
.width = 0x00000BB3 (2995 )
.height = 0x00000B56 (2902 )
/AXISPARENT]
===========================================
ffset 0x10e2 (4322)
ectype = 0x1033, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1033, size =0
BEGIN]
/BEGIN]
===========================================
ffset 0x10e6 (4326)
ectype = 0x104f, recsize = 0x14
BEGIN DUMP---------------------------------
0000000 02 00 02 00 3A 00 00 00 5E 00 00 00 58 0D 00 00 ....:...^...X...
0000010 E5 0E 00 00 ....
END DUMP-----------------------------------
ecordid = 0x104f, size =20
UNKNOWN RECORD]
.id = 104f
/UNKNOWN RECORD]
===========================================
ffset 0x10fe (4350)
ectype = 0x101d, recsize = 0x12
BEGIN DUMP---------------------------------
0000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000010 00 00 ..
END DUMP-----------------------------------
ecordid = 0x101d, size =18
AXIS]
.axisType = 0x0000 (0 )
.reserved1 = 0x00000000 (0 )
.reserved2 = 0x00000000 (0 )
.reserved3 = 0x00000000 (0 )
.reserved4 = 0x00000000 (0 )
/AXIS]
===========================================
ffset 0x1114 (4372)
ectype = 0x1033, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1033, size =0
BEGIN]
/BEGIN]
===========================================
ffset 0x1118 (4376)
ectype = 0x1020, recsize = 0x8
BEGIN DUMP---------------------------------
0000000 01 00 01 00 01 00 01 00 ........
END DUMP-----------------------------------
ecordid = 0x1020, size =8
CATSERRANGE]
.crossingPoint = 0x0001 (1 )
.labelFrequency = 0x0001 (1 )
.tickMarkFrequency = 0x0001 (1 )
.options = 0x0001 (1 )
.valueAxisCrossing = true
.crossesFarRight = false
.reversed = false
/CATSERRANGE]
===========================================
ffset 0x1124 (4388)
ectype = 0x1062, recsize = 0x12
BEGIN DUMP---------------------------------
0000000 1C 90 39 90 02 00 00 00 01 00 00 00 00 00 1C 90 ..9.............
0000010 FF 00 ..
END DUMP-----------------------------------
ecordid = 0x1062, size =18
AXCEXT]
.minimumCategory = 0x901C (-28644 )
.maximumCategory = 0x9039 (-28615 )
.majorUnitValue = 0x0002 (2 )
.majorUnit = 0x0000 (0 )
.minorUnitValue = 0x0001 (1 )
.minorUnit = 0x0000 (0 )
.baseUnit = 0x0000 (0 )
.crossingPoint = 0x901C (-28644 )
.options = 0x00FF (255 )
.defaultMinimum = true
.defaultMaximum = true
.defaultMajor = true
.defaultMinorUnit = true
.isDate = true
.defaultBase = true
.defaultCross = true
.defaultDateSettings = true
/AXCEXT]
===========================================
ffset 0x113a (4410)
ectype = 0x101e, recsize = 0x1e
BEGIN DUMP---------------------------------
0000000 02 00 03 01 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000010 00 00 00 00 00 00 00 00 23 00 4D 00 2D 00 ........#.M.-.
END DUMP-----------------------------------
ecordid = 0x101e, size =30
TICK]
.majorTickType = 0x02 (2 )
.minorTickType = 0x00 (0 )
.labelPosition = 0x03 (3 )
.background = 0x01 (1 )
.labelColorRgb = 0x00000000 (0 )
.zero1 = 0x0000 (0 )
.zero2 = 0x0000 (0 )
.options = 0x0023 (35 )
.autoTextColor = true
.autoTextBackground = true
.rotation = 0
.autorotate = true
.tickColor = 0x004D (77 )
.zero3 = 0x002D (45 )
/TICK]
===========================================
ffset 0x115c (4444)
ectype = 0x1034, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1034, size =0
END]
/END]
===========================================
ffset 0x1160 (4448)
ectype = 0x101d, recsize = 0x12
BEGIN DUMP---------------------------------
0000000 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000010 00 00 ..
END DUMP-----------------------------------
ecordid = 0x101d, size =18
AXIS]
.axisType = 0x0001 (1 )
.reserved1 = 0x00000000 (0 )
.reserved2 = 0x00000000 (0 )
.reserved3 = 0x00000000 (0 )
.reserved4 = 0x00000000 (0 )
/AXIS]
===========================================
ffset 0x1176 (4470)
ectype = 0x1033, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1033, size =0
BEGIN]
/BEGIN]
===========================================
ffset 0x117a (4474)
ectype = 0x101f, recsize = 0x2a
BEGIN DUMP---------------------------------
0000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000020 00 00 00 00 00 00 00 00 1F 01 ..........
END DUMP-----------------------------------
ecordid = 0x101f, size =42
VALUERANGE]
.minimumAxisValue = (0.0 )
.maximumAxisValue = (0.0 )
.majorIncrement = (0.0 )
.minorIncrement = (0.0 )
.categoryAxisCross = (0.0 )
.options = 0x011F (287 )
.automaticMinimum = true
.automaticMaximum = true
.automaticMajor = true
.automaticMinor = true
.automaticCategoryCrossing = true
.logarithmicScale = false
.valuesInReverse = false
.crossCategoryAxisAtMaximum = false
.reserved = true
/VALUERANGE]
===========================================
ffset 0x11a8 (4520)
ectype = 0x101e, recsize = 0x1e
BEGIN DUMP---------------------------------
0000000 02 00 03 01 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000010 00 00 00 00 00 00 00 00 23 00 4D 00 00 00 ........#.M...
END DUMP-----------------------------------
ecordid = 0x101e, size =30
TICK]
.majorTickType = 0x02 (2 )
.minorTickType = 0x00 (0 )
.labelPosition = 0x03 (3 )
.background = 0x01 (1 )
.labelColorRgb = 0x00000000 (0 )
.zero1 = 0x0000 (0 )
.zero2 = 0x0000 (0 )
.options = 0x0023 (35 )
.autoTextColor = true
.autoTextBackground = true
.rotation = 0
.autorotate = true
.tickColor = 0x004D (77 )
.zero3 = 0x0000 (0 )
/TICK]
===========================================
ffset 0x11ca (4554)
ectype = 0x1021, recsize = 0x2
BEGIN DUMP---------------------------------
0000000 01 00 ..
END DUMP-----------------------------------
ecordid = 0x1021, size =2
AXISLINEFORMAT]
.axisType = 0x0001 (1 )
/AXISLINEFORMAT]
===========================================
ffset 0x11d0 (4560)
ectype = 0x1007, recsize = 0xc
BEGIN DUMP---------------------------------
0000000 00 00 00 00 00 00 FF FF 09 00 4D 00 ..........M.
END DUMP-----------------------------------
ecordid = 0x1007, size =12
LINEFORMAT]
.lineColor = 0x00000000 (0 )
.linePattern = 0x0000 (0 )
.weight = 0xFFFF (-1 )
.format = 0x0009 (9 )
.auto = true
.drawTicks = false
.unknown = false
.colourPaletteIndex = 0x004D (77 )
/LINEFORMAT]
===========================================
ffset 0x11e0 (4576)
ectype = 0x1034, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1034, size =0
END]
/END]
===========================================
ffset 0x11e4 (4580)
ectype = 0x1035, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1035, size =0
PLOTAREA]
/PLOTAREA]
===========================================
ffset 0x11e8 (4584)
ectype = 0x1032, recsize = 0x4
BEGIN DUMP---------------------------------
0000000 00 00 03 00 ....
END DUMP-----------------------------------
ecordid = 0x1032, size =4
FRAME]
.borderType = 0x0000 (0 )
.options = 0x0003 (3 )
.autoSize = true
.autoPosition = true
/FRAME]
===========================================
ffset 0x11f0 (4592)
ectype = 0x1033, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1033, size =0
BEGIN]
/BEGIN]
===========================================
ffset 0x11f4 (4596)
ectype = 0x1007, recsize = 0xc
BEGIN DUMP---------------------------------
0000000 80 80 80 00 00 00 00 00 00 00 17 00 ............
END DUMP-----------------------------------
ecordid = 0x1007, size =12
LINEFORMAT]
.lineColor = 0x00808080 (8421504 )
.linePattern = 0x0000 (0 )
.weight = 0x0000 (0 )
.format = 0x0000 (0 )
.auto = false
.drawTicks = false
.unknown = false
.colourPaletteIndex = 0x0017 (23 )
/LINEFORMAT]
===========================================
ffset 0x1204 (4612)
ectype = 0x100a, recsize = 0x10
BEGIN DUMP---------------------------------
0000000 C0 C0 C0 00 00 00 00 00 01 00 00 00 16 00 4F 00 ..............O.
END DUMP-----------------------------------
ecordid = 0x100a, size =16
AREAFORMAT]
.foregroundColor = 0x00C0C0C0 (12632256 )
.backgroundColor = 0x00000000 (0 )
.pattern = 0x0001 (1 )
.formatFlags = 0x0000 (0 )
.automatic = false
.invert = false
.forecolorIndex = 0x0016 (22 )
.backcolorIndex = 0x004F (79 )
/AREAFORMAT]
===========================================
ffset 0x1218 (4632)
ectype = 0x1034, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1034, size =0
END]
/END]
===========================================
ffset 0x121c (4636)
ectype = 0x1014, recsize = 0x14
BEGIN DUMP---------------------------------
0000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000010 00 00 00 00 ....
END DUMP-----------------------------------
ecordid = 0x1014, size =20
CHARTFORMAT]
.xPosition = 0
.yPosition = 0
.width = 0
.height = 0
.grBit = 0
/CHARTFORMAT]
===========================================
ffset 0x1234 (4660)
ectype = 0x1033, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1033, size =0
BEGIN]
/BEGIN]
===========================================
ffset 0x1238 (4664)
ectype = 0x1017, recsize = 0x6
BEGIN DUMP---------------------------------
0000000 00 00 96 00 00 00 ......
END DUMP-----------------------------------
ecordid = 0x1017, size =6
BAR]
.barSpace = 0x0000 (0 )
.categorySpace = 0x0096 (150 )
.formatFlags = 0x0000 (0 )
.horizontal = false
.stacked = false
.displayAsPercentage = false
.shadow = false
/BAR]
===========================================
ffset 0x1242 (4674)
ectype = 0x1022, recsize = 0xa
BEGIN DUMP---------------------------------
0000000 00 00 00 00 00 00 00 00 0F 00 ..........
END DUMP-----------------------------------
ecordid = 0x1022, size =10
UNKNOWN RECORD]
.id = 1022
/UNKNOWN RECORD]
===========================================
ffset 0x1250 (4688)
ectype = 0x1015, recsize = 0x14
BEGIN DUMP---------------------------------
0000000 D6 0D 00 00 1E 06 00 00 B5 01 00 00 D5 00 00 00 ................
0000010 03 01 1F 00 ....
END DUMP-----------------------------------
ecordid = 0x1015, size =20
LEGEND]
.xAxisUpperLeft = 0x00000DD6 (3542 )
.yAxisUpperLeft = 0x0000061E (1566 )
.xSize = 0x000001B5 (437 )
.ySize = 0x000000D5 (213 )
.type = 0x03 (3 )
.spacing = 0x01 (1 )
.options = 0x001F (31 )
.autoPosition = true
.autoSeries = true
.autoXPositioning = true
.autoYPositioning = true
.vertical = true
.dataTable = false
/LEGEND]
===========================================
ffset 0x1268 (4712)
ectype = 0x1033, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1033, size =0
BEGIN]
/BEGIN]
===========================================
ffset 0x126c (4716)
ectype = 0x104f, recsize = 0x14
BEGIN DUMP---------------------------------
0000000 05 00 02 00 D6 0D 00 00 1E 06 00 00 00 00 00 00 ................
0000010 00 00 00 00 ....
END DUMP-----------------------------------
ecordid = 0x104f, size =20
UNKNOWN RECORD]
.id = 104f
/UNKNOWN RECORD]
===========================================
ffset 0x1284 (4740)
ectype = 0x1025, recsize = 0x20
BEGIN DUMP---------------------------------
0000000 02 02 01 00 00 00 00 00 DB FF FF FF C4 FF FF FF ................
0000010 00 00 00 00 00 00 00 00 B1 00 4D 00 70 37 00 00 ..........M.p7..
END DUMP-----------------------------------
ecordid = 0x1025, size =32
TEXT]
.horizontalAlignment = 0x02 (2 )
.verticalAlignment = 0x02 (2 )
.displayMode = 0x0001 (1 )
.rgbColor = 0x00000000 (0 )
.x = 0xFFFFFFDB (-37 )
.y = 0xFFFFFFC4 (-60 )
.width = 0x00000000 (0 )
.height = 0x00000000 (0 )
.options1 = 0x00B1 (177 )
.autoColor = true
.showKey = false
.showValue = false
.vertical = false
.autoGeneratedText = true
.generated = true
.autoLabelDeleted = false
.autoBackground = true
.rotation = 0
.showCategoryLabelAsPercentage = false
.showValueAsPercentage = false
.showBubbleSizes = false
.showLabel = false
.indexOfColorValue = 0x004D (77 )
.options2 = 0x3770 (14192 )
.dataLabelPlacement = 0
.textRotation = 0x0000 (0 )
/TEXT]
===========================================
ffset 0x12a8 (4776)
ectype = 0x1033, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1033, size =0
BEGIN]
/BEGIN]
===========================================
ffset 0x12ac (4780)
ectype = 0x104f, recsize = 0x14
BEGIN DUMP---------------------------------
0000000 02 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000010 00 00 00 00 ....
END DUMP-----------------------------------
ecordid = 0x104f, size =20
UNKNOWN RECORD]
.id = 104f
/UNKNOWN RECORD]
===========================================
ffset 0x12c4 (4804)
ectype = 0x1051, recsize = 0x8
BEGIN DUMP---------------------------------
0000000 00 01 00 00 00 00 00 00 ........
END DUMP-----------------------------------
ecordid = 0x1051, size =8
AI]
.linkType = 0x00 (0 )
.referenceType = 0x01 (1 )
.options = 0x0000 (0 )
.customNumberFormat = false
.indexNumberFmtRecord = 0x0000 (0 )
.formulaOfLink = (org.apache.poi.hssf.record.LinkedDataFormulaField@1d05c81 )
/AI]
===========================================
ffset 0x12d0 (4816)
ectype = 0x1034, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1034, size =0
END]
/END]
===========================================
ffset 0x12d4 (4820)
ectype = 0x1034, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1034, size =0
END]
/END]
===========================================
ffset 0x12d8 (4824)
ectype = 0x1034, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1034, size =0
END]
/END]
===========================================
ffset 0x12dc (4828)
ectype = 0x1034, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1034, size =0
END]
/END]
===========================================
ffset 0x12e0 (4832)
ectype = 0x1034, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0x1034, size =0
END]
/END]
===========================================
ectype = 0x200, recsize = 0xe
BEGIN DUMP---------------------------------
0000000 00 00 00 00 1F 00 00 00 00 00 01 00 00 00 ..............
END DUMP-----------------------------------
ecordid = 0x200, size =14
DIMENSIONS]
.firstrow = 0
.lastrow = 1f
.firstcol = 0
.lastcol = 1
.zero = 0
/DIMENSIONS]
===========================================
ectype = 0x1065, recsize = 0x2
BEGIN DUMP---------------------------------
0000000 02 00 ..
END DUMP-----------------------------------
ecordid = 0x1065, size =2
SINDEX]
.index = 0x0002 (2 )
/SINDEX]
===========================================
ectype = 0x1065, recsize = 0x2
BEGIN DUMP---------------------------------
0000000 01 00 ..
END DUMP-----------------------------------
ecordid = 0x1065, size =2
SINDEX]
.index = 0x0001 (1 )
/SINDEX]
===========================================
ectype = 0x1065, recsize = 0x2
BEGIN DUMP---------------------------------
0000000 03 00 ..
END DUMP-----------------------------------
ecordid = 0x1065, size =2
SINDEX]
.index = 0x0003 (3 )
/SINDEX]
===========================================
ectype = 0xa, recsize = 0x0
BEGIN DUMP---------------------------------
*NO RECORD DATA**
END DUMP-----------------------------------
ecordid = 0xa, size =0
EOF]
/EOF]

The next section breaks those records down into an easier to read format:

[UNKNOWN RECORD:ec]
[UNKNOWN RECORD:5d]
[BOF RECORD]
[HEADER]
[FOOTER]
[HCENTER]
[VCENTER]
[PRINTSETUP]
[UNKNOWN RECORD:33]
[FBI]
[FBI]
[PROTECT]
[UNITS]
[CHART]
[BEGIN]
[SCL] // zoom magnification
[PLOTGROWTH] // font scaling
[FRAME] // border around text
[BEGIN] // default line and area format
[LINEFORMAT]
[AREAFORMAT]
[END]
[SERIES] // start of series
[BEGIN]
[AI] // LINK_TYPE_TITLE_OR_TEXT
[AI] // LINK_TYPE_VALUES
[AI] // LINK_TYPE_CATEGORIES
[AI] // ??
[DATAFORMAT] // Formatting applies to series?
[BEGIN] // ??
[UNKNOWN RECORD]
[END]
[SeriesToChartGroup] // Used to support > 1 chart?
[END]
[SHTPROPS] // Some defaults for how chart is displayed.
[DEFAULTTEXT] // Describes the characteristics of the next
// record
[TEXT] // Details of the text that follows in the
// next section
[BEGIN]
[UNKNOWN RECORD] // POS record... looks like I missed this one.
// docs seem to indicate it's better to use
// defaults...
[FONTX] // index to font record.
[AI] // link to text? seems to be linking to nothing
[END]
[DEFAULTTEXT] // contains a category type of 3 which is not
// documented (sigh).
[TEXT] // defines position, color etc for text on chart.
[BEGIN]
[UNKNOWN RECORD] // Another pos record
[FONTX] // font
[AI] // reference type is DIRECT (not sure what this
// means)
[END]
[AXISUSED] // number of axis on the chart.
[AXISPARENT] // axis size and location
[BEGIN] // beginning of axis details
[UNKNOWN RECORD] // Another pos record.
[AXIS] // Category axis
[BEGIN]
[CATSERRANGE] // defines tick marks and other stuff
[AXCEXT] // unit information
[TICK] // tick formating characteristics
[END]
[AXIS] // Value axis
[BEGIN]
[VALUERANGE] // defines tick marks and other stuff
[TICK] // tick formating characteristics
[AXISLINEFORMAT] // major grid line axis format
[LINEFORMAT] // what do the lines look like?
[END]
[PLOTAREA] // marks that the frame following belongs
// to the frame.
[FRAME] // border
[BEGIN]
[LINEFORMAT] // border line
[AREAFORMAT] // border area
[END]
[CHARTFORMAT] // marks a chart group
[BEGIN]
[BAR] // indicates a bar chart
[UNKNOWN RECORD] // apparently this record is ignoreable
[LEGEND] // positioning for the legend
[BEGIN]
[UNKNOWN RECORD] // another position record.
[TEXT] // details of the text that follows
// in the next section
[BEGIN]
[UNKNOWN RECORD] // yet another pos record
[AI] // another link (of type direct)
[END]
[END]
[END]
[END]
[END]
[DIMENSIONS]
[SINDEX]
[SINDEX]
[SINDEX]
[EOF]

Just a quick note on some of the unknown records:

  • EC: MSODRAWING - A Microsoft drawing record. (Need to track down where this is documented).
  • 5D: OBJ: Description of a drawing object. (This is going to be a PITA to implement).
  • 33: Not documented. :-(
  • 105f: Not documented. :-(
  • 104f: POS: Position record (should be able to safely leave this out).
  • 1022: CHARTFORMATLINK: Can be left out.

It is currently suspected that many of those records could be left out when generating a bar chart from scratch. The way we will be proceeding with this is to write code that generates most of these records and then start removing them to see how this effects the chart in excel.

Inserting the Chart into the Workbook

  • Unknown record (sid=00eb) is inserted before the SST record.
============================================
rectype = 0xeb, recsize = 0x5a
-BEGIN DUMP---------------------------------
00000000 0F 00 00 F0 52 00 00 00 00 00 06 F0 18 00 00 00 ....R...........
00000010 01 08 00 00 02 00 00 00 02 00 00 00 01 00 00 00 ................
00000020 01 00 00 00 03 00 00 00 33 00 0B F0 12 00 00 00 ........3.......
00000030 BF 00 08 00 08 00 81 01 09 00 00 08 C0 01 40 00 ..............@.
00000040 00 08 40 00 1E F1 10 00 00 00 0D 00 00 08 0C 00 ..@.............
00000050 00 08 17 00 00 08 F7 00 00 10 ..........
-END DUMP-----------------------------------
recordid = 0xeb, size =90
[UNKNOWN RECORD:eb]
.id = eb
[/UNKNOWN RECORD]
============================================
  • Any extra font records are inserted as needed
  • Chart records inserted after DBCell records.

by Glen Stampoultzis