Python 编程/Excel
Python 拥有多个第三方库用于读取和写入 Microsoft Excel 电子表格文件,包括 .xls 和 .xlsx。
对于处理 .xls 文件,有 xlrd 用于读取和 xlwt 用于写入。
对于处理 .xlsx 文件,有 xlrd 用于读取,openpyxl 用于读取和写入,以及 XlsxWriter 和 PyExcelerate 用于写入。
要与 Excel 应用程序交互并创建基于 Python 的加载项:xlwings、xlOil、PyXLL(商业版)。
支持读取 .xls Excel 文件。由于安全问题,从 2020 年 12 月的 xlrd 2.0.0 版本开始,对 .xlsx 文件的支持已移除,但仍然可以在 2018 年 12 月的 xlrd 1.2.0 版本中使用。许可证:BSD。
示例
import xlrd
workbook = xlrd.open_workbook("MySpreadsheet.xls")
#for sheet in workbook.sheets(): # Loads all the sheets, unlike workbook.sheet_names()
for sheetName in workbook.sheet_names(): # Sheet iteration by name
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)) # Output as a string
if cell.ctype == xlrd.XL_CELL_DATE:
dateTuple = xlrd.xldate_as_tuple(cell.value, workbook.datemode)
print(dateTuple) # E.g. (2017, 1, 1, 0, 0, 0)
mydate = xlrd.xldate.xldate_as_datetime(cell.value, workbook.datemode)
print(mydate) # In xlrd 0.9.3
print()
for sheetno in range(workbook.nsheets): # Sheet iteration by index
sheet = workbook.sheet_by_index(sheetno)
print("Sheet name:", sheet.name)
for notekey in sheet.cell_note_map: # In xlrd 0.7.2
print("Note AKA comment text:", sheet.cell_note_map[notekey].text)
print(xlrd.formula.colname(1)) # Column name such as A or AD, here 'B'
链接
- xlrd, pypi.python.org
- xlrd 1.2.0, pypi.python.org
- xlrd 文档, readthedocs.io
- xlrd API 文档, readthedocs.io
- Python: xlrd 区分日期和浮点数, stackoverflow.com
- xlrd.biffh.XLRDError: Excel xlsx 文件;不支持, 2020 年 12 月 11 日,stackoverflow.com
- xlrd 2 发布, 2020 年 12 月 11 日,groups.google.com
支持写入 .xls 文件。许可证:BSD。
链接
支持读取和写入 .xlsx Excel 文件。不支持 .xls 文件。许可证:MIT。
读取工作簿
from openpyxl import load_workbook
workbook = load_workbook("MyNewWorkbook.xlsx")
for worksheet in workbook.worksheets:
print("==%s==" % worksheet.title)
for row in worksheet: # For each cell in each row
for cell in row:
print(cell.row, cell.column, cell.value) # E.g. 1 A Value
for cell in worksheet["A"]: # For each cell in column A
print(cell.value)
print(worksheet["A1"].value) # A single cell
print(worksheet.cell(column=1, row=1).value) # A1 value as well
创建新工作簿
from openpyxl import Workbook
workbook = Workbook()
worksheet = workbook.worksheets[0]
worksheet['A1'] = 'String value'
worksheet['A2'] = 42 # Numerical value
worksheet.cell(row=3, column=1).value = "New A3 Value"
workbook.save("MyNewWorkbook.xlsx") # Overrides if it exists
更改现有工作簿
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
- openpyxl - 用于读取/写入 Excel 2010 xlsx/xlsm 文件的 Python 库, readthedocs.io
支持写入 .xlsx 文件。许可证:BSD。
链接
- XlsxWriter, pypi.org
- 使用 Python 和 XlsxWriter 创建 Excel 文件, readthedocs.io
支持写入 .xlsx 文件。许可证:BSD。
链接
- PyExcelerate, pypi.org
支持对 .xls 文件执行各种操作和查询;依赖于 xlrd 和 xlwt。许可证:MIT。
链接
- xlutils, pypi.org
支持创建基于 Python 的 Excel 加载项。需要 Python 3.6 或更高版本;需要安装 Excel 2010 或更高版本。支持:全局和局部范围工作表函数、功能区自定义、自定义任务窗格、RTD/异步函数、numpy、matplotlib、pandas、jupyter。由于使用 Excel 的 C-API 和嵌入式进程内 Python,函数调用开销低。
示例
创建函数,将日期增加一天
import datetime as dt
@xloil.func
def pyTestDate(x: dt.datetime) -> dt.datetime:
return x + dt.timedelta(days=1)
创建函数,在单元格中显示实时滴答时钟(使用 RTD)
@xloil.func
async def pyTestAsyncGen(secs):
while True:
await asyncio.sleep(secs)
yield datetime.datetime.now()
链接
支持通过 Windows 组件对象模型 (COM) 访问 Windows 应用程序。因此,在 Windows 上,如果安装了 Excel,PyWin32 允许你从 Python 调用它,并让它执行各种操作。你可以从 SourceForge 下载 .exe 安装程序来安装 PyWin32,目前它托管在那里。
链接
- 3.4.1. PyWin32, docs.python.org
- pywin32, pypi.python.org
- Python for Windows 扩展文件, sourceforge.net
- Python Excel 迷你食谱, pythonexcels.com
- 在 Python 中处理 Excel 文件, python-excel.org -- 包含指向包的源代码存储库(GitHub 等)的链接