使用Python讀取Excel數(shù)據(jù)并寫入到CSV、XML和文本
前言
Excel工作簿是常用的表格格式,許多數(shù)據(jù)呈現(xiàn)、數(shù)據(jù)分析和數(shù)據(jù)匯報(bào)都是以Excel工作表的形式進(jìn)行。然而,在實(shí)際的數(shù)據(jù)管理、分析或自動(dòng)化流程構(gòu)建過程中,我們常常需要將這些Excel中的數(shù)據(jù)遷移至更其他數(shù)據(jù)系統(tǒng),或者以文本形式存儲(chǔ)以便與其他程序進(jìn)行交互。Python作為一種強(qiáng)大且靈活的編程語言,能夠高效地實(shí)現(xiàn)這一目標(biāo)。本文將演示如何運(yùn)用Python編程語言,將Excel工作表中的豐富數(shù)據(jù)導(dǎo)入到CSV、XML或文本中,我們也可以使用文中的方法讀取數(shù)據(jù)并寫入到其他文件或數(shù)據(jù)系統(tǒng)中。
本文所使用的方法需要用到Spire.XLS for Python,可從官網(wǎng)獲取或通過PyPI:pip install Spire.XLS。
示例Excel文件

直接將Excel工作表轉(zhuǎn)換為CSV
使用此API,我們可以直接獲取指定工作表并轉(zhuǎn)換為CSV文件。以下是操作步驟:
- 導(dǎo)入所需模塊。
- 創(chuàng)建
Workbook類的對(duì)象wb。 - 使用
wb.LoadFromFile()方法加載指定路徑下的Excel文件。 - 獲取指定索引位置處的工作表
ws。 - 使用
Worksheet.SaveToFile(string fileName, string Separator, Encoding)方法將工作表轉(zhuǎn)換為CSV文件并保存。 - 釋放資源。
代碼示例
from spire.xls import *
from spire.xls.common import *
# 創(chuàng)建 Workbook 對(duì)象
wb = Workbook()
# 加載 Excel 文件
wb.LoadFromFile("示例.xlsx")
# 獲取工作表
ws = wb.Worksheets.get_Item(0)
# 將工作表保存為 CSV 文件
ws.SaveToFile(f"output/{ws.Name}.csv", ",", Encoding.get_UTF8())
wb.Dispose()
提取結(jié)果

讀取Excel工作表數(shù)據(jù)保存到CSV
除了直接轉(zhuǎn)換外,我們還可以直接讀取指定單元格范圍的數(shù)據(jù),并寫入CSV文件,來實(shí)現(xiàn)自定義的數(shù)據(jù)提取。以下是操作步驟:
- 導(dǎo)入所需模塊。
- 創(chuàng)建
Workbook類的對(duì)象wb。 - 使用
wb.LoadFromFile()方法加載指定路徑下的Excel文件。 - 獲取指定索引位置處的工作表
ws。 - 確定工作表的已使用范圍(即有數(shù)據(jù)的部分)作為
usedRange。 - 遍歷
usedRange中的每一行和每一列:- 獲取單元格的值,并對(duì)包含逗號(hào)的字符串單元格值添加雙引號(hào)。
- 將處理過的單元格值添加到
rowData列表中。
- 對(duì)每一行的
rowData列表進(jìn)行處理,將其轉(zhuǎn)換為逗號(hào)分隔的字符串,并在末尾添加換行符,然后將結(jié)果追加到data字符串中。 - 打開一個(gè)CSV文件(以當(dāng)前工作表名稱命名),以寫模式和UTF-8編碼將
data字符串內(nèi)容寫入該文件。 - 使用
wb.Dispose()方法釋放資源,清理內(nèi)存。
代碼示例
from spire.xls import *
from spire.xls.common import *
# 創(chuàng)建 Workbook 對(duì)象
wb = Workbook()
# 加載 Excel 文件
wb.LoadFromFile("示例.xlsx")
# 獲取工作表
ws = wb.Worksheets.get_Item(0)
# 獲取已使用的區(qū)域
usedRange = ws.AllocatedRange
data = ""
# 遍歷已使用的區(qū)域
for i in range(1, usedRange.Rows.Count):
rowData = []
for j in range(len(usedRange.Rows.get_Item(i).Columns)):
# 獲取單元格的值
cellValue = usedRange[i + 1, j + 1].Value
# 對(duì)包含逗號(hào)的數(shù)據(jù)添加引號(hào)
if isinstance(cellValue, str) and ',' in cellValue:
cellValue = f'"{cellValue}"'
rowData.append(cellValue)
data += ','.join(rowData) + '\n'
# 將數(shù)據(jù)寫入 CSV 文件
with open(f"output/CSV/{ws.Name}.csv", "w", encoding='utf-8') as f:
f.write(data)
wb.Dispose()
提取效果

