使用Python win32com获取Excel工作表列表

Mat*_*att 1 python excel win32com

正在寻找一种简单的方法来使用 Python 3 中的 win32com 获取 Excel 工作簿中的工作表列表。我希望避免迭代,但找不到执行此操作的函数。

Tre*_*ney 8

  • 调用.Sheets工作簿的属性,返回一个Sheets集合,<win32com.gen_py.Microsoft Excel 16.0 Object Library.Sheets instance at 0x1597583762504>
    • 为了获取每个工作表,您必须为每个工作表迭代,它返回一个对象<win32com.gen_py.Microsoft Excel 16.0 Object Library._Worksheet instance at 0x1597583219080>
    • 要获取每个工作表的名称,必须使用以下.Name方法
  • 如下所示,您可以轻松地sheet_names通过列表理解获得
  • 或者,您可以使用以下命令获取工作表对象的字典
    • ws = {f'ws{i}': wb.Sheets(sheet.Name) for i, sheet in enumerate(wb.Sheets)}
    • 赋值为ws['ws0'].Range('A1').Value = 1

功能

import win32com.client as win32
from pathlib import Path
import sys

win32c = win32.constants

def run_excel(f_path: Path, f_name: str) -> list:

    filename = f_path / f_name

    # create excel object
    excel = win32.gencache.EnsureDispatch('Excel.Application')

    # excel can be visible or not
    excel.Visible = True  # False
    
    # try except for file / path
    try:
        wb = excel.Workbooks.Open(filename)
    except com_error as e:
        if e.excepinfo[5] == -2146827284:
            print(f'Failed to open spreadsheet.  Invalid filename or location: {filename}')
        else:
            raise e
        sys.exit(1)

    # get worksheet names        
    sheet_names = [sheet.Name for sheet in wb.Sheets]
        
    wb.Close(True)
    excel.Quit()
        
    return sheet_names
Run Code Online (Sandbox Code Playgroud)

设置和函数调用

# file path
f_path = Path.cwd()  # file in current working directory
# f_path = Path(r'c:\...\Documents')  # file located somewhere else

# excel file
f_name = 'test.xlsx'

# function call
run_excel(f_path, f_name)

# output
['Sheet1', 'Sheet2', 'Sheet3', 'Sheet4']

# create a worksheet object
ws1 = wb.Sheets('Sheet1')
Run Code Online (Sandbox Code Playgroud)