Inhalt von Excel Zellen überprüfen und Position ausgeben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
grorol2
User
Beiträge: 13
Registriert: Mittwoch 31. August 2011, 07:04

Hallo liebe Python Gemeinde,

mein Problem ist folgendes:
Ich habe sehr viele Exceldateien von denen ich dachte das sie alle das gleiche Format (gleiche Zellenposition der jeweiligen Inhalte z.B. Bearbeiter immer auf 10E) haben. Dummerweise stellte sich jetzt heraus das dies doch nicht der Fall ist und ich meine statische Zellenabfrage vergessen kann. Von daher hatte ich gehofft, dass mir jemand mit einer dynamischen Abfrage weiter helfen könnte. Konkret bedeutet dies, dass das Skript die Zellen der Tabelle nach dem Wort Bearbeiter durchsucht und dann den Inhalt der Zelle darunter in eine Variable bzw. final in eine DBF überträgt.

Vielen Dank schonmal im Voraus

Mein bisheriges Skript.

Code: Alles auswählen

from xlrd import open_workbook
from dbfpy import dbf

#Excel Quelltabelle oeffnen
book = open_workbook ('test.xls')
sheet = book.sheet_by_name("Vorlage Strasse")

# Zelleninhalte der Exceltabelle auslesen
bearbeiter = sheet.cell(9,4)

# uebertragung dbf
db = dbf.Dbf ("test.dbf", new=True)
db.addField(
		
                ("Bearbeiter", "C", 25),
   
                  )
rec = db.newRecord()
rec ["Bearbeiter"] = bearbeiter.value

rec.store()
db.close()
Zuletzt geändert von grorol2 am Mittwoch 31. August 2011, 09:12, insgesamt 2-mal geändert.
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Schau mal auf http://www.python-excel.org/ nach dem Python-Excel-Tutorial, dort gibt es einen Abschnitt "Iterating over the contents of the sheet" (Seite 11). Du kannst einfach Zeilen, Spalten oder Ranges als Liste verarbeiten und dann die normalen Python-Operationen darauf anwenden.
grorol2
User
Beiträge: 13
Registriert: Mittwoch 31. August 2011, 07:04

Vielen Dank für den ersten Anschubs. Das klappt soweit schon ganz gut. Jetzt könnte ich noch einen Tip zum encoding gebrauchen, wenn z.B. der String "Straße" gesucht wird bekomme ich die Fehlermeldung "syntax error non asci character... no encoding declared"


from xlrd import open_workbook
book = open_workbook('test.xls')

spalte1 = book.sheet_by_index(0)
a=spalte1.col_values(0,1)
c=a.index("Belag")
Belag=a[c+1]
print Belag
grorol2
User
Beiträge: 13
Registriert: Mittwoch 31. August 2011, 07:04

Vielen Dank für den Hinweis, wenn auch etwas überheblich. Leider habe ich es nicht geschafft das Problem endgültig zu lösen und bekomme folgende Fehlermeldung.
"Syntax error non asci Character"... "no encoding declared"

Mit ist klar das Python 2.6 im standard mit asci arbeitet und ihm das ß nicht passt. Müsste ich folglich nur eine codierung am Anfang setzen bzw. welche?

#!/usr/bin/python
# -*- coding: latin-1 -*-

Aus der xlrd Hilfe geht hervor, dass das Modul seine Werte in latin-1 oder utf_16_le liefert.

import sys
from xlrd import open_workbook

book = open_workbook('test.xls')


tabelle1 = book.sheet_by_index(0)

sp1=tabelle1.col_values(0,0)

c=sp1.index("Straße")

strasse=sp1[c+1]
print strasse
Zuletzt geändert von grorol2 am Donnerstag 1. September 2011, 10:21, insgesamt 1-mal geändert.
lunar

@grorol2: Du musst die Kodierung einer Quelltext-Datei an den Anfang derselben schreiben, um Zeichen außerhalb ASCII im Quelltext verwenden zu können.
grorol2
User
Beiträge: 13
Registriert: Mittwoch 31. August 2011, 07:04

Ok daraus folgt für mich, das es so geschrieben werden müsste.

#!/usr/bin/python
# -*- coding: utf-16LE-*-

import sys
from xlrd import open_workbook

book = open_workbook('test.xls')

tabelle1 = book.sheet_by_index(0)

sp1=tabelle1.col_values(0,0)

c=sp1.index("Straße")
strasse=sp1[c+1]

print strasse

Bekomm dann aber eine weitere Fehler meldung.
syntax error : 'utf-16' codec cant decode bytes in position ...... illegal encoding
lunar

@grorol2: Die offensichtliche Antwort ist, dass die Datei nicht "utf-16LE" kodiert ist.
grorol2
User
Beiträge: 13
Registriert: Mittwoch 31. August 2011, 07:04

Antworten