2016-04-21 2 views
0

2 Вопросы спросить:python: получить активный лист в xlrd? и помощь для чтения и проверки Ехчел в Python

Ques 1: Я только начал изучать о xlrd для чтения файла первенствует в питона. Мне было интересно, есть ли метод в xlsrd -> аналогично get_active_sheet() в openpyxl или любым другим способом получить Активный лист?

get_active_sheet() работает это в openpyxl

 
import openpyxl 

wb = openpyxl.load_workbook('example.xlsx') 

active_sheet = wb.get_active_sheet() 


выход: Рабочий лист «Лист1»

Я нашел методы в xlrd для получения названия листов, но ни один из них не мог сказать мне активный лист.

Ques 2:

ли xlrd лучший packaage в питоне для чтения файлов Excel? Я также столкнулся с this, который имел информацию о других пакетах python (xlsxwriterxlwtxlutils) для чтения и записи файлов excel.

Какой из вышеперечисленного все будет лучше для изготовления приложения, которое считывает файл Excel и применяет различные валидации к различным столбцам

Для например: Колонка с «ID» Заголовок должен иметь уникальные значения и столбец с Заголовок «Страна» должен иметь действующие страны.

ответ

1

Вы можете увидеть все рабочие листы в данной книге с помощью функции sheet_names(). Excel не имеет понятия «активного листа», но если мое предположение о том, что вы имеете в виду первый лист, является правильным, вы можете получить первый элемент sheet_names(), чтобы получить «активный лист».

Что касается вашего второго вопроса, нелегко сказать, что пакет лучше, чем другой пакет объективно. Однако широко используется xlrd и самая популярная библиотека Python для того, что она делает.

Я бы порекомендовал придерживаться его.

+0

Благодарим за ваш ответ, используя активный лист в excel. Я имел в виду лист, который открывается как лист по умолчанию при открытии файла Excel. Существует концепция активного листа ([нажмите здесь] (https://msdn.microsoft.com/en-us/library/office/ff841181.aspx)) в Excel. – gabbarsingh

+0

Извинения, вы правы. – Cisplatin

+0

это неверно, см. Мой ответ - желаемая функциональность OP существовала в xlrd за> 10 лет – NikT

1

Добро пожаловать в Stack Overflow.

Я работаю с Excel файлами в Python какое-то время, поэтому я мог бы помочь вам с вашим вопросом, я думаю.

openpyxl и xlrd решают разные задачи, один для xlsx файлов (Excel 2007+), где другой один для xls файлов (Excel 1997-2003), соответственно.

Xenon сказал в своем ответе, что Excel не признает концепцию листа active, что не совсем так. Если вы откроете документ Excel, перейдите на другой лист (который не является первым) и сохраните и закройте документ, а при следующем его открытии Excel откроет документ на последнем листе, на котором вы были.

Однако xlrd не поддерживает такой рабочий процесс, т.е.прося лист active. Если вы знаете имя листа, вы можете использовать метод sheet_by_name, или если вы знаете индекс листа, вы можете использовать метод sheet_by_index.

Я не знаю, является ли оптимальный пакет xlrd, но он довольно прочный, и у меня была проблема с его использованием.

Приведенный пример может быть разрешен путем первого итерации по первой строке и сохранения словаря, в каком столбце находится заголовок. Затем сохраняются все значения в столбце ID в списке и сравниваются длина этого списка с длиной набора, созданного из этого списка, то есть len(values) == len(set(values)). После этого вы можете перебирать столбец с заголовком страны и проверять каждое значение, если оно находится в словаре, который вы ранее сделали со всеми действующими округами.

Я надеюсь, что этот ответ будет отвечать вашим потребностям.

Резюме: Stick with xlrd, потому что достаточно зрел.

+0

это неверно, см. Мой ответ - желаемая функциональность OP существовала в xlrd в течение> 10 лет – NikT

1

«Активный лист» здесь кажется, что вы имеете в виду последний лист, выбранный при сохранении/закрытии книги. Вы можете получить этот лист через значение sheet_visible.

https://github.com/python-excel/xlrd/blob/master/xlrd/sheet.py#L33

import xlrd 
xl = xlrd.open_workbook("example.xls") 
for sht in xl.sheets(): 
    # sht.sheet_visible value of 1 is "active sheet" 
    print(sht.name, sht.sheet_selected, sht.sheet_visible) 

Обычно только выбирают один лист за один раз, так что она может выглядеть sheet_visible и sheet_selected такие же, но несколько листов могут быть выбраны одновременно (Ctrl + несколько вкладок листов , например).

Другая причина, по которой это может показаться запутанным, состоит в том, что Excel использует «видимые» с точки зрения скрытых/видимых листов. В xlrd это вместо sheet.visibility (см. https://stackoverflow.com/a/44583134/4258124)

Смежные вопросы