2017-06-27 3 views
0

Gibt es eine Möglichkeit, die Spalten aus einem Excel-Blatt zu nehmen, die Spalten als Listen zu schreiben, sie zu sortieren und sie dann in ein anderes Excel-Blatt umzuschreiben? Dies habe ich bisher versucht, aber es schreibt nur die letzte Datenspalte. Ich brauche die ersten 2 Datenzeilen nicht, da es sich nur um Header handelt.Sortieren von Spaltendaten aus Excel mit Python

import xlrd 
import xlsxwriter 

wb = xlrd.open_workbook('exceldata.xlsx') 
ws = wb.sheet_by_index(0) 

col=[] 

for i in range(2,ws.ncols): 
    col=ws.col_values(i) 

    for x in range(2): 
     col.pop(0) 

    col.sort() 

    workbook = xlsxwriter.Workbook('test_sorting.xlsx') 
    worksheet = workbook.add_worksheet() 
    worksheet.write_column('A1',col) 
    workbook.close() 

UPDATE: Dies ist erfolgreich, aber weiß jemand, wie dies vereinfacht werden kann?

import xlrd 
import xlsxwriter 

wb = xlrd.open_workbook('exceldata.xlsx') 
ws = wb.sheet_by_index(0) 


col1=ws.col_values(2) 
for x in range(2): 
    col1.pop(0) 
col1.sort() 

col2=ws.col_values(3) 
for x in range(2): 
    col2.pop(0) 
col2.sort() 

col3=ws.col_values(4) 
for x in range(2): 
    col3.pop(0) 
col3.sort() 

col4=ws.col_values(5) 
for x in range(2): 
    col4.pop(0) 
col4.sort() 

col5=ws.col_values(6) 
for x in range(2): 
    col5.pop(0) 
col5.sort() 

columns=[] 
for i in range(2,7): 
    col=ws.col_values(i) 
    columns.append(col) 

print(columns) 

workbook = xlsxwriter.Workbook('test_sorting.xlsx') 
worksheet = workbook.add_worksheet() 
worksheet.write_column('A2',col1) 
worksheet.write_column('B2',col2) 
worksheet.write_column('C2',col3) 
worksheet.write_column('D2',col4) 
worksheet.write_column('E2',col5) 

workbook.close()

+0

Sie müssen keine Werte eingeben. Sie können einfach Werte abrufen, die mit dem zweiten Element beginnen: 'ws.col_values ​​(3, 1)' gibt eine Liste von Werten zurück, die mit D2 beginnen. Während ich denke, xlrd ist das beste Paket zum Lesen von Excel-Dateien, es hat nicht die beste Dokumentation. Sie sollten den xlrd-Abschnitt des alten [Tutorial-PDFs] (https://github.com/python-excel/tutorial) lesen. Ja, es ist veraltet, aber es ist immer noch besser als die "offizielle" xlrd-Dokumentation. –

+0

Diese Schleife am Ende, die "Spalten" baut, ist die richtige Idee. Sie können 'columns' anstelle von' col1', 'col2' usw. verwenden. Beachten Sie, dass es sich bei" columns "zwar um eine Liste handelt, die darin enthaltenen Elemente aber auch Listen sind und somit individuell referenziert werden können. Zum Beispiel enthält 'columns [2]' in Ihrem obigen Code die gleichen Daten wie 'col3' (mit Ausnahme von Popping und Sortierung). Wie knallen und sortieren Sie die Daten in Spalten? Am einfachsten wäre es, das zu tun, was Sie tun müssen, bevor Sie es an "columns" anhängen, während Sie 'columns' aufbauen. –

Antwort

0

Ich glaube, Sie anhängen müssen() oder erweitern() Spaltennamen aus Ihrer Excel in die Liste 'col'. Derzeit ersetzt es den Wert von "i" jedes Mal, wenn die FOR-Schleife iteriert.

vielleicht so etwas wie folgt aus: col.append (ws.col_values ​​(i))

P. S. Dies ist meine erste Antwort auf Stack-Overflow. ich hoffe es hilft. Ich habe es nicht getestet (ich werde es testen und die Antwort bei Bedarf aktualisieren).

+0

Ich habe dies versucht, aber ich bekomme den folgenden Fehler: '<' nicht unterstützt zwischen Instanzen von 'Liste' und 'float' –

Verwandte Themen