Last active
September 7, 2018 18:53
-
-
Save YannBouyeron/65a414e2ccacbc321c16b1305bca800c to your computer and use it in GitHub Desktop.
Excel reader / Excel writer
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from xlwt import Workbook | |
import xlrd | |
def col2lin(col): | |
"""col est une liste de tuple de colonne. """ | |
return [tuple([c[i] for c in col]) for i in range(len(col[0]))] | |
def lin2col(lin): | |
"""lin est une liste de tuple de lignes. """ | |
return [tuple([l[i] for l in lin]) for i in range(len(lin[0]))] | |
def xl_writer(file_name, feuille_name, lin, entete): | |
""" | |
arguments: | |
file_name: (str) nom du fichier.xls qui serra créé. | |
feuille_name: (str) nom de la feuille qui serra créée. | |
lin: (list) liste de tuple des lignes de la feuille. | |
entete: (int > 0) nombre de lignes d'entete. | |
exemple: | |
col = [('nom','karim','jalal','aicha'),('ds1',10,3,9),('ds2',9,14,11)] | |
lin = col2lin(col) | |
xl_writer('tsfa.xls','trimestre3',lin,1) | |
""" | |
# création objet | |
bk = Workbook() | |
# création de la feuille 1 | |
f = bk.add_sheet(feuille_name) | |
for i, j in enumerate(lin): | |
if i < entete: | |
for k, m in enumerate(j): | |
f.write(i,k,m) | |
else: | |
ligne = f.row(i) | |
for k, m in enumerate(j): | |
ligne.write(k,m) | |
# création matérielle du fichier résultant | |
bk.save(file_name) | |
def xl_reader(filxls, incol = False): | |
"""lecteur de fichier xls | |
si incol = False, ca retourne une liste contenant une liste par feuille, contenant une tuple par ligne | |
si incol = True, ca retourne une liste contenant une liste par feuille, contenant une tuple par colonne""" | |
# ouverture du fichier Excel | |
wb = xlrd.open_workbook(filxls) | |
# feuilles dans le classeur | |
liste_feuilles = wb.sheet_names() | |
r = [] | |
for f in liste_feuilles: | |
sh = wb.sheet_by_name(f) | |
rf =[] | |
if incol == False: | |
for rownum in range(sh.nrows): | |
rf.append(tuple(sh.row_values(rownum))) | |
r.append(rf) | |
else: | |
for colnum in range(sh.ncols): | |
rf.append(tuple(sh.col_values(colnum))) | |
r.append(rf) | |
return r | |
class Classeur: | |
def __init__(self, xls): | |
self.xls = xls | |
self.wb = xlrd.open_workbook(xls) | |
def getListe(self): | |
"""retourne une liste des noms des feuilles (tables) du classeur""" | |
# feuilles dans le classeur | |
liste_feuilles = self.wb.sheet_names() | |
return liste_feuilles | |
def getTable(self, table, incol=False): | |
""" | |
arguments: | |
table: index (int) ou nom (str) de la table | |
incol: (bool) si False -> liste de lignes, si True -> liste de colonnes | |
return liste de liste de colonnes ou de lignes de la table séléctionnée. | |
""" | |
if type(table) == type(str()): | |
try: | |
sh = self.wb.sheet_by_name(table) | |
except xlrd.biffh.XLRDError: | |
return None | |
elif type(table) == type(int()): | |
try: | |
sh = self.wb.sheet_by_index(table) | |
except IndexError: | |
return None | |
rf =[] | |
if incol == False: | |
for rownum in range(sh.nrows): | |
rf.append(tuple(sh.row_values(rownum))) | |
else: | |
for colnum in range(sh.ncols): | |
rf.append(tuple(sh.col_values(colnum))) | |
return rf | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment