Python-écrire dans une feuille de calcul Excel
Je suis nouveau en Python. J'ai besoin d'écrire des données de mon programme dans une feuille de calcul. J'ai cherché en ligne et il semble y avoir beaucoup de paquets disponibles (xlwt, XlsXcessive, openpyxl). D'autres suggèrent d'écrire dans un fichier csv (jamais utilisé csv et ne comprend pas vraiment ce que c'est).
Le programme est très simple. J'ai deux listes (float) et trois variables (chaînes). Je ne connais pas les longueurs des deux listes et elles ne seront probablement pas de la même longueur.
Je veux que la mise en page soit comme dans l'image ci-dessous:
La colonne rose aura les valeurs de la première liste et la colonne verte aura les valeurs de la deuxième liste.
Alors, quelle est la meilleure façon de le faire? Grâce.
P.S. Je cours Windows 7 mais je N'aurai pas nécessairement Office installé sur les ordinateurs exécutant ce programme.
Modifier
import xlwt
x=1
y=2
z=3
list1=[2.34,4.346,4.234]
book = xlwt.Workbook(encoding="utf-8")
sheet1 = book.add_sheet("Sheet 1")
sheet1.write(0, 0, "Display")
sheet1.write(1, 0, "Dominance")
sheet1.write(2, 0, "Test")
sheet1.write(0, 1, x)
sheet1.write(1, 1, y)
sheet1.write(2, 1, z)
sheet1.write(4, 0, "Stimulus Time")
sheet1.write(4, 1, "Reaction Time")
i=4
for n in list1:
i = i+1
sheet1.write(i, 0, n)
book.save("trial.xls")
J'ai écrit ceci en utilisant toutes vos suggestions. Il fait le travail, mais il peut être légèrement améliorée. Comment puis-je formater les cellules créées dans la boucle for (valeurs list1) en tant que scientifique ou nombre? Je ne veux pas tronquer les valeurs. Les valeurs réelles utilisées dans le programme auraient environ 10 chiffres après la décimale.
9 réponses
import xlwt
def output(filename, sheet, list1, list2, x, y, z):
book = xlwt.Workbook()
sh = book.add_sheet(sheet)
variables = [x, y, z]
x_desc = 'Display'
y_desc = 'Dominance'
z_desc = 'Test'
desc = [x_desc, y_desc, z_desc]
col1_name = 'Stimulus Time'
col2_name = 'Reaction Time'
#You may need to group the variables together
#for n, (v_desc, v) in enumerate(zip(desc, variables)):
for n, v_desc, v in enumerate(zip(desc, variables)):
sh.write(n, 0, v_desc)
sh.write(n, 1, v)
n+=1
sh.write(n, 0, col1_name)
sh.write(n, 1, col2_name)
for m, e1 in enumerate(list1, n+1):
sh.write(m, 0, e1)
for m, e2 in enumerate(list2, n+1):
sh.write(m, 1, e2)
book.save(filename)
Pour plus d'explications: https://github.com/python-excel
Utiliser DataFrame.to_excel à partir de pandas. Pandas vous permet de représenter vos données dans des structures de données fonctionnellement riches et vous permettra également de lire dans des fichiers excel.
, Vous devez d'abord convertir vos données en un DataFrame, puis l'enregistrer dans un fichier excel comme suit:
In [1]: from pandas import DataFrame
In [2]: l1 = [1,2,3,4]
In [3]: l2 = [1,2,3,4]
In [3]: df = DataFrame({'Stimulus Time': l1, 'Reaction Time': l2})
In [4]: df
Out[4]:
Reaction Time Stimulus Time
0 1 1
1 2 2
2 3 3
3 4 4
In [5]: df.to_excel('test.xlsx', sheet_name='sheet1', index=False)
Et le fichier excel qui sort ressemble à ceci:
Notez que les deux listes doivent être de longueur égale sinon les pandas se plaindront. Pour résoudre ce, remplacez toutes les valeurs manquantes par None
.
-
Xlrd / xlwt (standard): Python n'a pas cette fonctionnalité dans sa bibliothèque standard, mais je pense à xlrd / xlwt {[8] } comme moyen "standard" de lire et d'écrire des fichiers excel. Il est assez facile de créer un classeur, d'ajouter des feuilles, d'écrire des données/formules et de formater des cellules. Si vous avez besoin de toutes ces choses, vous pouvez avoir le plus de succès avec cette bibliothèque. Je pense que vous pourriez choisir openpyxl à la place et ce serait assez similaire, mais je ne l'ai pas utilisé.
Pour formater les cellules avec xlwt, définissent un
XFStyle
et incluent le style lorsque vous écrivez dans une feuille. Voici un exemple avec de nombreux formats de nombre. Voir l'exemple de code ci-dessous. Tablib (puissant, intuitif): Tablib est une bibliothèque plus puissante mais intuitive pour travailler avec des données tabulaires. Il peut écrire des classeurs excel avec plusieurs feuilles ainsi que d'autres formats, tels que csv, JSON et yaml. Si vous n'avez pas besoin de cellules formatées (comme la couleur d'arrière-plan), vous le ferez vous-même une faveur pour utiliser cette bibliothèque, qui vous mènera plus loin à long terme.
-
Csv (facile): les Fichiers sur votre ordinateur sont soit text ou binaire. Les fichiers texte ne sont que des caractères, y compris des caractères spéciaux comme les nouvelles lignes et les onglets, et peuvent être facilement ouverts n'importe où (par exemple, bloc-notes, votre navigateur web ou des produits Office). Un fichier csv est un fichier texte qui est formaté d'une certaine manière: chaque ligne est une liste de valeurs, séparées par des virgules. Les programmes Python peuvent facilement lire et écrire du texte, donc un fichier csv est le moyen le plus simple et le plus rapide d'exporter des données de votre programme python dans excel (ou un autre programme python).
Les fichiers Excel sont binaires et nécessitent des bibliothèques spéciales qui connaissent le format de fichier, c'est pourquoi vous avez besoin d'une bibliothèque supplémentaire pour python, ou d'un programme spécial comme Microsoft Excel, Gnumeric ou LibreOffice, pour les lire/les écrire.
import xlwt
style = xlwt.XFStyle()
style.num_format_str = '0.00E+00'
...
for i,n in enumerate(list1):
sheet1.write(i, 0, n, fmt)
import xlsxwriter
# Create an new Excel file and add a worksheet.
workbook = xlsxwriter.Workbook('demo.xlsx')
worksheet = workbook.add_worksheet()
# Widen the first column to make the text clearer.
worksheet.set_column('A:A', 20)
# Add a bold format to use to highlight cells.
bold = workbook.add_format({'bold': True})
# Write some simple text.
worksheet.write('A1', 'Hello')
# Text with formatting.
worksheet.write('A2', 'World', bold)
# Write some numbers, with row/column notation.
worksheet.write(2, 0, 123)
worksheet.write(3, 0, 123.456)
# Insert an image.
worksheet.insert_image('B5', 'logo.png')
workbook.close()
CSV représente des valeurs séparées par des virgules. CSV est comme un fichier texte et peut être créé simplement en ajoutant le .Extension CSV
Par exemple, écrivez ce code:
f = open('example.csv','w')
f.write("display,variable x")
f.close()
, Vous pouvez ouvrir ce fichier avec excel.
Essayez aussi de regarder les bibliothèques suivantes:
Xlwings - pour obtenir des données dans et Hors d'une feuille de calcul à partir de Python, ainsi que pour manipuler des classeurs et des graphiques
ExcelPython - un complément Excel pour écrire des fonctions définies par l'utilisateur (UDF) et des macros en Python au lieu de VBA
J'ai interrogé quelques modules Excel pour Python, et trouvé openpyxl comme le meilleur.
Le Livre Gratuit automatiser les choses ennuyeuses avec Python a un chapitre sur openpyxl avec plus de détails ou vous pouvez vérifier le Lire Les Docs site. Vous n'aurez pas besoin D'Office ou D'Excel installés pour utiliser openpyxl.
Votre programme ressemblerait à ceci:
import openpyxl
wb = openpyxl.load_workbook('example.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')
stimulusTimes = [1, 2, 3]
reactionTimes = [2.3, 5.1, 7.0]
for i in range(len(stimulusTimes)):
sheet['A' + str(i + 6)].value = stimulusTimes[i]
sheet['B' + str(i + 6)].value = reactionTimes[i]
wb.save('example.xlsx')
OpenPyxl
est une bibliothèque assez agréable, construite pour lire / écrire des fichiers Excel 2010 XLSX / XLSM:
Https://openpyxl.readthedocs.io/en/stable
L'autre réponse , qui s'y réfère, utilise la fonction déperciée (get_sheet_by_name
). Voici comment le faire sans elle:
import openpyxl
wbkName = 'New.xlsx'
wbk = openpyxl.load_workbook(wbkName)
wks = wbk['test1']
someValue = 1337
wks.cell(row=10, column=1).value = someValue
wbk.save(wbkName)
wbk.close
Le moyen le plus simple d'importer les nombres exacts est d'ajouter une décimale après les nombres dans votre l1
et l2
. Python interprète ce point décimal instructions pour inclure le nombre exact. Si vous devez le limiter à une décimale, vous devriez être capable de créer une commande d'impression qui limite la sortie, quelque chose de simple comme:
print variable_example[:13]
Le limiterait à la dixième décimale, en supposant que vos données ont deux entiers à gauche de la décimale.