Domanda

Sto usando python XLRD http://scienceoss.com/read-excel lime-da-python / per leggere i dati da un foglio di Excel

La mia domanda è se ho letto una riga con il primo cellulare come "Nome dipendente" nel foglio excel

E c'è un'altra fila di nome la cui prima cella è "Nome dipendente"

Come si può leggere l'ultima colonna a partire con l'ultima riga che ha "Nome dipendente" nel primo cell.Ignoring precedente

  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"
È stato utile?

Soluzione

Sto usando python XLRD http://scienceoss.com/read -Excel-files-da-python / per leggere i dati da un foglio di Excel

È necessario pensare a quello che stai facendo, invece di afferrare qualche codice blog e lasciando in cose del tutto irrilevante come wb.sheet_names() e omettendo parti molto rilevanti per il vostro requisito come first_column = sh.col_values(0).

Ecco come trovare il row_index degli ultimi "qualunque" nella colonna A (prima colonna) - non testati:

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

Ora abbiamo bisogno di interpretare " Come possiamo leggere l'ultima colonna a partire con l'ultima riga che ha 'Nome dipendente' nella prima cella "

Supponendo che "l'ultima colonna" si intende quella con column_index == sheet0.ncols - 1, allora:

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

Se questo non è quello che vuoi dire (che è del tutto possibile in quanto ignora un insieme di dati (perché si desidera leggere solo l'ultima colonna?), Si prega di cercare di spiegare con esempi ciò che significano.

Forse si vuole per scorrere i restanti celle:

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

Altri suggerimenti

E 'difficile capire esattamente quello che stai chiedendo.
Distacco campione di dati potrebbe aiutare a rendere il vostro intento più chiaro.

Hai iterazione provato sopra il set di dati in senso inverso ?, per esempio:.

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top