博客 / 詳情

返回

使用 Python 高效寫入多類型數據至 Excel 文件

在數據驅動的工作流中,Microsoft Excel 作為廣泛使用的電子表格工具,常用於數據存儲、分析與報告生成。然而,手動維護和更新 Excel 文件不僅效率低下,還容易引入人為錯誤。在需要處理大規模數據、生成周期性報表或集成異構系統輸出的場景下,自動化方案顯得尤為必要。

Python 憑藉其豐富的生態系統,在辦公自動化領域展現出顯著優勢。本文將介紹如何使用 Free Spire.XLS for Python 庫,以程序化方式高效、可靠地將多種數據類型寫入 Excel 文件,並涵蓋格式設置、公式嵌入、圖片插入及超鏈接創建等高級功能。

環境配置與基礎用法

安裝依賴

確保系統已安裝 Python。通過 pip 安裝 Free Spire.XLS for Python:

pip install spire.xls.free

基本寫入示例

以下代碼演示了創建新工作簿、寫入單元格內容、應用格式並保存文件的完整流程:

from spire.xls import *

workbook = Workbook()
sheet = workbook.Worksheets.get_Item(0)

# 寫入文本
sheet.Range["B2"].Value = "Hello, Python & Excel!"

# 應用格式
sheet.Range.AutoFitColumns()
sheet.Range.BorderAround(LineStyleType.Medium, Color.get_MediumBlue())
sheet.Range.Style.Color = Color.get_LightGray()

# 保存並釋放資源
workbook.SaveToFile("HelloWorld.xlsx", ExcelVersion.Version2016)
workbook.Dispose()

寫入結果預覽:

使用Python創建Excel文件示例

關鍵對象説明:

  • Workbook:表示一個 Excel 文件,可通過 Workbook() 創建工作簿,新建的 Excel 工作簿包含三個默認工作表。
  • Worksheet:通過 Worksheets[index] 訪問具體工作表。
  • Range[cell_ref]:通過 A1 引用或行列索引訪問單元格。
  • .Value.NumberValue.DateTimeValue.BooleanValue:分別用於寫入不同類型的數據。
  • .SaveToFile():持久化工作簿至指定路徑。
  • .Dispose():顯式釋放底層資源,避免內存泄漏。

多類型數據寫入實踐

文本與數值

字符串、整數和浮點數可直接賦值。對於數值類型,建議使用 NumberValue 屬性以確保正確識別為數字格式:

sheet.Range["A1"].Value = "產品名稱"
sheet.Range["B1"].Value = "銷售額"
sheet.Range["A2"].Value = "筆記本電腦"
sheet.Range["B2"].NumberValue = 12000
sheet.Range["A3"].Value = "智能手機"
sheet.Range["B3"].NumberValue = 8500.75

寫入結果預覽:

使用Python寫入文本與數值到Excel文件

日期與時間

Spire.XLS 支持通過 DateTimeValue 寫入日期時間。需注意其內部使用 spire.xls.common.DateTime 類型,而非 Python 原生 datetime

from spire.xls.common import *
import datetime

# 寫入當前 UTC 時間
sheet.Range["B1"].DateTimeValue = DateTime.get_UtcNow()

# 寫入指定日期
sheet.Range["B2"].DateTimeValue = DateTime.Parse("2023-05-01")

# 轉換 Python datetime 對象
py_time = datetime.datetime(2023, 5, 1, 10, 30)
time_str = py_time.strftime("%Y-%m-%d %H:%M:%S")
sheet.Range["B3"].DateTimeValue = DateTime.Parse(time_str)

# 設置顯示格式
sheet.Range["B1"].Style.NumberFormat = "yyyy-mm-dd hh:mm:ss"

sheet.Range.AutoFitColumns()

寫入結果預覽:

使用Python寫入日期時間到Excel文件

布爾值

布爾數據通過 BooleanValue 屬性寫入:

sheet.Range["B1"].BooleanValue = True
sheet.Range["B2"].BooleanValue = False

寫入結果預覽:

使用Python寫入布爾值到Excel文件

列表與元組

批量寫入可通過 InsertArray 方法實現。該方法支持按行或按列插入一維數組:

header = ["ID", "姓名", "年齡"]
data = [[1, "張三", 30], [2, "李四", 25]]

# 寫入標題(按行)
sheet.InsertArray(header, 1, 1, False)

# 逐行寫入數據
for i, row in enumerate(data, start=2):
    for j, value in enumerate(row, start=1):
        sheet.Range[i, j].Value = str(value)

寫入結果預覽:

使用Python寫入列表與元組到Excel文件

注意:InsertArray 的第四個參數 is_row 控制插入方向;False 表示按列插入(即橫向填充)。該方法僅支持同質的一維數組(如全為字符串或數字)。當列表包含多種類型(如整數、字符串、浮點數混合)時,需通過循環逐項寫入,並根據目標單元格的數據語義選擇適當的賦值方式(例如使用 .Value = str(x) 統一轉為字符串,或分別使用 .NumberValue、.DateTimeValue 等屬性以保留類型信息)。

字典列表

將字典列表轉換為表格時,通常以鍵作為列頭:

products = [
    {"ID": "P001", "名稱": "鍵盤", "價格": 199},
    {"ID": "P002", "名稱": "鼠標", "價格": 99}
]

if products:
    headers = list(products[0].keys())
    sheet.InsertArray(headers, 1, 1, False)
    
    for r_idx, item in enumerate(products, start=2):
        values = [item[k] for k in headers]
        # 當前版本需逐單元格賦值
        for c_idx, val in enumerate(values, start=1):
            sheet.Range[r_idx, c_idx].Value = str(val)

寫入結果預覽:

使用Python寫入字典列表到Excel文件

高級功能

公式寫入

Excel 公式可通過 Formula 屬性直接寫入,計算由 Excel 客户端完成:

sheet.Range["A1"].NumberValue = 10
sheet.Range["A2"].NumberValue = 20
sheet.Range["B1"].Formula = "=SUM(A1:A2)"
sheet.Range["B2"].Formula = "=AVERAGE(A1:A2)"

圖片插入

使用 Pictures.Add(row, col, image_path) 在指定位置插入圖像:

sheet.Pictures.Add(3, 1, "logo.png")
# 可選:調整尺寸與偏移
# pic = sheet.Pictures.Add(3, 1, "logo.png")
# pic.Width, pic.Height = 100, 50

超鏈接創建

支持外部 URL 與內部工作表跳轉:

# 外部鏈接
cell = sheet.Range[7, 1]
cell.Text = "Python 官網"
link = sheet.HyperLinks.Add(cell)
link.Address = "https://www.python.org"

# 內部鏈接
detail_sheet = workbook.Worksheets.Add("詳情頁")
target_cell = detail_sheet.Range["A3"]
target_cell.Text = "跳轉至詳情頁"
internal_link = sheet.HyperLinks.Add(sheet.Range[8, 1])
internal_link.Address = f"{detail_sheet.Name}!A1"

寫入結果預覽:

使用Python寫入超鏈接、圖片、公式到Excel文件

最佳實踐

  1. 資源管理:每次操作後調用 workbook.Dispose() 釋放非託管資源。
  2. 異常處理:在生產環境中應使用 try...except 捕獲文件 I/O 或權限錯誤。
  3. 性能考量:對大規模數據,優先使用 InsertArray 或區域批量賦值,避免逐單元格寫入。
  4. 路徑安全:確保輸出目錄存在且具有寫權限,圖片路徑應為絕對路徑或相對於執行環境的有效路徑。

結語

Free Spire.XLS for Python 提供了一套完整的 API,支持從基礎數據寫入到複雜格式控制的各類 Excel 操作。通過程序化方式處理 Excel 文件,可顯著提升數據處理效率,降低人工干預風險,適用於報表自動化、數據導出、系統集成等典型業務場景。合理結合其功能與工程實踐規範,可構建穩定、可維護的辦公自動化解決方案。更多使用 Python 操作 Excel 的技巧,請前往 Spire.XLS for Python 官方教程 查看。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.