Python高效實(shí)現(xiàn)CSV數(shù)據(jù)轉(zhuǎn)換為規(guī)范的Excel文件
在當(dāng)今數(shù)據(jù)驅(qū)動(dòng)的世界中,CSV(逗號(hào)分隔值)和Excel(電子表格)是兩種最常見(jiàn)的數(shù)據(jù)存儲(chǔ)和交換格式。CSV以其簡(jiǎn)潔和通用性而聞名,而Excel則以其強(qiáng)大的數(shù)據(jù)組織、分析和可視化功能深受用戶喜愛(ài)。然而,手動(dòng)將CSV數(shù)據(jù)導(dǎo)入Excel并進(jìn)行格式化,往往是一項(xiàng)耗時(shí)且容易出錯(cuò)的任務(wù),尤其當(dāng)數(shù)據(jù)量龐大或需要頻繁操作時(shí)。
幸運(yùn)的是,Python作為一種功能強(qiáng)大的編程語(yǔ)言,為我們提供了自動(dòng)化這一過(guò)程的完美解決方案。本文將深入探討如何使用一個(gè)強(qiáng)大的Python庫(kù),將CSV文件高效地轉(zhuǎn)換為結(jié)構(gòu)化且美觀的Excel文件,并詳細(xì)講解如何應(yīng)用各種Excel樣式,從而極大地提升你的數(shù)據(jù)處理效率和專業(yè)性。
環(huán)境準(zhǔn)備與基礎(chǔ)轉(zhuǎn)換
在開(kāi)始之前,我們首先需要安裝本文將使用的核心庫(kù)。這個(gè)庫(kù)提供了一系列API,能夠輕松地操作Excel文件。
安裝必要的庫(kù)
打開(kāi)你的終端或命令提示符,運(yùn)行以下命令來(lái)安裝所需的庫(kù):
pip install Spire.XLS
安裝完成后,我們就可以開(kāi)始編寫代碼了。
基礎(chǔ)CSV轉(zhuǎn)Excel
最基本的任務(wù)是將CSV文件的內(nèi)容原封不動(dòng)地導(dǎo)入到Excel中。以下代碼展示了如何實(shí)現(xiàn)這一功能:
from spire.xls import *
# 輸入CSV文件路徑
input_csv_file = "data.csv"
# 輸出Excel文件路徑
output_excel_file = "output.xlsx"
# data.csv內(nèi)容如下:
# Name,Age,City
# Alice,30,New York
# Bob,24,London
# Charlie,35,Paris
# 創(chuàng)建一個(gè)Workbook對(duì)象
workbook = Workbook()
# 從CSV文件加載數(shù)據(jù)。
# 第二個(gè)參數(shù)是分隔符(這里是逗號(hào)),第三個(gè)和第四個(gè)參數(shù)是起始行和列索引。
workbook.LoadFromFile(input_csv_file, ",", 1, 1)
# 獲取第一個(gè)工作表
sheet = workbook.Worksheets[0]
# 自動(dòng)調(diào)整列寬以適應(yīng)內(nèi)容
sheet.AllocatedRange.AutoFitColumns()
# 將Workbook保存為Excel文件
workbook.SaveToFile(output_excel_file, ExcelVersion.Version2016)
print(f"CSV文件 '{input_csv_file}' 已成功轉(zhuǎn)換為 Excel文件 '{output_excel_file}'。")
轉(zhuǎn)換結(jié)果預(yù)覽:

