wake-up-neo.com

In eine Excel-Tabelle schreiben

Ich bin neu in Python. Ich muss einige Daten aus meinem Programm in eine Tabelle schreiben. Ich habe online gesucht und es scheinen viele Pakete verfügbar zu sein (xlwt, XlsXcessive, openpyxl). Andere schlagen vor, in eine CSV-Datei zu schreiben (hat nie CSV verwendet und versteht nicht wirklich, was es ist).

Das Programm ist sehr einfach. Ich habe zwei Listen (Float) und drei Variablen (Strings). Ich kenne die Längen der beiden Listen nicht und sie werden wahrscheinlich nicht gleich lang sein.

Ich möchte, dass das Layout wie in der Abbildung unten dargestellt ist:

Layout sample

Die rosa Spalte enthält die Werte der ersten Liste und die grüne Spalte die Werte der zweiten Liste.

Also, was ist der beste Weg, dies zu tun?

P.S. Ich verwende Windows 7, aber ich habe nicht notwendigerweise Office auf den Computern installiert, auf denen dieses Programm ausgeführt wird.

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")

Ich habe dies mit all Ihren Vorschlägen geschrieben. Es erledigt die Arbeit, kann aber etwas verbessert werden.

Wie formatiere ich die Zellen, die in der for-Schleife (list1-Werte) erstellt wurden, als wissenschaftlich oder als Zahl?

Ich möchte die Werte nicht abschneiden. Die tatsächlichen Werte des Programms hätten nach der Dezimalstelle etwa 10 Stellen.

116
Jey
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)

zur Erklärung: https://github.com/python-Excel

80
thkang

Verwenden Sie DataFrame.to_Excel von Pandas . Pandas ermöglicht es Ihnen, Ihre Daten in funktionsreichen Datenstrukturen darzustellen und ermöglicht es Ihnen, auch Excel-Dateien einzulesen .

Sie müssen Ihre Daten zunächst in einen DataFrame konvertieren und anschließend in einer Excel-Datei wie folgt speichern:

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)

und die Excel-Datei, die herauskommt, sieht folgendermaßen aus:

enter image description here

Beachten Sie, dass beide Listen gleich lang sein müssen, ansonsten beschwert sich pandas. Um dies zu beheben, ersetzen Sie alle fehlenden Werte durch None.

121
diliop
  • xlrd/xlwt (Standard): Python hat diese Funktionalität nicht in seiner Standardbibliothek, aber ich denke an xlrd/xlwt als die "Standardmethode" zum Lesen und Schreiben von Excel-Dateien. Es ist ziemlich einfach, eine Arbeitsmappe zu erstellen, Arbeitsblätter hinzuzufügen, Daten/Formeln zu schreiben und Zellen zu formatieren. Wenn Sie all diese Dinge benötigen, haben Sie mit dieser Bibliothek möglicherweise den größten Erfolg. Ich denke, man könnte sich stattdessen für openpyxl entscheiden, und es wäre ziemlich ähnlich, aber ich habe es nicht verwendet.

    Um Zellen mit xlwt zu formatieren, definieren Sie eine XFStyle und geben Sie den Stil an, wenn Sie in ein Blatt schreiben. Hier ist ein Beispiel mit vielen Zahlenformaten . Siehe Beispielcode unten.

  • Tablib (leistungsstark, intuitiv): Tablib ist eine leistungsfähigere und dennoch intuitivere Bibliothek zum Arbeiten mit Tabellendaten. Es kann Excel-Arbeitsmappen mit mehreren Blättern sowie mit anderen Formaten wie csv, json und yaml schreiben. Wenn Sie keine formatierten Zellen (wie Hintergrundfarbe) benötigen, tun Sie sich einen Gefallen, wenn Sie diese Bibliothek verwenden, die Sie auf lange Sicht weiterbringen wird.

  • csv (einfach): Dateien auf Ihrem Computer sind entweder Text oder Binär. Textdateien sind nur Zeichen, einschließlich Sonderzeichen wie Zeilenumbrüche und Registerkarten. Sie können einfach und überall geöffnet werden (z. B. Notepad, Ihr Webbrowser oder Office-Produkte). Eine CSV-Datei ist eine Textdatei, die auf eine bestimmte Weise formatiert ist: Jede Zeile ist eine Liste von Werten, die durch Kommas getrennt sind. Python-Programme können Text problemlos lesen und schreiben. Daher ist eine CSV-Datei der einfachste und schnellste Weg, um Daten aus Ihrem Python-Programm in Excel (oder ein anderes Python-Programm) zu exportieren.

    Excel-Dateien sind binär und erfordern spezielle Bibliotheken, die das Dateiformat kennen. Deshalb benötigen Sie eine zusätzliche Bibliothek für Python oder ein spezielles Programm wie Microsoft Excel, Gnumeric oder LibreOffice, um sie zu lesen/schreiben.


