## page was renamed from Treffen/rumspielenmitexcel = Bearbeiten von MS Excel Dateien = W. Nagy Dieser Kurzvortrag zeigt die Verwendung der Module: [[URL|http://www.python-excel.org/]] ||'''''Modul'''''||'''''download'''''|| ||xlrd||[[https://pypi.python.org/pypi/xlrd/0.9.0|Lesen von XLS Dateien]]|| ||xlwt||[[https://pypi.python.org/pypi/xlwt|Erzeugen einer Arbeitsmappe]]|| zum Platformneutralen Gewinnen oder Erzeugen von MS Excel Dateien ohne Excel oder COM zu verweden. == Beispiel Modul == Enthält zwei Klassen (xlsReader, xlsWriter). Ist ein kleiner Wrapper, der als Beispielcode für diesen Artikel dient und das Leben ein klein wenig erleichtern kann. [[attachment:xls.py|Download]] == xlrd == Library for developers to extract data from Microsoft Excel (tm) spreadsheet files Extract data from Excel spreadsheets (.xls and .xlsx, versions 2.0 onwards) on any platform. Pure Python (2.6, 2.7, 3.2+). Strong support for Excel dates. Unicode-aware. == xlwt == Library to create spreadsheet files compatible with MS Excel 97/2000/XP/2003 XLS files, on any platform, with Python 2.3 to 2.7 xlwt is a library for generating spreadsheet files that are compatible with Excel 97/2000/XP/2003, OpenOffice.org Calc, and Gnumeric. xlwt has full support for Unicode. Excel spreadsheets can be generated on any platform without needing Excel or a COM server. The only requirement is Python 2.3 to 2.7. == Beispiele xlrd == === Öffenen einer Arbeitsmappe === {{{ #!python import datetime import xlrd from xlwt import * ... try: self.workbook = xlrd.open_workbook('myexcel.xls','utf8') except IOError as e: raise Exception("I/O error({0}): {1}".format(e.errno, e.strerror)) }}} === Aktuelles Arbeitsblatt === In {{{sheetid}}} ist entweder ein Integer oder eine Zeichenkette mit dem Namen des Arbeitsblattes {{{ #!python if isinstance(sheetid,str): self.sheet = self.workbook.sheet_by_name(sheetid) elif isinstance(sheetid,int): self.sheet = self.workbook.sheet_by_index(sheetid) else: raise ValueError("Der Parameter sheetid muss Integer oder String sein.") }}} === Inhalt einer Zelle gewinnen === {{{ #!python value = self.sheet.cell_value(row,col) }}} Dieser Code wirft eine Ausnahme, wenn die Zelle nicht erreichbar ist. ==== Methode zum gewinnen eines typengerechten Zelleninhalts ==== Diese Methode liefert den Zellenihalt und versucht dabei einen möglichst passenden Python Typ zu erzeugen. Ist die Zelle nicht definiert (Außerhalbe der used-region) wird None zurückgeliefert. Ist die Zelle Fehlerhaft (Excel Fehler) wird diese als String zugrückgegeben. Datumszellen werde als datetime Objekt geliefert. {{{ #!python def getValue (self,row=0,col=0): retval = None try: celltype = self.sheet.cell_type(row,col) if celltype == xlrd.XL_CELL_EMPTY: retval = self.emptyval elif celltype == xlrd.XL_CELL_BLANK: retval = self.sheet.cell_value(row,col) elif celltype == xlrd.XL_CELL_NUMBER: retval = self.sheet.cell_value(row,col) elif celltype == xlrd.XL_CELL_DATE: ms_date_number = self.sheet.cell_value(row,col) year, month, day, hour, minute, second = xlrd.xldate_as_tuple(ms_date_number, self.workbook.datemode) py_date = datetime.datetime(year, month, day, hour, minute) retval = py_date elif celltype == xlrd.XL_CELL_TEXT: retval = self.sheet.cell_value(row,col).encode(self.encoding) elif celltype == xlrd.XL_CELL_ERROR: retval = xlrd.error_text_from_code.get(self.sheet.cell_value(row,col)) elif celltype == xlrd.XL_CELL_BOOLEAN: retval = True if self.sheet.cell_value(row,col) else False except: retval = self.nvl return retval }}} === Durchlaufen aller vorhandener Zeilen === {{{nrows}}} Liefert die Anzahl der Zeilen der ''UsesRegion''. {{{ #!python for row in range(sheet.nrows): print sheet.cell_value(row,0) }}} === Durchlaufen aller vorhandener Spalten === Achtung: es werd nicht die Anzahl der Spalten in der Aktellen Zelle sondern die Anzahl der Spalten der ''UsesRegion'' angezeigt. {{{ #!python for col in range(sheet.ncols): print sheet.cell_value(1,col) }}} === Zusammenspiel der Methoden === {{{ #!python def datarow(self,row): retval = [] for col in range(0,self.sheet.ncols): retval.append(self.getValue(row,col)) return retval def allRows(self,firstline=None, lastline=None): firstline = 0 if firstline is None else firstline lastline = self.sheet.nrows if lastline is None else lastline for row in range(firstline,lastline): yield xls.datarow(row) ... for row in xls.allRows(): print row[0],row[1] }}} === Gewinnen aller Spalten in einer Liste einer bestimmten Zeile === {{{ #!python therow = self.sheet.row(row) }}} = Beispiele xlwt = == Öffnen einer Arbeitsmappe == {{{ #!python self.workbook = Workbook(encoding='windows-1252') }}} == Anlegen eines Arbeitsblattes == {{{ #!python self.sheet = self.workbook.add_sheet(sheetname) }}} == Beschreiben einer Zelle == {{{ #!python curSheet.write(row,col,value) }}} Das Modul versucht so gut es geht den "Pyhton Datentyp" in die Excel Enstrpechnung umzuwandeln. z.B True wird zu WAHR == Schließen und speichern der Arbeitsmappe == {{{ #!python self.workbook.save(self.xlsfile) }}} File kann ein Dateiname oder ein Stream sein.