這段代碼首先創(chuàng)建了一個(gè)Workbook對(duì)象,然后使用LoadFromFile方法將CSV數(shù)據(jù)加載到工作簿的第一個(gè)工作表中。AutoFitColumns()方法則確保了所有列寬都能自動(dòng)適應(yīng)其內(nèi)容,提高了可讀性。最后,通過(guò)SaveToFile方法將結(jié)果保存為.xlsx格式的Excel文件。
深入Excel樣式設(shè)置
僅僅轉(zhuǎn)換格式是不夠的,Excel的強(qiáng)大之處在于其豐富的樣式設(shè)置。通過(guò)Python,我們可以精細(xì)控制單元格的字體、顏色、邊框、對(duì)齊方式等,使數(shù)據(jù)呈現(xiàn)更加專業(yè)和直觀。
字體樣式
我們可以設(shè)置字體名稱、大小、是否粗體、斜體、下劃線以及顏色。
# 假設(shè)workbook和sheet已從CSV加載
# workbook = Workbook()
# workbook.LoadFromFile(input_csv_file, ",", 1, 1)
# sheet = workbook.Worksheets[0]
# 獲取A1單元格的樣式
cell_style = sheet.Range["A1"].Style
# 設(shè)置字體名稱和大小
cell_style.Font.FontName = "Arial"
cell_style.Font.Size = 14
# 設(shè)置粗體、斜體和下劃線
cell_style.Font.IsBold = True
cell_style.Font.IsItalic = True
cell_style.Font.Underline = UnderlineStyleType.Single
# 設(shè)置字體顏色為藍(lán)色
cell_style.Font.Color = Color.get_Blue()
# 將樣式應(yīng)用回單元格
sheet.Range["A1"].Style = cell_style
# 保存文件以查看效果
# workbook.SaveToFile("styled_output.xlsx", ExcelVersion.Version2016)
背景與邊框
背景色和邊框能有效區(qū)分?jǐn)?shù)據(jù)區(qū)域,增強(qiáng)視覺(jué)效果。
# 設(shè)置B2單元格的背景色為淺黃色 sheet.Range["B2"].Style.KnownColor = ExcelKnownColors.LightYellow # 設(shè)置C3單元格的邊框 border_style = sheet.Range["C3"].Style.Borders border_style[BordersLineType.EdgeLeft].LineStyle = LineStyleType.Thick border_style[BordersLineType.EdgeLeft].Color = Color.get_Red() border_style[BordersLineType.EdgeRight].LineStyle = LineStyleType.Medium border_style[BordersLineType.EdgeRight].Color = Color.get_Green() border_style[BordersLineType.EdgeTop].LineStyle = LineStyleType.Dashed border_style[BordersLineType.EdgeTop].Color = Color.get_Blue() border_style[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Double border_style[BordersLineType.EdgeBottom].Color = Color.get_Purple() # 也可以設(shè)置整個(gè)區(qū)域的邊框 sheet.Range["A1:C3"].Style.Borders.LineStyle = LineStyleType.Thin sheet.Range["A1:C3"].Style.Borders.Color = Color.get_Black()
對(duì)齊方式
良好的對(duì)齊方式可以提升表格的整潔度。
# 設(shè)置D4單元格水平居中,垂直居中 sheet.Range["D4"].Style.HorizontalAlignment = HorizontalAlignType.Center sheet.Range["D4"].Style.VerticalAlignment = VerticalAlignType.Center # 文本自動(dòng)換行 sheet.Range["E5"].Style.WrapText = True sheet.Range["E5"].ColumnWidth = 15 # 確保列寬足夠觸發(fā)換行 sheet.Range["E5"].Text = "這是一個(gè)很長(zhǎng)的文本,需要自動(dòng)換行才能完整顯示。" # 設(shè)置F6單元格左對(duì)齊并縮進(jìn)1格 sheet.Range["F6"].Style.HorizontalAlignment = HorizontalAlignType.Left sheet.Range["F6"].Style.IndentLevel = 1
數(shù)字格式
針對(duì)數(shù)字、日期等數(shù)據(jù),設(shè)置正確的格式至關(guān)重要。
# 設(shè)置G7單元格為貨幣格式(美元) sheet.Range["G7"].NumberFormat = "$#,##0.00" sheet.Range["G7"].Value = "12345.678" # 設(shè)置H8單元格為百分比格式 sheet.Range["H8"].NumberFormat = "0.00%" sheet.Range["H8"].Value = "0.75" # 設(shè)置I9單元格為日期格式 sheet.Range["I9"].NumberFormat = "yyyy-mm-dd" sheet.Range["I9"].Value = "2023-10-26" # 也可以是DateTime對(duì)象
列寬與行高
自動(dòng)或手動(dòng)調(diào)整列寬和行高,以優(yōu)化內(nèi)容顯示。
# 自動(dòng)調(diào)整所有已用列的寬度(在基礎(chǔ)轉(zhuǎn)換中已演示) # sheet.AllocatedRange.AutoFitColumns() # 手動(dòng)設(shè)置第一列的寬度為20個(gè)字符 sheet.Columns[0].ColumnWidth = 20 # 手動(dòng)設(shè)置第二行的行高為30磅 sheet.Rows[1].RowHeight = 30
合并單元格
合并單元格常用于創(chuàng)建標(biāo)題或分組信息。
# 合并A10到C10的單元格 sheet.Range["A10:C10"].Merge() sheet.Range["A10"].Text = "這是合并后的標(biāo)題" sheet.Range["A10"].Style.HorizontalAlignment = HorizontalAlignType.Center sheet.Range["A10"].Style.VerticalAlignment = VerticalAlignType.Center
高級(jí)樣式與實(shí)用技巧
除了上述基礎(chǔ)樣式,我們還可以實(shí)現(xiàn)一些更高級(jí)的功能。
條件格式
條件格式允許你根據(jù)單元格的值自動(dòng)應(yīng)用樣式。
# 為A列設(shè)置條件格式:如果值大于50,則背景色為紅色 conditional_format = sheet.Range["A:A"].ConditionalFormats.AddCondition() conditional_format.FormatType = ConditionalFormatType.CellValue conditional_format.Operator = ComparisonOperatorType.GreaterThan conditional_format.Formula1 = "50" conditional_format.BackColor = Color.get_Red()
添加工作表與命名
一個(gè)Excel文件可以包含多個(gè)工作表。
# 添加一個(gè)新的工作表
new_sheet = workbook.Worksheets.Add("Summary Data")
# 也可以重命名現(xiàn)有工作表
sheet.Name = "Raw Data"
綜合示例代碼
將上述樣式設(shè)置整合到一個(gè)完整的示例中:
from spire.xls import *
input_csv_file = "G:/Documents/data_with_headers.csv"
output_excel_file = "styled_data_report.xlsx"
# data_with_headers.csv 內(nèi)容如下:
# Product,Sales,Region,Date
# Laptop,1200,East,2023-01-15
# Mouse,80,West,2023-01-20
# Keyboard,150,East,2023-02-01
# Monitor,600,South,2023-02-10
# Webcam,45,North,2023-03-05
workbook = Workbook()
workbook.LoadFromFile(input_csv_file, ",", 1, 1)
sheet = workbook.Worksheets[0]
sheet.Name = "銷售數(shù)據(jù)"
# 設(shè)置標(biāo)題行樣式 (第一行)
header_style = sheet.Range["A1:D1"].Style
header_style.Font.IsBold = True
header_style.Font.Size = 12
header_style.Font.Color = Color.get_White()
header_style.KnownColor = ExcelColors.DarkBlue
header_style.HorizontalAlignment = HorizontalAlignType.Center
header_style.VerticalAlignment = VerticalAlignType.Center
header_style.Borders[BordersLineType.EdgeBottom].LineStyle = LineStyleType.Thin
header_style.Borders[BordersLineType.EdgeBottom].Color = Color.get_White()
# 設(shè)置銷售額列(B列)為貨幣格式
sheet.Range[f"B2:B{sheet.Rows.Count}"].NumberFormat = "$#,##0.00"
# 也可以用:
#sheet.Range[2, 2, sheet.Rows.Count, 3].NumberFormat = "$#,##0.00"
# 設(shè)置日期列(D列)為日期格式
sheet.Range[f"D2:D{sheet.Rows.Count}"].NumberFormat = "yyyy/mm/dd"
# 自動(dòng)調(diào)整所有列寬和行高
sheet.AllocatedRange.AutoFitColumns()
sheet.AllocatedRange.AutoFitRows()
# 添加一個(gè)新工作表作為摘要
summary_sheet = workbook.Worksheets.Add("數(shù)據(jù)摘要")
summary_sheet.Range["A1"].Text = "銷售數(shù)據(jù)分析報(bào)告"
summary_sheet.Range["A1"].Style.Font.IsBold = True
summary_sheet.Range["A1"].Style.Font.Size = 16
summary_sheet.Range["A1"].Style.HorizontalAlignment = HorizontalAlignType.Center
summary_sheet.Range["A1:C1"].Merge() # 合并標(biāo)題單元格
summary_sheet.AllocatedRange.AutoFitColumns()
summary_sheet.AllocatedRange.AutoFitRows()
# 保存最終的Excel文件
workbook.SaveToFile(output_excel_file, ExcelVersion.Version2016)
print(f"CSV文件 '{input_csv_file}' 已成功轉(zhuǎn)換為并美化為 Excel文件 '{output_excel_file}'。")
輸出結(jié)果預(yù)覽:

