使用Python實(shí)現(xiàn)寫入多類型數(shù)據(jù)至Excel文件
在數(shù)據(jù)驅(qū)動的工作流中,Microsoft Excel 作為廣泛使用的電子表格工具,常用于數(shù)據(jù)存儲、分析與報(bào)告生成。然而,手動維護(hù)和更新 Excel 文件不僅效率低下,還容易引入人為錯誤。在需要處理大規(guī)模數(shù)據(jù)、生成周期性報(bào)表或集成異構(gòu)系統(tǒng)輸出的場景下,自動化方案顯得尤為必要。
Python 憑借其豐富的生態(tài)系統(tǒng),在辦公自動化領(lǐng)域展現(xiàn)出顯著優(yōu)勢。本文將介紹如何使用 Free Spire.XLS for Python 庫,以程序化方式高效、可靠地將多種數(shù)據(jù)類型寫入 Excel 文件,并涵蓋格式設(shè)置、公式嵌入、圖片插入及超鏈接創(chuàng)建等高級功能。
環(huán)境配置與基礎(chǔ)用法
安裝依賴
確保系統(tǒng)已安裝 Python。通過 pip 安裝 Free Spire.XLS for Python:
pip install spire.xls.free
基本寫入示例
以下代碼演示了創(chuàng)建新工作簿、寫入單元格內(nèi)容、應(yīng)用格式并保存文件的完整流程:
from spire.xls import *
workbook = Workbook()
sheet = workbook.Worksheets.get_Item(0)
# 寫入文本
sheet.Range["B2"].Value = "Hello, Python & Excel!"
# 應(yīng)用格式
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()
寫入結(jié)果預(yù)覽:

關(guān)鍵對象說明:
Workbook:表示一個(gè) Excel 文件,可通過Workbook()創(chuàng)建工作簿,新建的 Excel 工作簿包含三個(gè)默認(rèn)工作表。Worksheet:通過Worksheets[index]訪問具體工作表。Range[cell_ref]:通過 A1 引用或行列索引訪問單元格。.Value、.NumberValue、.DateTimeValue、.BooleanValue:分別用于寫入不同類型的數(shù)據(jù)。.SaveToFile():持久化工作簿至指定路徑。.Dispose():顯式釋放底層資源,避免內(nèi)存泄漏。
多類型數(shù)據(jù)寫入實(shí)踐
文本與數(shù)值
字符串、整數(shù)和浮點(diǎn)數(shù)可直接賦值。對于數(shù)值類型,建議使用 NumberValue 屬性以確保正確識別為數(shù)字格式:
sheet.Range["A1"].Value = "產(chǎn)品名稱" sheet.Range["B1"].Value = "銷售額" sheet.Range["A2"].Value = "筆記本電腦" sheet.Range["B2"].NumberValue = 12000 sheet.Range["A3"].Value = "智能手機(jī)" sheet.Range["B3"].NumberValue = 8500.75
寫入結(jié)果預(yù)覽:

日期與時(shí)間
Spire.XLS 支持通過 DateTimeValue 寫入日期時(shí)間。需注意其內(nèi)部使用 spire.xls.common.DateTime 類型,而非 Python 原生 datetime:
from spire.xls.common import *
import datetime
# 寫入當(dāng)前 UTC 時(shí)間
sheet.Range["B1"].DateTimeValue = DateTime.get_UtcNow()
# 寫入指定日期
sheet.Range["B2"].DateTimeValue = DateTime.Parse("2023-05-01")
# 轉(zhuǎn)換 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)
# 設(shè)置顯示格式
sheet.Range["B1"].Style.NumberFormat = "yyyy-mm-dd hh:mm:ss"
sheet.Range.AutoFitColumns()
寫入結(jié)果預(yù)覽:

布爾值
布爾數(shù)據(jù)通過 BooleanValue 屬性寫入:
sheet.Range["B1"].BooleanValue = True sheet.Range["B2"].BooleanValue = False
寫入結(jié)果預(yù)覽:

列表與元組
批量寫入可通過 InsertArray 方法實(shí)現(xiàn)。該方法支持按行或按列插入一維數(shù)組:
header = ["ID", "姓名", "年齡"]
data = [[1, "張三", 30], [2, "李四", 25]]
# 寫入標(biāo)題(按行)
sheet.InsertArray(header, 1, 1, False)
# 逐行寫入數(shù)據(jù)
for i, row in enumerate(data, start=2):
for j, value in enumerate(row, start=1):
sheet.Range[i, j].Value = str(value)
寫入結(jié)果預(yù)覽:

注意:InsertArray 的第四個(gè)參數(shù) is_row 控制插入方向;False 表示按列插入(即橫向填充)。該方法僅支持同質(zhì)的一維數(shù)組(如全為字符串或數(shù)字)。當(dāng)列表包含多種類型(如整數(shù)、字符串、浮點(diǎn)數(shù)混合)時(shí),需通過循環(huán)逐項(xiàng)寫入,并根據(jù)目標(biāo)單元格的數(shù)據(jù)語義選擇適當(dāng)?shù)馁x值方式(例如使用 .Value = str(x) 統(tǒng)一轉(zhuǎn)為字符串,或分別使用 .NumberValue、.DateTimeValue 等屬性以保留類型信息)。
字典列表
將字典列表轉(zhuǎn)換為表格時(shí),通常以鍵作為列頭:
products = [
{"ID": "P001", "名稱": "鍵盤", "價(jià)格": 199},
{"ID": "P002", "名稱": "鼠標(biāo)", "價(jià)格": 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]
# 當(dāng)前版本需逐單元格賦值
for c_idx, val in enumerate(values, start=1):
sheet.Range[r_idx, c_idx].Value = str(val)
寫入結(jié)果預(yù)覽:

高級功能
公式寫入
Excel 公式可通過 Formula 屬性直接寫入,計(jì)算由 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") # 可選:調(diào)整尺寸與偏移 # pic = sheet.Pictures.Add(3, 1, "logo.png") # pic.Width, pic.Height = 100, 50
超鏈接創(chuàng)建
支持外部 URL 與內(nèi)部工作表跳轉(zhuǎn):
# 外部鏈接
cell = sheet.Range[7, 1]
cell.Text = "Python 官網(wǎng)"
link = sheet.HyperLinks.Add(cell)
link.Address = "https://www.python.org"
# 內(nèi)部鏈接
detail_sheet = workbook.Worksheets.Add("詳情頁")
target_cell = detail_sheet.Range["A3"]
target_cell.Text = "跳轉(zhuǎn)至詳情頁"
internal_link = sheet.HyperLinks.Add(sheet.Range[8, 1])
internal_link.Address = f"{detail_sheet.Name}!A1"
寫入結(jié)果預(yù)覽

最佳實(shí)踐
- 資源管理:每次操作后調(diào)用
workbook.Dispose()釋放非托管資源。 - 異常處理:在生產(chǎn)環(huán)境中應(yīng)使用
try...except捕獲文件 I/O 或權(quán)限錯誤。 - 性能考量:對大規(guī)模數(shù)據(jù),優(yōu)先使用
InsertArray或區(qū)域批量賦值,避免逐單元格寫入。 - 路徑安全:確保輸出目錄存在且具有寫權(quán)限,圖片路徑應(yīng)為絕對路徑或相對于執(zhí)行環(huán)境的有效路徑。
結(jié)語
Free Spire.XLS for Python 提供了一套完整的 API,支持從基礎(chǔ)數(shù)據(jù)寫入到復(fù)雜格式控制的各類 Excel 操作。通過程序化方式處理 Excel 文件,可顯著提升數(shù)據(jù)處理效率,降低人工干預(yù)風(fēng)險(xiǎn),適用于報(bào)表自動化、數(shù)據(jù)導(dǎo)出、系統(tǒng)集成等典型業(yè)務(wù)場景。合理結(jié)合其功能與工程實(shí)踐規(guī)范,可構(gòu)建穩(wěn)定、可維護(hù)的辦公自動化解決方案。
到此這篇關(guān)于使用Python實(shí)現(xiàn)寫入多類型數(shù)據(jù)至Excel文件的文章就介紹到這了,更多相關(guān)Python Excel數(shù)據(jù)寫入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python實(shí)現(xiàn)讀取文件夾里Excel文件里的數(shù)據(jù)
- 使用Python對Excel數(shù)據(jù)讀取與保存的全面指南
- Python自動化操作Excel生成專業(yè)數(shù)據(jù)透視表的實(shí)戰(zhàn)指南
- Python批量清洗Excel數(shù)據(jù)的操作指南(去重+補(bǔ)缺失值+可視化)
- Python實(shí)現(xiàn)Excel與TXT文本文件數(shù)據(jù)轉(zhuǎn)換的完整指南
- 使用Python自動化處理Excel的臟數(shù)據(jù)
- Python輕松實(shí)現(xiàn)查找高亮Excel指定數(shù)據(jù)
相關(guān)文章
對python同一個(gè)文件夾里面不同.py文件的交叉引用方法詳解
今天小編就為大家分享一篇對python同一個(gè)文件夾里面不同.py文件的交叉引用方法詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12
Python與C++中梯度方向直方圖的實(shí)現(xiàn)
在學(xué)習(xí)HOG特征的時(shí)候,發(fā)現(xiàn)一片英文文章講得淺顯易懂。因此翻譯在這里學(xué)習(xí),感興趣的朋友快來看看吧2022-03-03
opencv python 圖像去噪的實(shí)現(xiàn)方法
這篇文章主要介紹了opencv python 圖像去噪的實(shí)現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08
Python三元運(yùn)算與lambda表達(dá)式實(shí)例解析
這篇文章主要介紹了Python三元運(yùn)算與lambda表達(dá)式實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
用python實(shí)現(xiàn)各種數(shù)據(jù)結(jié)構(gòu)
這篇文章主要分享的是用python實(shí)現(xiàn)各種數(shù)據(jù)結(jié)構(gòu),快速排序、選擇排序、插入排序、歸并排序、堆排序heapq模塊等相關(guān)資料,感興趣的小伙伴可以參考一下2021-12-12
解決python cv2.imread 讀取中文路徑的圖片返回為None的問題
這篇文章主要介紹了解決python cv2.imread 讀取中文路徑的圖片返回為None的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06

