Bearbeiten von MS Excel Dateien
W. Nagy
Dieser Kurzvortrag zeigt die Verwendung der Module: http://www.python-excel.org/
Modul |
download |
xlrd |
|
xlwt |
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.
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
Aktuelles Arbeitsblatt
In sheetid ist entweder ein Integer oder eine Zeichenkette mit dem Namen des Arbeitsblattes
Inhalt einer Zelle gewinnen
1 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.
1 def getValue (self,row=0,col=0):
2
3 retval = None
4 try:
5 celltype = self.sheet.cell_type(row,col)
6 if celltype == xlrd.XL_CELL_EMPTY:
7 retval = self.emptyval
8
9 elif celltype == xlrd.XL_CELL_BLANK:
10 retval = self.sheet.cell_value(row,col)
11
12 elif celltype == xlrd.XL_CELL_NUMBER:
13 retval = self.sheet.cell_value(row,col)
14
15 elif celltype == xlrd.XL_CELL_DATE:
16 ms_date_number = self.sheet.cell_value(row,col)
17 year, month, day, hour, minute, second =
18 xlrd.xldate_as_tuple(ms_date_number, self.workbook.datemode)
19 py_date = datetime.datetime(year, month, day, hour, minute)
20 retval = py_date
21
22 elif celltype == xlrd.XL_CELL_TEXT:
23 retval = self.sheet.cell_value(row,col).encode(self.encoding)
24
25 elif celltype == xlrd.XL_CELL_ERROR:
26 retval = xlrd.error_text_from_code.get(self.sheet.cell_value(row,col))
27
28 elif celltype == xlrd.XL_CELL_BOOLEAN:
29 retval = True if self.sheet.cell_value(row,col) else False
30
31 except:
32 retval = self.nvl
33
34 return retval
Durchlaufen aller vorhandener Zeilen
nrows Liefert die Anzahl der Zeilen der UsesRegion.
Durchlaufen aller vorhandener Spalten
Achtung:
es werd nicht die Anzahl der Spalten in der Aktellen Zelle sondern die Anzahl der Spalten der UsesRegion angezeigt.
Zusammenspiel der Methoden
1 def datarow(self,row):
2 retval = []
3 for col in range(0,self.sheet.ncols):
4 retval.append(self.getValue(row,col))
5 return retval
6
7 def allRows(self,firstline=None, lastline=None):
8 firstline = 0 if firstline is None else firstline
9 lastline = self.sheet.nrows if lastline is None else lastline
10
11 for row in range(firstline,lastline):
12 yield xls.datarow(row)
13
14 ...
15
16 for row in xls.allRows():
17 print row[0],row[1]
Gewinnen aller Spalten in einer Liste einer bestimmten Zeile
1 therow = self.sheet.row(row)
Beispiele xlwt
Öffnen einer Arbeitsmappe
1 self.workbook = Workbook(encoding='windows-1252')
Anlegen eines Arbeitsblattes
1 self.sheet = self.workbook.add_sheet(sheetname)
Beschreiben einer Zelle
1 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
1 self.workbook.save(self.xlsfile)
File kann ein Dateiname oder ein Stream sein.