我有一个现有的Excel文件,数据在第一张和第二张纸上,我应该用Python读取。
Openpyxl 从第一个/活动工作表读取数据。
from openpyxl import Workbook, load_workbook
wb = load_workbook('Test.xlsx')
ws = wb.active
它工作得很好,直到我总是在第一张纸上。
我试过这个:
wb.active = 1 # or
wb.active = 2
没用。
我想阅读表格,而不是根据激活,而是根据它们的名称。 (或表位置) 我需要这样的东西:
wb = load_workbook('Test.xlsx')
ws1 = wb.Sheet1
ws2 = wb.Sheet2
那么,如何在不点击不同工作表的情况下读取数据呢?
或者,如何激活实际需要的sheet?
我找到了!
ws2 = wb["Sheet2"]
然后我就调用 ws2 ,效果很好。 :) 例如:
ws2['A1'].value
您可以循环访问 wb.worksheets 或 wb.sheetnames,按索引(从 1 开始)或按工作表名称查找工作表。这是示例脚本:
from openpyxl import Workbook, load_workbook
input_file = 'inputs/my_sample.xlsx'
wb: Workbook = load_workbook(filename=input_file)
def get_worksheet_by_index(wb: Workbook, sheet_idx: int, set_as_active: bool = False):
# sheet_idx is 1-based
ws = None
for idx, worksheet in enumerate(wb.worksheets):
if idx + 1 == sheet_idx:
ws = worksheet
if set_as_active:
wb.active = ws
break
return ws
def get_worksheet_by_name(wb: Workbook, sheet_name: str, set_as_active: bool = False):
ws = None
for sheetname in wb.sheetnames:
if sheetname == sheet_name:
ws = wb[sheetname]
if set_as_active:
wb.active = ws
break
return ws
ws = get_worksheet_by_index(wb, 2)
print(ws.title)
ws = get_worksheet_by_name(wb, 'my_sheet_name')
print(ws.title)