2010-09-23 7 views
2

J'utilise python xlrd http://scienceoss.com/read-excel-files-from-python/ pour lire les données à partir d'une feuille ExcelPython xlrd extraction des données

Ma question est de savoir si je l'ai lu une ligne avec la première cellule comme « Nom de l'employé » dans la feuille Excel

Et est une autre ligne nommée dont la première cellule est « nom de l'employé »

Comment peut-on lire la dernière colonne en commençant par la dernière ligne qui a « nom de l'employé » dans le premier cell.Ignoring précédent

wb = xlrd.open_workbook(file,encoding_override="cp1252") 
    wb.sheet_names() 
    sh = wb.sheet_by_index(0) 
    num_of_rows = sh.nrows 
    num_of_cols = sh.ncols 
    valid_xl_format = 0 
    invalid_xl_format = 0 

    if(num_of_rows != 0): 
    for i in range(num_of_rows): 
     questions_dict = {} 
     for j in range(num_of_cols): 
       xl_data=sh.cell(i,j).value 
       if ((xl_data == "Employee name")): 
        # Regardless of how many "Employee name" found in rows first cell,Read only the last "Employee name" 

Répondre

5

J'utilise python xlrd http://scienceoss.com/read-excel-files-from-python/ pour lire les données à partir d'une feuille Excel

Vous devez penser à ce que vous sont en train de faire, au lieu de saisir un code de blog et de laisser dans des choses totalement hors de propos comme wb.sheet_names() et en omettant des pièces très pertinentes à votre exigence comme first_column = sh.col_values(0).

Voici comment trouver le ROW_INDEX du dernier « whatever » dans la colonne A (la première colonne) - non testé:

import xlrd 
wb = xlrd.open_workbook(file_name) 
# Why do you think that you need to use encoding_overide? 
sheet0 = wb.sheet_by_index(0) 
tag = u"Employee name" # or u"Emp name" or ... 
column_0_values = sheet0.col_values(colx=0) 
try: 
    max_tag_row_index = column_0_values.rindex(tag) 
    print "last tag %r found at row_index %d" % (
     tag, max_tag_row_index) 
except IndexError: 
    print "tag %r not found" % tag 

Maintenant, nous devons interpréter «Comment peut-on lire la dernière colonne de départ avec la dernière ligne qui a « nom de l'employé » dans la première cellule "

en supposant que « la dernière colonne » désigne une avec column_index == sheet0.ncols - 1, alors:

last_colx = sheet0.ncols - 1 
required_values = sheet0.col_values(colx=last_colx, start_rowx=max_tag_row_index) 
required_cells = sheet0.col_slice(colx=last_colx, start_rowx=max_tag_row_index) 
# choose one of the above 2 lines, depending on what you need to do 

Si ce n'est pas ce que vous voulez dire (ce qui est tout à fait possible car il ignore tout un tas de données (pourquoi voulez-vous lire seulement la dernière colonne?), Essayez d'expliquer par des exemples ce que vous voulez dire.

Peut-être que vous voulez itérer sur les cellules restantes:

for rowx in xrange(max_tag_row_index, sheet0.nrows): # or max_tag_row_index + 1 
    for colx in xrange(0, sheet0.ncols): 
     do_something_with_cell_object(sheet0.cell(rowx, colx)) 
+0

Le code donné était juste un exemple.Toujours merci pour le sol ... – Hulk

0

Il est difficile de comprendre exactement ce que vous demandez.
La publication de données d'échantillon peut vous aider à clarifier votre intention.

Avez-vous essayé itérer sur l'ensemble de données dans le sens inverse ?, par exemple:

for i in reversed(range(num_of_rows)): 
    ... 
    if xl_data == "Employee name": 
     # do something 
     # then break since you've found the final "Employee Name" 
     break 
+0

De peur que dire première rangée première cellule est « nom Emp », deuxième rangée première cellule est « nom Emp » et la troisième rangée première cellule est « nom Emp ".Dans ce cas, je veux lire le troisième cellule – Hulk

Questions connexes