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:

entrez la description de l'image ici

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.

105
demandé sur Jey 2012-11-18 09:20:53

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

73
répondu thkang 2014-06-24 21:42:24

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:

entrez la description de l'image ici

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.

90
répondu diliop 2012-11-18 06:05:21

import xlwt

style = xlwt.XFStyle()
style.num_format_str = '0.00E+00'

...

for i,n in enumerate(list1):
    sheet1.write(i, 0, n, fmt)
31
répondu jmilloy 2012-11-18 06:52:09
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()
8
répondu Naveen Agarwal 2016-09-09 17:33:32

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.

8
répondu 2 8 2017-04-03 04:46:42

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

6
répondu ehremo 2014-08-28 12:31:59

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')
5
répondu Al Sweigart 2015-06-01 01:48:15

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
0
répondu Vityata 2018-07-27 08:32:25

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.

0
répondu Kyle Cyree 2018-09-26 07:54:30