src/xlsrecord.py | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++----- src/xlsstream.py | 4 ++- 2 files changed, 54 insertions(+), 6 deletions(-)
New commits: commit b8394504efdb3437d48c3ae9783c5969b036732f Author: Kohei Yoshida <kohei.yosh...@suse.com> Date: Fri Feb 10 23:54:08 2012 -0500 Handler for SXDBB record. This requires storing unique values for each field item in order to print them in the SXDBB records. diff --git a/src/xlsrecord.py b/src/xlsrecord.py index e2c7383..d75ab55 100644 --- a/src/xlsrecord.py +++ b/src/xlsrecord.py @@ -133,6 +133,16 @@ def dumpFrtHeader(header): return {'rt': header.rt, 'flags': header.flags} + +class PivotField(object): + """Data about pivot cache field. + +This is to be stored in the persistent stream data, to be used in the SXDBB +records.""" + def __init__ (self): + self.hasMoreThan255 = False + self.values = [] + class BaseRecordHandler(globals.ByteStream): def __init__ (self, header, size, bytes, strmData): @@ -2917,6 +2927,24 @@ class SXDb(BaseRecordHandler): self.appendLine("changed by: %s"%changedBy) +class SXDBB(BaseRecordHandler): + + def __parseBytes (self): + self.items = [] + for fld in self.strmData.pivotCacheFields: + if fld.hasMoreThan255: + # read 2 bytes + idx = self.readUnsignedInt(2) + else: + idx = self.readUnsignedInt(1) + s = fld.values[idx] + self.items.append(s) + + def parseBytes (self): + self.__parseBytes() + for item in self.items: + self.appendLine(item) + class SXDbEx(BaseRecordHandler): def parseBytes (self): @@ -2935,6 +2963,8 @@ class SXDtr(BaseRecordHandler): self.hr = self.readUnsignedInt(1) self.min = self.readUnsignedInt(1) self.sec = self.readUnsignedInt(1) + s = "%d-%d-%dT%2.2d-%2.2d-%2.2d"%(self.yr, self.mon, self.dom, self.hr, self.min, self.sec) + self.strmData.pivotCacheFields[-1].values.append(s) def parseBytes (self): self.__parseBytes() @@ -3016,6 +3046,13 @@ class SXFDB(BaseRecordHandler): self.catm = self.readUnsignedInt(2) self.stFieldName = self.readXLUnicodeString() + if self.fAllAtoms: + # this cached field has a collection of items in the following + # SXDBB records. + obj = PivotField() + obj.hasMoreThan255 = self.fShortIitms + self.strmData.pivotCacheFields.append(obj) + def parseBytes (self): self.__parseBytes() self.appendLineBoolean("collection of items", self.fAllAtoms) @@ -3481,9 +3518,14 @@ class PivotQueryTableEx(BaseRecordHandler): class SXDouble(BaseRecordHandler): + + def __parseBytes (self): + self.val = self.readDouble() + self.strmData.pivotCacheFields[-1].values.append("%g"%self.val) + def parseBytes (self): - val = self.readDouble() - self.appendLine("value: %g"%val) + self.__parseBytes() + self.appendLine("value: %g"%self.val) class SXBoolean(BaseRecordHandler): @@ -3501,10 +3543,14 @@ class SXInteger(BaseRecordHandler): class SXString(BaseRecordHandler): + + def __parseBytes (self): + self.text = self.readXLUnicodeString() + self.strmData.pivotCacheFields[-1].values.append(self.text) + def parseBytes (self): - textLen = self.readUnsignedInt(2) - text, textLen = globals.getRichText(self.readRemainingBytes(), textLen) - self.appendLine("value: %s"%text) + self.__parseBytes() + self.appendLineString("value", self.text) # ------------------------------------------------------------------- # CT - Change Tracking diff --git a/src/xlsstream.py b/src/xlsstream.py index 1292994..44695bf 100644 --- a/src/xlsstream.py +++ b/src/xlsstream.py @@ -137,7 +137,7 @@ recData = { 0x00C5: ["SXDI", "Data Item", xlsrecord.SXDataItem], 0x00C6: ["SXDB", "PivotTable Cache Data", xlsrecord.SXDb], 0x00C7: ["SXFDB", "Pivot Field", xlsrecord.SXFDB], - 0x00C8: ["SXINDEXLIST", "Indices to Source Data"], + 0x00C8: ["SXDBB", "Indices to Source Data", xlsrecord.SXDBB], 0x00C9: ["SXDOUBLE", "Double Value", xlsrecord.SXDouble], 0x00CA: ["SXBOOLEAN", "Boolean Value", xlsrecord.SXBoolean], 0x00CB: ["SXERROR", "Error Code", xlsrecord.SXError], @@ -319,11 +319,13 @@ recDataRev = { 0x0151: ["EONB*", "Change Track End of Nested Block"] } + class StreamData(object): """run-time stream data.""" def __init__ (self): self.encrypted = False self.pivotCacheIDs = {} + self.pivotCacheFields = [] def appendPivotCacheId (self, newId): # must be 4-digit with leading '0's. _______________________________________________ Libreoffice-commits mailing list Libreoffice-commits@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits