Python 有多个第三方库用于读写 Microsoft Excel 电子表格文件,包括 .xls 和 .xlsx 格式。

对于处理 .xls 文件,有 xlrd 用于读取,xlwt 用于写入。

对于处理 .xlsx 文件,有 xlrd 用于读取,openpyxl 用于读写,以及 XlsxWriterPyExcelerate 用于写入。

要与 Excel 应用程序交互并创建基于 Python 的加载项:xlwingsxlOilPyXLL(商业)。

xlrd

支持读取 .xls Excel 文件。由于安全问题,从 2020 年 12 月发布的 xlrd 2.0.0 版本开始,移除了对 .xlsx 文件的支持,但仍然可以在 2018 年 12 月发布的 xlrd 1.2.0 版本中使用。许可证:BSD。

示例:

Python
import xlrd

workbook = xlrd.open_workbook("MySpreadsheet.xls")

#for sheet in workbook.sheets(): # 加载所有工作表,与 workbook.sheet_names() 不同
for sheetName in workbook.sheet_names():  # 按名称迭代工作表
  print("Sheet name:", sheetName)
  sheet = workbook.sheet_by_name(sheetName)
  for rowno in range(sheet.nrows):
    for colno in range(sheet.ncols):
      cell = sheet.cell(rowno, colno)
      print(str(cell.value))  # 输出为字符串
      if cell.ctype == xlrd.XL_CELL_DATE:
        dateTuple = xlrd.xldate_as_tuple(cell.value, workbook.datemode)
        print(dateTuple)  # 例如 (2017, 1, 1, 0, 0, 0)
        mydate = xlrd.xldate.xldate_as_datetime(cell.value, workbook.datemode)
        print(mydate)  # 在 xlrd 0.9.3 中
      print()
    for sheetno in range(workbook.nsheets):  # 按索引迭代工作表
  sheet = workbook.sheet_by_index(sheetno)
  print("Sheet name:", sheet.name)
  for notekey in sheet.cell_note_map:  # 在 xlrd 0.7.2 中
    print("Note AKA comment text:", sheet.cell_note_map[notekey].text)
  print(xlrd.formula.colname(1))  # 列名,例如 A 或 AD,这里是 'B'

链接:

*   [xlrd, pypi.python.org](invalid URL removed]
*   [xlrd 1.2.0, pypi.python.org](invalid URL removed]
*   [xlrd 文档, readthedocs.io](invalid URL removed]
*   [xlrd API 文档, readthedocs.io](invalid URL removed]
*   [Python: xlrd discerning dates from floats, stackoverflow.com](invalid URL removed]
*   [xlrd.biffh.XLRDError: Excel xlsx file; not supported, 11 Dec 2020, stackoverflow.com](invalid URL removed]
*   [xlrd 2 released, 11 Dec 2020, groups.google.com](invalid URL removed]

**xlwt**

支持写入 .xls 文件。许可证:BSD。

链接:

*   [xlwt, pypi.python.org](invalid URL removed]
*   [xlwt 文档, readthedocs.io](invalid URL removed]

**openpyxl**

支持读写 .xlsx Excel 文件。不支持 .xls 文件。许可证:MIT。

读取工作簿:

```python
from openpyxl import load_workbook

workbook = load_workbook("MyNewWorkbook.xlsx")

for worksheet in workbook.worksheets:
  print("==%s==" % worksheet.title)
  for row in worksheet:  # 对于每行中的每个单元格
    for cell in row:
      print(cell.row, cell.column, cell.value)  # 例如 1 A Value
  for cell in worksheet["A"]:  # 对于 A 列中的每个单元格
    print(cell.value)
  print(worksheet["A1"].value)  # 单个单元格
  print(worksheet.cell(column=1, row=1).value)  # A1 的值

创建新工作簿:

Python
from openpyxl import Workbook

workbook = Workbook()
worksheet = workbook.worksheets[0]
worksheet['A1'] = 'String value'
worksheet['A2'] = 42  # 数值
worksheet.cell(row=3, column=1).value = "New A3 Value"
workbook.save("MyNewWorkbook.xlsx")  # 如果存在则覆盖

更改现有工作簿:

Python
from openpyxl import load_workbook

workbook_name = 'MyWorkbook.xlsx'
workbook = load_workbook(workbook_name)
worksheet = workbook.worksheets[0]
worksheet['A1'] = "String value"
workbook.save(workbook_name)

链接:

  • [openpyxl, pypi.org](invalid URL removed]
  • [openpyxl - A Python library to read/write Excel 2010 xlsx/xlsm files, readthedocs.io](invalid URL removed]

XlsxWriter

支持写入 .xlsx 文件。许可证:BSD。

链接:

  • [XlsxWriter, pypi.org](invalid URL removed]
  • [Creating Excel files with Python and XlsxWriter, readthedocs.io](invalid URL removed]

PyExcelerate

支持写入 .xlsx 文件。许可证:BSD。

链接:

  • [PyExcelerate, pypi.org](invalid URL removed]

xlutils

支持对 .xls 文件执行各种操作和查询;依赖于 xlrd 和 xlwt。许可证:MIT。

链接:

  • [xlutils, pypi.org](invalid URL removed]

xlOil

支持创建基于 Python 的 Excel 加载项。需要 Python 3.6 或更高版本;需要安装 Excel 2010 或更高版本。支持:全局和局部作用域工作表函数、功能区自定义、自定义任务窗格、RTD/异步函数numpymatplotlibpandasjupyter。由于使用了 Excel 的 C-API 并嵌入了进程内 Python,因此函数调用开销很低。

示例:

创建将日期加一天的函数

Python
import datetime as dt

@xloil.funcdef
def pyTestDate(x: dt.datetime) -> dt.datetime:
    return x + dt.timedelta(days=1)

创建一个在单元格中提供实时时钟的函数(使用 RTD):

Python
import asyncio
import datetime

@xloil.funcasync
async def pyTestAsyncGen(secs):
    while True:
        await asyncio.sleep(secs)
        yield datetime.datetime.now()

链接:

  • [xlOil, pypi.org](invalid URL removed]
  • [xloil, readthedocs.io](invalid URL removed]

pywin32

支持通过 Windows 组件对象模型 (COM) 访问 Windows 应用程序。因此,在 Windows 上,如果安装了 Excel,PyWin32 允许你从 Python 调用它并执行各种操作。你可以通过从 SourceForge 下载 .exe 安装程序来安装 PyWin32,它目前托管在那里。

Last modified: Friday, 31 January 2025, 1:52 AM