Python實(shí)現(xiàn)將列表導(dǎo)出為Excel文件
在 Python 數(shù)據(jù)處理場(chǎng)景中,將列表(List)數(shù)據(jù)導(dǎo)出為 Excel 文件是高頻需求(如數(shù)據(jù)報(bào)表、批量數(shù)據(jù)導(dǎo)出等)。相比于傳統(tǒng)的openpyxl、xlwt等庫,Free Spire.XLS for Python 是一款免費(fèi)的 Excel 處理庫,無需依賴 Microsoft Excel,支持完整的 Excel 文件創(chuàng)建、編輯和格式設(shè)置,尤其適合新手快速實(shí)現(xiàn)列表到 Excel 的轉(zhuǎn)換。
本文將從環(huán)境準(zhǔn)備、基礎(chǔ)示例到進(jìn)階優(yōu)化演示如何用 Free Spire.XLS for Python 實(shí)現(xiàn)列表轉(zhuǎn) Excel,覆蓋以下核心場(chǎng)景:
- 基礎(chǔ)實(shí)戰(zhàn):導(dǎo)出一維列表到 Excel(單列)
- 進(jìn)階實(shí)戰(zhàn):導(dǎo)出二維列表到 Excel(帶表頭)
- 實(shí)戰(zhàn)拓展:導(dǎo)出字典列表到 Excel(貼合業(yè)務(wù)場(chǎng)景)
1. 安裝免費(fèi)庫
Free Spire.XLS for Python 支持 Python 3.6 及以上版本,通過 pip即可安裝:
pip install Spire.XLS.Free
2. 基礎(chǔ)實(shí)戰(zhàn):導(dǎo)出一維列表到 Excel(單列)
實(shí)現(xiàn)思路
- 創(chuàng)建空白工作簿,獲取默認(rèn)工作表;
- 遍歷一維列表,將每個(gè)元素寫入 Excel 的指定列(如A列);
- 保存 Excel 文件并釋放資源。
Python 代碼
from spire.xls import *
from spire.xls.common import *
# 定義要轉(zhuǎn)換的一維列表
one_dimensional_list = ["Python", "Java", "C++", "JavaScript", "Go"]
# 1. 創(chuàng)建工作簿對(duì)象
workbook = Workbook()
# 2. 獲取第一個(gè)工作表(默認(rèn)創(chuàng)建)
worksheet = workbook.Worksheets[0]
# 3. 設(shè)置工作表名稱
worksheet.Name = "編程語言列表"
# 4. 遍歷列表,寫入Excel(從第1行第1列開始)
for index, value in enumerate(one_dimensional_list):
# 行號(hào)從1開始
row = index + 1
# 寫入A列(第1列)
worksheet.Range[row, 1].Text = value
# 5. 保存Excel文件(支持.xlsx/.xls/.xlsm等格式)
output_path = "一維列表轉(zhuǎn)Excel.xlsx"
workbook.SaveToFile(output_path, FileFormat.Version2016)
# 6. 釋放資源(重要,避免內(nèi)存泄漏)
workbook.Dispose()
print(f"一維列表已成功導(dǎo)出到:{output_path}")
代碼解析
Workbook():創(chuàng)建 Excel 工作簿對(duì)象,相當(dāng)于新建一個(gè) Excel 文件;Worksheets[0]:獲取工作簿中第一個(gè)工作表(索引從0開始);Range[row, col]:定位 Excel 單元格,行/列號(hào)均從1開始;Text:設(shè)置單元格的文本內(nèi)容;SaveToFile():保存文件,第二個(gè)參數(shù)指定Excel版本;Dispose():釋放工作簿資源,避免占用內(nèi)存。
效果圖:

3. 進(jìn)階實(shí)戰(zhàn):導(dǎo)出二維列表到 Excel(帶表頭)
實(shí)現(xiàn)思路
- 定義二維列表(包含表頭和數(shù)據(jù));
- 先寫入表頭行,再遍歷數(shù)據(jù)行逐行寫入;
- 可選:設(shè)置表頭樣式(加粗、居中)提升可讀性。
完整代碼
from spire.xls import *
from spire.xls.common import *
# 定義二維列表(表頭+數(shù)據(jù))
two_dimensional_list = [
["姓名", "年齡", "城市", "職業(yè)"], # 表頭
["張三", 28, "北京", "工程師"],
["李四", 32, "上海", "產(chǎn)品經(jīng)理"],
["王五", 25, "廣州", "設(shè)計(jì)師"],
["趙六", 30, "深圳", "開發(fā)工程師"]
]
# 1. 創(chuàng)建工作簿
workbook = Workbook()
worksheet = workbook.Worksheets[0]
worksheet.Name = "人員信息表"
# 2. 遍歷二維列表,逐行寫入Excel
for row_index, row_data in enumerate(two_dimensional_list):
# Excel行號(hào)從1開始
current_row = row_index + 1
for col_index, cell_value in enumerate(row_data):
# Excel列號(hào)從1開始
current_col = col_index + 1
# 寫入單元格內(nèi)容
worksheet.Range[current_row, current_col].Text = str(cell_value)
# 3. 優(yōu)化表頭樣式(加粗、居中)
if current_row == 1:
worksheet.Range[current_row, current_col].Style.Font.IsBold = True
worksheet.Range[current_row, current_col].Style.HorizontalAlignment = HorizontalAlignType.Center
# 4. 自動(dòng)調(diào)整列寬(適配內(nèi)容長(zhǎng)度)
worksheet.AllocatedRange.AutoFitColumns()
# 5. 保存文件
output_path = "二維列表轉(zhuǎn)Excel.xlsx"
workbook.SaveToFile(output_path, FileFormat.Version2016)
workbook.Dispose()
print(f"二維列表已成功導(dǎo)出到:{output_path}")
代碼解析
- 二維列表遍歷:外層循環(huán)控制行,內(nèi)層循環(huán)控制列,實(shí)現(xiàn)“逐行逐列”寫入;
- 表頭樣式優(yōu)化:通過
IsBold = True設(shè)置加粗,HorizontalAlignType.Center設(shè)置水平居中; AllocatedRange.AutoFitColumns():自動(dòng)調(diào)整列寬,避免內(nèi)容被截?cái)啵?/li>- 數(shù)據(jù)類型轉(zhuǎn)換:
str(cell_value)確保數(shù)字、字符串等類型統(tǒng)一寫入,避免類型報(bào)錯(cuò)。
效果圖:

4. 實(shí)戰(zhàn)拓展:導(dǎo)出字典列表到 Excel(貼合業(yè)務(wù)場(chǎng)景)
字典列表是 Python 業(yè)務(wù)開發(fā)中最常用的數(shù)據(jù)格式(如從數(shù)據(jù)庫/接口獲取的結(jié)構(gòu)化數(shù)據(jù)),每個(gè)字典代表一行數(shù)據(jù),字典的鍵對(duì)應(yīng)Excel表頭,值對(duì)應(yīng)單元格數(shù)據(jù)。以下是完整實(shí)現(xiàn)方案。
實(shí)現(xiàn)思路
- 定義字典列表(每個(gè)字典的鍵為字段名,值為字段值);
- 提取字典的鍵作為 Excel 表頭(需確保字典鍵一致,或兼容鍵缺失場(chǎng)景);
- 先寫入表頭行并設(shè)置樣式,再遍歷字典列表,按表頭順序提取值寫入單元格;
- 自動(dòng)調(diào)整列寬,提升 Excel 可讀性。
完整代碼
from spire.xls import *
from spire.xls.common import *
# 定義字典列表(模擬業(yè)務(wù)場(chǎng)景:從接口/數(shù)據(jù)庫獲取的用戶數(shù)據(jù))
dict_list = [
{"用戶ID": 1001, "姓名": "張三", "年齡": 28, "城市": "北京", "注冊(cè)時(shí)間": "2024-01-15"},
{"用戶ID": 1002, "姓名": "李四", "年齡": 32, "城市": "上海", "注冊(cè)時(shí)間": "2024-02-20"},
{"用戶ID": 1003, "姓名": "王五", "年齡": 25, "城市": "廣州", "注冊(cè)時(shí)間": "2024-03-10"},
{"用戶ID": 1004, "姓名": "趙六", "年齡": 30, "城市": "深圳", "注冊(cè)時(shí)間": "2024-04-05"}
]
# 1. 創(chuàng)建工作簿和工作表
workbook = Workbook()
worksheet = workbook.Worksheets[0]
worksheet.Name = "用戶信息表(字典列表)"
# 2. 提取表頭(字典的鍵)
if not dict_list:
print("字典列表為空,無需導(dǎo)出!")
workbook.Dispose()
exit()
# 以第一個(gè)字典的鍵作為表頭(確保所有字典鍵一致,或參考下方注意事項(xiàng)處理)
headers = list(dict_list[0].keys())
# 3. 寫入表頭行并設(shè)置樣式
for col_index, header in enumerate(headers):
current_col = col_index + 1
# 寫入表頭文本
worksheet.Range[1, current_col].Text = header
# 4. 遍歷字典列表,寫入數(shù)據(jù)行
for row_idx, data_dict in enumerate(dict_list):
current_row = row_idx + 2 # 表頭占第1行,數(shù)據(jù)從第2行開始
for col_idx, header in enumerate(headers):
current_col = col_idx + 1
# 提取字典值(用get方法兼容鍵缺失場(chǎng)景,避免KeyError)
cell_value = data_dict.get(header, "")
# 寫入單元格(統(tǒng)一轉(zhuǎn)字符串,避免類型報(bào)錯(cuò))
worksheet.Range[current_row, current_col].Text = str(cell_value)
# 5. 自動(dòng)調(diào)整列寬(適配內(nèi)容長(zhǎng)度)
worksheet.AllocatedRange.AutoFitColumns()
# 6. 保存Excel文件
output_path = "字典列表轉(zhuǎn)Excel.xlsx"
workbook.SaveToFile(output_path, FileFormat.Version2016)
# 7. 釋放資源
workbook.Dispose()
print(f"字典列表已成功導(dǎo)出到:{output_path}")
代碼解析
- 表頭提取:
list(dict_list[0].keys())從第一個(gè)字典中提取所有鍵作為 Excel 表頭,是業(yè)務(wù)場(chǎng)景中最常用的方式; - 兼容鍵缺失:
data_dict.get(header, "")替代直接取值data_dict[header],若某個(gè)字典缺失指定鍵,會(huì)填充空字符串,避免KeyError報(bào)錯(cuò); - 行號(hào)計(jì)算:數(shù)據(jù)行從第2行開始(
current_row = row_idx + 2),因?yàn)榈?行已寫入表頭;
效果圖:

5. 常見問題與注意事項(xiàng)
免費(fèi)版限制:Free Spire.XLS for Python 在讀寫 .xls 格式的 Excel 文檔時(shí),有每個(gè)文檔 5 個(gè)工作表,每個(gè)工作表 200 行的限制。讀寫 .xlsx 格式的 Excel 文檔時(shí)沒有任何限制;
中文亂碼問題:若導(dǎo)出的Excel出現(xiàn)中文亂碼,需確保代碼文件編碼為 UTF-8,且寫入時(shí)直接使用字符串(無需額外轉(zhuǎn)碼);
資源釋放:務(wù)必調(diào)用 Dispose() 釋放工作簿資源,否則可能導(dǎo)致文件被占用(無法刪除/修改);
文件格式:FileFormat.Version2016 對(duì)應(yīng).xlsx格式,FileFormat.Excel97to2003 對(duì)應(yīng).xls格式(兼容舊版Excel);
字典列表兼容:若字典鍵不一致,優(yōu)先提取所有唯一鍵作為表頭,并用get方法取值避免報(bào)錯(cuò)。
# 提取所有唯一鍵作為表頭
all_headers = set()
for d in dict_list:
all_headers.update(d.keys())
headers = sorted(list(all_headers)) # 排序保證表頭順序固定
以上就是Python實(shí)現(xiàn)將列表導(dǎo)出為Excel文件的詳細(xì)內(nèi)容,更多關(guān)于Python列表導(dǎo)出為Excel的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python結(jié)合moviepy和tkinter自制音視頻轉(zhuǎn)字幕工具
在多媒體內(nèi)容爆炸的時(shí)代,為音視頻添加字幕成為提升內(nèi)容可訪問性、傳播效率的重要手段,本文將使用Python自制一個(gè)音視頻轉(zhuǎn)字幕工具,感興趣的小伙伴可以了解下2025-12-12
Python+pyqt5實(shí)現(xiàn)一個(gè)圖像變形工具
FacePrank?是一個(gè)功能強(qiáng)大的圖像變形工具,使用Python和PyQt5開發(fā),下面小編就為大家介紹一下如何編寫一個(gè)圖像變形工具,實(shí)現(xiàn)捏臉效果吧2025-11-11
Python使用QRCode模塊生成二維碼實(shí)例詳解
這篇文章主要介紹了Python使用QRCode模塊生成二維碼實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-06-06
基于python實(shí)現(xiàn)Pycharm斷點(diǎn)調(diào)試
這篇文章主要介紹了基于python實(shí)現(xiàn)Pycharm斷點(diǎn)調(diào)試,在我們寫程序的時(shí)候,很容易遇到各種各樣的bug,然后編譯器提示程序出錯(cuò)的地方。很多時(shí)候可以通過提示的信息修改程序,但是有時(shí)我們想得到更多的信息,這個(gè)時(shí)候就需要進(jìn)行斷點(diǎn)調(diào)試,下面我們就一起來學(xué)習(xí)ycharm斷點(diǎn)調(diào)試2022-02-02
pandas把dataframe轉(zhuǎn)成Series,改變列中值的類型方法
下面小編就為大家分享一篇pandas把dataframe轉(zhuǎn)成Series,改變列中值的類型方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04
Python使用Pandas處理.xlsx文件的詳細(xì)教程
這篇文章主要介紹了如何使用Pandas庫處理.xlsx文件,包括環(huán)境配置、讀取、寫入、數(shù)據(jù)操作和高級(jí)操作,Pandas提供了豐富的功能,使得數(shù)據(jù)處理變得簡(jiǎn)單高效,需要的朋友可以參考下2025-02-02