結(jié)論
通過(guò)本文的詳細(xì)講解和豐富的代碼示例,我們看到了如何利用Python及其強(qiáng)大的庫(kù),將枯燥的CSV數(shù)據(jù)轉(zhuǎn)換為美觀、結(jié)構(gòu)化的Excel報(bào)告。從基礎(chǔ)的數(shù)據(jù)導(dǎo)入到復(fù)雜的樣式設(shè)置,包括字體、顏色、邊框、對(duì)齊、數(shù)字格式、列寬自適應(yīng)乃至條件格式,Python都提供了直觀且高效的API。掌握這些技能,你將能夠自動(dòng)化日常的數(shù)據(jù)處理任務(wù),擺脫重復(fù)性勞動(dòng),大幅提升工作效率,并以更專業(yè)的方式呈現(xiàn)數(shù)據(jù)。
以上就是Python高效實(shí)現(xiàn)CSV數(shù)據(jù)轉(zhuǎn)換為規(guī)范的Excel文件的詳細(xì)內(nèi)容,更多關(guān)于Python CSV數(shù)據(jù)轉(zhuǎn)Excel的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Python實(shí)現(xiàn)Excel轉(zhuǎn)CSV高效轉(zhuǎn)換的實(shí)戰(zhàn)指南
- Python使用Spire.XLS for Python高效實(shí)現(xiàn)Excel與CSV互轉(zhuǎn)
- Python將CSV轉(zhuǎn)換為Excel的高效方案
- Python自動(dòng)化實(shí)現(xiàn)Excel文件與CSV文件的互相轉(zhuǎn)換
- Python實(shí)現(xiàn)批量CSV轉(zhuǎn)Excel的高性能處理方案
- Python實(shí)現(xiàn)將CSV轉(zhuǎn)換為帶格式的Excel
- python使用pandas實(shí)現(xiàn)Excel轉(zhuǎn)換為CSV文件
相關(guān)文章
Softmax函數(shù)原理及Python實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Softmax函數(shù)原理及Python實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
citespace數(shù)據(jù)處理:用python對(duì)Ref文檔進(jìn)行去重方式
這篇文章主要介紹了citespace數(shù)據(jù)處理:用python對(duì)Ref文檔進(jìn)行去重方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
聊聊通過(guò)celery_one避免Celery定時(shí)任務(wù)重復(fù)執(zhí)行的問(wèn)題
Celery Once 也是利用 Redis 加鎖來(lái)實(shí)現(xiàn), Celery Once 在 Task 類基礎(chǔ)上實(shí)現(xiàn)了 QueueOnce 類,該類提供了任務(wù)去重的功能,今天通過(guò)本文給大家介紹通過(guò)celery_one避免Celery定時(shí)任務(wù)重復(fù)執(zhí)行的問(wèn)題,感興趣的朋友一起看看吧2021-10-10
Python實(shí)現(xiàn)Excel表格數(shù)據(jù)讀取及轉(zhuǎn)換保存
本文介紹了一個(gè)Python實(shí)現(xiàn)的Excel表格數(shù)據(jù)轉(zhuǎn)換工具,使用tkinter構(gòu)建GUI界面,支持讀取.xls/.xlsx文件并顯示在文本框中,同時(shí)允許用戶編輯后導(dǎo)出為.txt或.xlsx格式,有需要的可以了解下2026-06-06
Python wxauto 庫(kù)解鎖微信自動(dòng)化的無(wú)限可能(示例代碼)
wxauto庫(kù)是基于Python的一個(gè)自動(dòng)化工具,它主要用于操作和自動(dòng)化WxPython應(yīng)用程序,這篇文章主要介紹了Python wxauto 庫(kù)解鎖微信自動(dòng)化的無(wú)限可能,需要的朋友可以參考下2024-07-07
Python中字符串的基礎(chǔ)介紹及常用操作總結(jié)
字符串輸出格式與輸入的樣子相同,都是用撇號(hào)包裹,撇號(hào)和其它特殊字符用用反斜杠轉(zhuǎn)義。如果字符串中有單撇號(hào)而沒(méi)有雙撇號(hào)則用雙撇號(hào)包裹,否則應(yīng)該用單撇號(hào)包裹。后面要介紹的print語(yǔ)句可以不帶撇號(hào)或轉(zhuǎn)義輸出字符串2021-09-09

