在日常的數據分析與業務處理過程中,Excel 文件依然是最常用的數據存儲與展示工具。無論是銷售報表、財務明細還是庫存清單,Excel 都能直觀地展示數據。然而,在一些自動化場景下,我們希望能夠通過代碼生成 Excel 文件,並將其內容直接保存為字節串(byte stream)以便傳輸、存儲或進一步處理。這種方式特別適用於 Web 後端、雲存儲或者接口返回 Excel 文件的場景。
本文將詳細介紹如何使用 Free Spire.XLS for Python 創建 Excel 工作簿、寫入數據,並將生成的 Excel 文件保存到內存中的字節串。我們會通過一個銷售數據示例,從零開始講解整個流程。
通過 pip 安裝:
pip install spire.xls.free
1. 初始化工作簿並創建工作表
首先,我們需要創建一個新的 Excel 工作簿,並添加一個工作表來存放數據。為了保證表格整潔,默認生成的空工作表會被移除。
from spire.xls import Workbook
# 創建一個新的工作簿
workbook = Workbook()
# 移除默認創建的空工作表
workbook.Worksheets.Clear()
# 添加一個新的工作表,命名為“銷售數據”
sheet = workbook.Worksheets.Add("銷售數據")
説明:
Workbook 對象表示整個 Excel 文件,Worksheets.Add() 方法用於添加工作表,並可通過名稱區分不同表格。這樣,我們就可以在代碼中完全控制 Excel 文件的結構。
2. 寫入表頭與數據
接下來,我們在工作表中寫入表頭信息,並填充示例銷售數據。表頭信息包括“產品名稱”、“銷售額”和“銷售日期”。
# 寫入表頭
sheet.Range["A1"].Value = "產品名稱"
sheet.Range["B1"].Value = "銷售額"
sheet.Range["C1"].Value = "銷售日期"
# 示例數據
data = [
("筆記本電腦", 1200.50, "2023-10-01"),
("智能手機", 800.75, "2023-10-05"),
("平板電腦", 500.00, "2023-10-10"),
("顯示器", 300.20, "2023-10-15"),
("鍵盤", 75.99, "2023-10-20"),
]
# 寫入數據
for i, row_data in enumerate(data):
row_index = i + 2 # 從第二行開始寫入數據
sheet.Range[row_index, 1].Value = row_data[0] # 產品名稱
sheet.Range[row_index, 2].NumberValue = row_data[1] # 銷售額(數字類型)
sheet.Range[row_index, 3].Value = row_data[2] # 銷售日期
關鍵説明:
Range[row, col]用於獲取單元格位置,行列索引從 1 開始。NumberValue屬性確保數值類型的數據在 Excel 中可進行計算。- 使用
enumerate可以方便地循環填充數據,同時自動計算行索引。
3. 簡單格式設置
為了讓表格更美觀,我們可以設置表頭字體加粗,並讓列寬自適應內容。
# 設置表頭字體加粗
sheet.Range["A1:C1"].Style.Font.IsBold = True
# 自動調整列寬
sheet.AutoFitColumn(1)
sheet.AutoFitColumn(2)
sheet.AutoFitColumn(3)
説明:
通過 AutoFitColumn() 方法,列寬會根據內容自動調整,避免文字顯示不完整的問題;表頭加粗則讓數據更易區分。
4. 將 Excel 文件保存到字節串
在某些應用場景下,我們不希望直接生成文件,而是將 Excel 內容保存到內存中的字節串,以便後續操作或網絡傳輸。
import io
from spire.xls import FileFormat, Stream
# 創建 BytesIO 對象
excel_stream = io.BytesIO()
# 創建 Stream 對象
excelStream = Stream()
# 將工作簿保存到內存流中,格式為 XLSX(FileFormat.Version2016)
workbook.SaveToStream(excelStream, FileFormat.Version2013)
# 將內存流保存到文件用於測試
excelStream.Save("output/output.xlsx")
# 將內存流轉換為字節串
excel_stream.write(excelStream.ToArray())
# 獲取字節串
excel_bytes = excel_stream.getvalue()
# 釋放資源
workbook.Dispose()
excel_stream.close()
print(f"生成的Excel字節串長度: {len(excel_bytes)} 字節")
説明:
BytesIO提供了一個內存流,可以當作文件對象操作。Stream類是 Spire.XLS 提供的用於保存文件內容到內存流的類。SaveToStream()方法將工作簿內容寫入流中,FileFormat.Version2016表示保存為標準 XLSX 文件。excel_bytes即為完整的 Excel 文件內容,可直接用於 HTTP 返回、存儲數據庫或其他處理。
生成文件預覽:
總結
通過本文示例,我們展示瞭如何使用 Python 和 Spire.XLS 完整地生成 Excel 文件、寫入數據、進行基礎格式設置,並將文件內容保存為內存字節串。這種方法在 Web 後端、數據接口、自動報表生成等場景下非常實用,既避免了中間文件存儲,也提高了處理效率。
掌握 Workbook、Worksheet、Range 等核心類和屬性,能夠讓你輕鬆實現 Excel 自動化處理,減少人工操作,提高工作效率。同時,通過將 Excel 文件保存為字節串,還能滿足更復雜的業務需求,例如生成下載文件流、上傳雲端存儲或進行二進制處理。