Skip to content

Instantly share code, notes, and snippets.

@YannBouyeron
Last active September 7, 2018 18:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save YannBouyeron/65a414e2ccacbc321c16b1305bca800c to your computer and use it in GitHub Desktop.
Save YannBouyeron/65a414e2ccacbc321c16b1305bca800c to your computer and use it in GitHub Desktop.
Excel reader / Excel writer
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