import zipfile, cStringIO def merge_ooo_doc(doc, fields, data): docf = cStringIO.StringIO(doc) zf = zipfile.ZipFile(docf) txt = zf.read('content.xml') for (field, k) in fields: parts = txt.split(field) newparts = [parts.pop(0)] i = 0 while parts and i < len(data): newparts.append(str(data[i][k])) newparts.append(parts.pop(0)) i = i + 1 newparts.extend(parts) txt = ''.join(newparts) out = cStringIO.StringIO() zf2 = zipfile.ZipFile(out, 'w') for zi in zf.infolist(): if zi.filename == 'content.xml': zf2.writestr(zi, txt) else: zf2.writestr(zi, zf.read(zi.filename)) zf2.close() zf.close() return out.getvalue()