import xlwt

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

...

for i,n in enumerate(list1):
    sheet1.write(i, 0, n, fmt)
32
jmilloy

CSV steht für durch Kommas getrennte Werte. CSV ist wie eine Textdatei und kann einfach durch Hinzufügen der Erweiterung .CSV erstellt werden.

zum Beispiel schreiben Sie diesen Code:

f = open('example.csv','w')
f.write("display,variable x")
f.close()

sie können diese Datei mit Excel öffnen.

10
2 8
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()
9
Naveen Agarwal

Schauen Sie sich auch die folgenden Bibliotheken an:

xlwings - zum Abrufen von Daten in eine Tabellenkalkulation aus Python sowie zum Bearbeiten von Arbeitsmappen und Diagrammen

ExcelPython - Ein Excel-Add-In zum Schreiben von benutzerdefinierten Funktionen (UDFs) und Makros in Python anstelle von VBA

6
ehremo

Ich habe ein paar Excel-Module für Python untersucht und festgestellt, dass openpyxl das Beste ist.

Das kostenlose Buch Automate the Boring Stuff mit Python enthält ein Kapitel über openpyxl mit mehr Details. Sie können auch die Seite Read the Docs besuchen. Sie benötigen kein Office oder Excel, um openpyxl verwenden zu können.

Ihr Programm würde ungefähr so ​​aussehen:

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')
6
Al Sweigart

OpenPyxl ist eine ziemlich schöne Bibliothek, die zum Lesen/Schreiben von Excel 2010 xlsx/xlsm-Dateien gedacht ist:

https://openpyxl.readthedocs.io/de/stable

Die andere Antwort , die sich darauf bezieht, verwendet die deperciated Funktion (get_sheet_by_name). So machen Sie es ohne:

import openpyxl

wbkName = 'New.xlsx'        #The file should be created before running the code.
wbk = openpyxl.load_workbook(wbkName)
wks = wbk['test1']
someValue = 1337
wks.cell(row=10, column=1).value = someValue
wbk.save(wbkName)
wbk.close
1
Vityata

Der einfachste Weg, die genauen Zahlen zu importieren, ist das Hinzufügen einer Dezimalstelle nach den Zahlen in Ihrem l1 und l2. Python interpretiert diesen Dezimalpunkt als Anweisung von Ihnen, die genaue Zahl anzugeben. Wenn Sie es auf eine Dezimalstelle beschränken müssen, sollten Sie in der Lage sein, einen Druckbefehl zu erstellen, der die Ausgabe einschränkt.

print variable_example[:13]

Der Befehl würde sich auf die zehnte Dezimalstelle beschränken, vorausgesetzt, Ihre Daten enthalten zwei Ganzzahlen, die von der Dezimalstelle übrig sind. 

0
Kyle Cyree

Sie können versuchen hfexcel Human Friendly objektorientierte python Bibliothek basierend auf XlsxWriter :

from hfexcel import HFExcel

hf_workbook = HFExcel.hf_workbook('example.xlsx', set_default_styles=False)

hf_workbook.add_style(
    "headline", 
    {
       "bold": 1,
        "font_size": 14,
        "font": "Arial",
        "align": "center"
    }
)

sheet1 = hf_workbook.add_sheet("sheet1", name="Example Sheet 1")

column1, _ = sheet1.add_column('headline', name='Column 1', width=2)
column1.add_row(data='Column 1 Row 1')
column1.add_row(data='Column 1 Row 2')

column2, _ = sheet1.add_column(name='Column 2')
column2.add_row(data='Column 2 Row 1')
column2.add_row(data='Column 2 Row 2')


column3, _ = sheet1.add_column(name='Column 3')
column3.add_row(data='Column 3 Row 1')
column3.add_row(data='Column 3 Row 2')

# In order to get a row with coordinates:
# sheet[column_index][row_index] => row
print(sheet1[1][1].data)
assert(sheet1[1][1].data == 'Column 2 Row 2')

hf_workbook.save()
0