Извлечение данных Python xlrd

Я использую python xlrd http://scienceoss.com/read-excel-files-from-python/ для чтения данных с листа Excel

Мой вопрос: читаю ли я строку с первой ячейкой как «Имя сотрудника» на листе Excel

И есть еще одна строка с именем, первая ячейка которой - «Имя сотрудника».

Как мы можем прочитать последний столбец, начиная с последней строки, в которой есть «Имя сотрудника» в первой ячейке. Игнорируя предыдущий

  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"

person Hulk    schedule 23.09.2010    source источник


Ответы (2)


Я использую python xlrd http://scienceoss.com/read-excel-files-from-python/ для чтения данных с листа Excel

Вам нужно думать о том, что вы делаете, вместо того, чтобы брать какой-то код блога и оставлять совершенно не относящиеся к делу вещи, такие как wb.sheet_names(), и опускать части, очень важные для вашего требования, такие как first_column = sh.col_values(0).

Вот как найти row_index последнего «независимо» в столбце A (первый столбец) — непроверено:

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

Теперь нам нужно интерпретировать «Как мы можем прочитать последний столбец, начиная с последней строки, в которой есть «Имя сотрудника» в первой ячейке»

Предполагая, что «последний столбец» означает столбец с column_index == sheet0.ncols - 1, тогда:

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

Если это не то, что вы имеете в виду (что вполне возможно, так как игнорируется целая куча данных (почему вы хотите прочитать только последний столбец?), попробуйте объяснить на примерах, что вы имеете в виду.

Возможно, вы хотите перебрать оставшиеся ячейки:

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))
person John Machin    schedule 23.09.2010

Трудно точно понять, о чем вы спрашиваете.
Публикация примеров данных может помочь прояснить ваши намерения.

Вы пробовали перебирать набор данных в обратном порядке? Например:

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
person mechanical_meat    schedule 23.09.2010
comment
Чтобы не сказать, что первая ячейка первой строки - это имя Emp, первая ячейка второй строки - это имя Emp, а первая ячейка третьей строки - это имя Emp. В этом случае я хочу прочитать из третьей ячейки - person Hulk; 23.09.2010