Открыть и получить данные из ListObject листа Excel с Python - PullRequest
1 голос
/ 13 октября 2019

Проблема: Откройте ListObject (таблицу Excel) файла Excel из среды y Python.

Причина: существует несколько решений для открытия файла Excel в Python. Начиная с панд:

import pandas as pd
mysheetName="sheet1"
df = pd.read_excel(io=file_name, sheet_name=mysheetName)

Это передаст лист1 в кадр данных панд. Пока все хорошо.

Другое, более подробное решение - использование конкретных библиотек. Это код вопроса переполнения стека.

from openpyxl import load_workbook
wb2 = load_workbook('test.xlsx')
print wb2.get_sheet_names()
['Sheet2', 'New Title', 'Sheet1']

worksheet1 = wb2['Sheet1'] # one way to load a worksheet
worksheet2 = wb2.get_sheet_by_name('Sheet2') # another way to load a worksheet
print(worksheet1['D18'].value)

Пока что все хорошо.

НО: если у вас есть ListObject (таблица Excel) на листе, я этого не делалнайти любой способ получить доступ к данным Listobject. ListObjects часто используются более продвинутыми пользователями Excel;прежде всего при программировании макросов в VBA. Они очень удобны и могут рассматриваться как эквивалент кадра данных для панд в Excel. Наличие моста между Excel Listobject и фреймом данных pandas выглядит очень логично. Тем не менее, я не нашел пока никакого решения, библиотеки или обходного пути для этого.

Вопрос. Кто-нибудь знает о какой-нибудь Python-библиотеке / решении для непосредственного извлечения объектов Listobject из листов Excel?.

ПРИМЕЧАНИЕ1: Не очень хорошее решение Конечно, зная «размещение» объекта Listobject, можно обратиться к началуи последняя ячейка, но это действительно плохое решение, потому что не позволяет вам изменять Listobject в файле Excel (python должен быть изменен сразу). Как только размещение ListObject изменится, или сам listobject станет больше, код Python будет нарушен.

ПРИМЕЧАНИЕ 2. Мое текущее решение: я экспортирую listObject из excel (с макросом) в JSONфайл и читать его из Python. Но дополнительная работа очевидна. VBA-код, дополнительный файл и т. Д. И т. Д.

Последний комментарий: Если кто-то интересуется этой проблемой, но все еще не знает, что такое ListObject в Excel здесь , нажмите и посмотрите здесь:

enter image description here

1 Ответ

1 голос
/ 13 октября 2019

Джеймс прав:

https://openpyxl.readthedocs.io/en/stable/worksheet_tables.html

https://openpyxl.readthedocs.io/en/stable/api/openpyxl.worksheet.table.html

В openpyxl есть класс для чтения таблиц. Также под id:

class openpyxl.worksheet.table.Table(id=1,...

id = 1 будет означать первую таблицу рабочего листа.

Всегда помните, что объекты ListObject в Excel называются таблицами. Это странно (как часто с VBA). Если вы работаете с VBA, вы можете забыть, что ListObject = Table.

С xlwings также возможно. API немного отличается:

import xlwings as xw
wb = xw.Workbook.active()
xw.Range('TableName[ColumnName]').value

Или, чтобы получить столбец с заголовком и строкой Total, вы можете сделать:

xw.Range('TableName[[#All], [ColumnName]]').value
...