跳轉到內容

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,目前它託管在那裡。

連結

[編輯 | 編輯原始碼]
華夏公益教科書