將Excel工作簿轉(zhuǎn)換為OpenXML
使用 Workbook 類的 SaveAsXml 方法可以直接將一個(gè)工作簿轉(zhuǎn)換為Open XML文件。以下是操作步驟:
- 導(dǎo)入所需模塊。
- 創(chuàng)建
Workbook類的對(duì)象wb。 - 使用
wb.LoadFromFile()方法加載指定路徑下的Excel文件。 - 使用
Workbook.SaveAsXml()方法將工作簿轉(zhuǎn)換為Open XML文件并保存。 - 釋放資源。
代碼示例
from spire.xls import *
from spire.xls.common import *
# 創(chuàng)建 Workbook 對(duì)象
wb = Workbook()
# 加載 Excel 文件
wb.LoadFromFile("示例.xlsx")
# 保存為 OpenXML 文件
wb.SaveAsXml("output/工作簿轉(zhuǎn)OpenXML.xml")
wb.Dispose()
提取效果

讀取Excel工作表數(shù)據(jù)寫入XML
除了將工作簿直接轉(zhuǎn)換為Open XML文件外,我們還可以讀取表格數(shù)據(jù),制作自定義的XML文件。我們可以引入 xml.etree.ElementTree 來方便對(duì)XML的寫入。以下是操作示例:
- 導(dǎo)入所需模塊。
- 創(chuàng)建
Workbook類的對(duì)象wb。 - 使用
wb.LoadFromFile()方法加載指定路徑下的Excel文件。 - 獲取工作表
ws,其索引為0。 - 獲取工作表中的已使用區(qū)域
usedRange。 - 創(chuàng)建 XML 的根元素
root,命名為 “Worksheet”。 - 在 XML 根元素下創(chuàng)建子元素 “Name”,并將其文本內(nèi)容設(shè)置為當(dāng)前工作表的名稱。
- 遍歷已使用的區(qū)域(按行):
- 對(duì)于每一行,創(chuàng)建一個(gè) “Row” 子元素。
- 再對(duì)該行的每個(gè)單元格進(jìn)行遍歷(按列):
- 獲取單元格的值。
- 在 “Row” 元素下創(chuàng)建一個(gè) “Cell” 子元素。
- 在 “Cell” 元素下進(jìn)一步創(chuàng)建一個(gè) “Data” 子元素,將單元格值轉(zhuǎn)換為字符串并設(shè)置為其文本內(nèi)容。
- 將所有生成的 XML 元素構(gòu)建成一個(gè)完整的 XML 樹結(jié)構(gòu),存儲(chǔ)在
xml_tree變量中。 - 使用
xml_tree.write()方法將 XML 數(shù)據(jù)寫入名為 “工作表寫入XML.xml” 的文件中,同時(shí)指定 UTF-8 編碼和添加 XML 聲明。 - 最后,調(diào)用
wb.Dispose()方法釋放資源,關(guān)閉并清理 Excel 工作簿對(duì)象。
代碼示例
import xml.etree.ElementTree as ET
from spire.xls import *
from spire.xls.common import *
# 創(chuàng)建 Workbook 對(duì)象
wb = Workbook()
# 加載 Excel 文件
wb.LoadFromFile("示例.xlsx")
# 獲取工作表
ws = wb.Worksheets.get_Item(0)
# 獲取已使用的區(qū)域
usedRange = ws.AllocatedRange
# 創(chuàng)建 XML 根元素
root = ET.Element("Worksheet")
# 設(shè)置工作表名稱
name_element = ET.SubElement(root, "Name")
name_element.text = ws.Name
# 遍歷已使用的區(qū)域
for i in range(1, usedRange.Rows.Count):
row_element = ET.SubElement(root, "Row")
for j in range(len(usedRange.Rows.get_Item(i).Columns)):
# 獲取單元格的值
cellValue = usedRange[i + 1, j + 1].Value
# 創(chuàng)建單元格元素
cell_element = ET.SubElement(row_element, "Cell")
# 創(chuàng)建數(shù)據(jù)元素
data_element = ET.SubElement(cell_element, "Data")
data_element.text = str(cellValue)
# 創(chuàng)建 XML 文檔
xml_tree = ET.ElementTree(root)
# 將數(shù)據(jù)寫入 XML 文件
xml_tree.write("output/XML/工作表寫入XML.xml", encoding="utf-8", xml_declaration=True)
wb.Dispose()
代碼示例

讀取Excel工作表數(shù)據(jù)保存為文本
我們還可以直接讀取表格文件寫入普通文本文件,用于其他用途。以下是操作步驟:
- 導(dǎo)入模塊。
- 初始化一個(gè)新的
Workbook實(shí)例wb。 - 使用
wb.LoadFromFile()函數(shù)加載 Excel 文件。 - 選取第一個(gè)工作表(索引為0),賦值給變量
ws。 - 獲取該工作表的已使用區(qū)域,存放在變量
usedRange中。 - 初始化一個(gè)空字符串
data,用于收集所有單元格的數(shù)據(jù)。 - 遍歷已使用的行與列范圍:
- 對(duì)于每一行(從第二行開始計(jì)數(shù),因?yàn)镋xcel索引從1開始):
- 對(duì)于該行內(nèi)的每一個(gè)單元格:
- 獲取單元格的值,并將其轉(zhuǎn)換為字符串形式,追加到
data后面。 - 如果當(dāng)前單元格不是本行的最后一個(gè)單元格,則在其后添加制表符
\t分隔數(shù)據(jù)。
- 獲取單元格的值,并將其轉(zhuǎn)換為字符串形式,追加到
- 完成一行的所有單元格之后,在
data后面添加換行符\n,以便在輸出時(shí)區(qū)分不同行的數(shù)據(jù)。
- 對(duì)于該行內(nèi)的每一個(gè)單元格:
- 對(duì)于每一行(從第二行開始計(jì)數(shù),因?yàn)镋xcel索引從1開始):
- 使用
with open()語句以“寫入”模式打開一個(gè)新文件,文件名基于當(dāng)前工作表的名稱加上.txt擴(kuò)展名,且路徑設(shè)為 “output/” 目錄下。 - 將之前拼接好的包含所有單元格數(shù)據(jù)的字符串
data寫入所創(chuàng)建的文本文件中。 - 關(guān)閉文件流,確保數(shù)據(jù)成功寫入。
- 調(diào)用
wb.Dispose()方法釋放資源,關(guān)閉并清理 Excel 工作簿對(duì)象。
代碼示例
from spire.xls import *
from spire.xls.common import *
# 創(chuàng)建 Workbook 對(duì)象
wb = Workbook()
# 加載 Excel 文件
wb.LoadFromFile("示例.xlsx")
# 獲取工作表
ws = wb.Worksheets.get_Item(0)
# 獲取已使用的區(qū)域
usedRange = ws.AllocatedRange
data = ""
# 遍歷已使用的區(qū)域
for i in range(1, usedRange.Rows.Count):
for j in range(len(usedRange.Rows.get_Item(i).Columns)):
# 獲取單元格的值
cellValue = usedRange[i + 1, j + 1].Value
data += str(cellValue)
if j < len(usedRange.Rows.get_Item(i).Columns) - 1:
data += "\t"
data += "\n"
# 將數(shù)據(jù)寫入 CSV 文件
with open(f"output/{ws.Name}.txt", "w", encoding='utf-8') as f:
f.write(data)
wb.Dispose()
提取結(jié)果

以上內(nèi)容演示了如何使用Python讀取Excel數(shù)據(jù)并寫入到CSV、XML和文本文件中。
到此這篇關(guān)于使用Python讀取Excel數(shù)據(jù)并寫入到CSV、XML和文本的文章就介紹到這了,更多相關(guān)Python讀取Excel數(shù)據(jù)并導(dǎo)入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python讀寫Excel大數(shù)據(jù)文件的3種有效方式對(duì)比
- Python給Excel寫入數(shù)據(jù)的四種方法小結(jié)
- 使用Python實(shí)現(xiàn)將數(shù)據(jù)寫入Excel工作表
- Python辦公自動(dòng)化從Excel中計(jì)算整理數(shù)據(jù)并寫入Word
- Python自動(dòng)化辦公之Excel數(shù)據(jù)的寫入
- python數(shù)據(jù)寫入Excel文件中的實(shí)現(xiàn)步驟
- 教你用python將數(shù)據(jù)寫入Excel文件中
- Python自動(dòng)化實(shí)現(xiàn)寫入數(shù)據(jù)到Excel文件
相關(guān)文章
Python實(shí)現(xiàn)電視里的5毛特效實(shí)例代碼詳解
這篇文章主要介紹了Python實(shí)現(xiàn)了電視里的5毛特效,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
Python 過濾字符串的技巧,map與itertools.imap
Python中的map函數(shù)非常有用,在字符轉(zhuǎn)換和字符遍歷兩節(jié)都出現(xiàn)過,現(xiàn)在,它又出現(xiàn)了,會(huì)給我們帶來什么樣的驚喜呢?是不是要告訴我們,map是非常棒的,以后要多找它玩呢?2008-09-09
使用Python爬取網(wǎng)頁中隱藏的div內(nèi)容
在這個(gè)信息爆炸的時(shí)代,互聯(lián)網(wǎng)上的數(shù)據(jù)無時(shí)無刻不在增長,許多網(wǎng)頁為了提升用戶體驗(yàn)或保護(hù)數(shù)據(jù),會(huì)將部分內(nèi)容默認(rèn)隱藏起來,只有在特定條件下才會(huì)顯示,所以本文將詳細(xì)介紹如何使用Python爬取這些隱藏的div內(nèi)容,需要的朋友可以參考下2025-03-03
python編程簡單幾行代碼實(shí)現(xiàn)視頻轉(zhuǎn)換Gif示例
這篇文章主要為大家介紹了簡單使用幾行python代碼就可以實(shí)現(xiàn)將視頻轉(zhuǎn)換Gif的示例過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10
python 安裝virtualenv和virtualenvwrapper的方法
下面小編就為大家?guī)硪黄猵ython 安裝virtualenv和virtualenvwrapper的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01
Python numpy實(shí)現(xiàn)數(shù)組合并實(shí)例(vstack,hstack)
這篇文章主要介紹了Python numpy實(shí)現(xiàn)數(shù)組合并(官網(wǎng)實(shí)例),涉及vstack,hstack的簡單用法,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01

