Seite 1 von 1

Frei Excel Zelle finden

Verfasst: Dienstag 24. Juni 2008, 12:19
von Korea-2003
Hi,

wie finde ich raus, welches die nächste freie Zelle in Excel ist?
Das heißt ich habe beispielsweise A1-A5 gefüllt und mein Python Programm soll abfragen, welche die nächste freie ist. Rauskommen
müsste somit A6.
Wie lautet der Befehl dafür?

MfG :)

Verfasst: Dienstag 24. Juni 2008, 15:57
von mkesper

Code: Alles auswählen

import xlrd
def main(name):
    book = xlrd.open_workbook(name)
    for sheet in book.sheets():
        print sheet.name
        for row in xrange(sheet.nrows):
            row_content = sheet.row_values(row)
            print row_content
            for col_index, cell in enumerate(row_content):
                print cell, col_index
                if cell == "":
                    print "Leere Zelle: %s%i" % (chr(ord("A") + row), col_index + 1)
                    break
            else:
                print "Leere Zelle: %s%i" % (chr(ord("A") + row), col_index + 1)
        
if __name__ == '__main__':
    main("Mappe.xls")
Meine Debug-Prints sind noch drin. Info zu xlrd.

Verfasst: Donnerstag 26. Juni 2008, 15:46
von Korea-2003
Geht das auch irgendwie ohne zusätzliches xlrd Modul?
Genauso würde ich gerne von oben nach unten den Zeilenindex zählen, natürlich nur bis zur letzten befüllten Zeile.

MfG :)

Verfasst: Donnerstag 26. Juni 2008, 15:52
von mkesper
Mit Modulen aus der Standardlib kannst du nur csv-Dateien lesen.
Was meinst du mit Zeilenindex zählen?
Die letzte befüllte Zeile wird durch sheet.nrows angegeben, wie in dem Snippet.

Verfasst: Freitag 27. Juni 2008, 10:06
von Korea-2003
Hi,

ich habe es nun mit Hilfe des xlrd Moduls gemacht. Bekomme aber leider immer eine Fehlermeldung, da im Excel Sheet Umlaute enthalten sind.

Code: Alles auswählen

        workbook = xlrd.open_workbook(self.txtFile.GetValue(), encoding_override="cp1252")
        for worksheet in workbook.sheets():
            if worksheet.name == "NewVersion": 
                for row in xrange(worksheet.nrows):
                    if row > 0:
                        row_content = worksheet.row_values(row) 
                        for index, cell in enumerate(row_content): 
                            print cell, index
So sieht der Code dazu aus. Ich habe zwar eine Codierung drin, aber entweder ist sie falsch oder ich habe noch etwas vergessen?

MfG :)

Verfasst: Freitag 27. Juni 2008, 14:55
von BlackJack
Wo kommt denn die Fehlermeldung und wie lautet sie genau? Insbesondere wenn die Kodierung nicht von Dir vorgegeben wird. Ich habe den Verdacht, dass sie dann beim ``print`` kommt!? Das hätte dann nichts mit der Kodierung in der Excel-Datei zu tun, sondern dass Du explizit angeben müsstest wie die Daten bei der Ausgabe per ``print`` kodiert werden sollen.