def read(self, stream, filetype, **kw): f = zipfile.ZipFile(stream, 'r') ss = xp.quickRead(f.open('content.xml')) f.close() doc = gicdat.doc.Doc() for i, t in enumerate(xp.quickSearch(ss, 'table:table', 10, True)): dat = table2array(t) n = {} for key in t: if not key.startswith("_"): n[key] = t[key] n[''] = 'opendocument.spreadsheet.table' n['table'] = dat doc.set('sheet%i' % (i + 1,), n) return (gicdat.doc.Doc(doc), None)
def table2array(d): rows = xp.quickSearch(d, 'table:table-row', 3, True) tab = [] mel = 0 mnc = 0 mnr = 0 ri = 0 for r in rows: rl, melr = row2list(r) mel = max(mel, melr) mnc = max(mnc, len(rl)) nreps = int(r.get('table:number-rows-repeated', 1)) for i in range(nreps): tab.append(rl) if rl: mnr = len(tab) if not all([mel, mnc, mnr]): return numpy.zeros((0, 0), str("|S1")) dts = "|S%i" % mel ta = numpy.zeros((mnr, mnc), str(dts)) for i in range(mnr): for j, s in enumerate(tab[i]): ta[i, j] = s return ta