跳转到内容

Python 编程/Excel

来自维基教科书,为开放世界提供开放书籍

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

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

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

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

支持读取 .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'

链接

支持写入 .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)

链接

XlsxWriter

[编辑 | 编辑源代码]

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

链接

PyExcelerate

[编辑 | 编辑源代码]

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

链接

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

链接

支持创建基于 Python 的 Excel 加载项。需要 Python 3.6 或更高版本;需要安装 Excel 2010 或更高版本。支持:全局和局部范围工作表函数、功能区自定义、自定义任务窗格、RTD/异步函数、numpymatplotlibpandasjupyter。由于使用 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,目前它托管在那里。

链接

[编辑 | 编辑源代码]
华夏公益教科书