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 等)的連結