Python编程
Python 有多个第三方库用于读写 Microsoft Excel 电子表格文件,包括 .xls 和 .xlsx 格式。
对于处理 .xls 文件,有 xlrd
用于读取,xlwt
用于写入。
对于处理 .xlsx 文件,有 xlrd
用于读取,openpyxl
用于读写,以及 XlsxWriter
和 PyExcelerate
用于写入。
要与 Excel 应用程序交互并创建基于 Python 的加载项:xlwings
、xlOil
、PyXLL
(商业)。
xlrd
支持读取 .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(): # 加载所有工作表,与 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 的值
创建新工作簿:
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") # 如果存在则覆盖
更改现有工作簿:
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/异步函数、numpy
、matplotlib
、pandas
、jupyter
。由于使用了 Excel 的 C-API 并嵌入了进程内 Python,因此函数调用开销很低。
示例:
创建将日期加一天的函数:
import datetime as dt
@xloil.funcdef
def pyTestDate(x: dt.datetime) -> dt.datetime:
return x + dt.timedelta(days=1)
创建一个在单元格中提供实时时钟的函数(使用 RTD):
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,它目前托管在那里。