mirror of
https://github.com/Sneed-Group/Poodletooth-iLand
synced 2024-12-25 20:52:26 -06:00
68 lines
1.9 KiB
Python
68 lines
1.9 KiB
Python
|
"""Undocumented Module"""
|
||
|
|
||
|
__all__ = ['ExcelHandler']
|
||
|
|
||
|
"""
|
||
|
A simple XML parser for Excel XML data. Built on top of xml.sax
|
||
|
|
||
|
Example use:
|
||
|
e=ExcelHandler()
|
||
|
parse('myData.xml', e)
|
||
|
print e.tables
|
||
|
|
||
|
"""
|
||
|
|
||
|
from xml.sax import saxutils
|
||
|
from xml.sax import parse
|
||
|
|
||
|
class ExcelHandler(saxutils.DefaultHandler):
|
||
|
def __init__(self):
|
||
|
self.chars=[]
|
||
|
self.isNumber = 0
|
||
|
self.cells=[]
|
||
|
self.rows=[]
|
||
|
self.tables=[]
|
||
|
|
||
|
def characters(self, content):
|
||
|
self.chars.append(content)
|
||
|
|
||
|
def startElement(self, name, attrs):
|
||
|
if name=="Data":
|
||
|
if attrs.get('ss:Type') == "Number":
|
||
|
self.isNumber = 1
|
||
|
else:
|
||
|
self.isNumber = 0
|
||
|
elif name=="Cell":
|
||
|
self.chars=[]
|
||
|
elif name=="Row":
|
||
|
self.cells=[]
|
||
|
elif name=="Table":
|
||
|
self.rows=[]
|
||
|
|
||
|
def endElement(self, name):
|
||
|
if name=="Data":
|
||
|
pass
|
||
|
elif name=="Cell":
|
||
|
s = ''.join(self.chars)
|
||
|
if s:
|
||
|
if self.isNumber:
|
||
|
# Determine if it is an int or float and use
|
||
|
# return the best fit
|
||
|
floatVersion = float(s)
|
||
|
intVersion = int(floatVersion)
|
||
|
if floatVersion == intVersion:
|
||
|
# If the float is equal to the int, it must be an int
|
||
|
s = intVersion
|
||
|
else:
|
||
|
# Keep the precision and return a float
|
||
|
s = floatVersion
|
||
|
# Convert the string "None" to the python object None
|
||
|
elif s == "None":
|
||
|
s = None
|
||
|
self.cells.append(s)
|
||
|
elif name=="Row":
|
||
|
self.rows.append(self.cells)
|
||
|
elif name=="Table":
|
||
|
self.tables.append(self.rows)
|
||
|
|