使用C#將Excel轉(zhuǎn)為XML的兩種方案
在數(shù)據(jù)處理場(chǎng)景中,Excel文件常作為中間格式存在,但其結(jié)構(gòu)化程度有限。若需將Excel數(shù)據(jù)導(dǎo)入系統(tǒng)、進(jìn)行二次分析或與XML格式服務(wù)對(duì)接,Excel 轉(zhuǎn) XML 成為一項(xiàng)高頻需求。然而,傳統(tǒng)方法往往依賴復(fù)雜腳本或第三方工具,效率低、易出錯(cuò)。
本文將分享一個(gè)輕量、穩(wěn)定的方案:使用免費(fèi)庫(kù) Free Spire.XLS for .NET ,通過(guò) C# 代碼實(shí)現(xiàn) Excel 到XML 的高效轉(zhuǎn)換。
優(yōu)勢(shì)分析
相比手動(dòng)解析或使用OpenXML,F(xiàn)ree Spire.XLS提供成熟的 .NET 封裝,支持無(wú)需安裝 Office 環(huán)境即可讀寫 Excel 文件。
| 對(duì)比項(xiàng) | 傳統(tǒng)方法(如VBA) | Free Spire.XLS for .NET |
|---|---|---|
| 依賴Office | ? 需要安裝 | ? 無(wú)依賴 |
| 開(kāi)發(fā)效率 | ?? | ???? |
| 轉(zhuǎn)換穩(wěn)定性 | ?? 易出錯(cuò) | ? 高度可靠 |
| 適用場(chǎng)景 | 小型腳本 | 輕量級(jí) |
需注意免費(fèi)版雖無(wú)任何水印,但是有一定頁(yè)數(shù)限制。
方案一:手動(dòng)構(gòu)建 XML 結(jié)構(gòu)(靈活可控)
以下代碼通過(guò)手動(dòng)遍歷 Excel 單元格、構(gòu)建 XML 節(jié)點(diǎn)的方式,實(shí)現(xiàn)數(shù)據(jù)從 Excel 到 XML 的轉(zhuǎn)換:
using System.Xml;
using Spire.Xls;
class ExcelToXmlConverter
{
static void Main(string[] args)
{
// 創(chuàng)建Workbook對(duì)象
Workbook wb = new Workbook();
// 加載Excel文件
wb.LoadFromFile("data.xlsx");
// 獲取第一個(gè)工作表
Worksheet ws = wb.Worksheets[0];
// 獲取已使用的區(qū)域
CellRange usedRange = ws.AllocatedRange;
// 創(chuàng)建XML文檔
XmlDocument xmlDoc = new XmlDocument();
XmlDeclaration xmlDeclaration = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", null);
xmlDoc.AppendChild(xmlDeclaration);
// 創(chuàng)建根元素
XmlElement root = xmlDoc.CreateElement("Worksheet");
xmlDoc.AppendChild(root);
// 設(shè)置工作表名稱
XmlElement nameElement = xmlDoc.CreateElement("Name");
nameElement.InnerText = ws.Name;
root.AppendChild(nameElement);
// 遍歷已使用的區(qū)域(行)
for (int i = 0; i < usedRange.Rows.Length; i++)
{
XmlElement rowElement = xmlDoc.CreateElement("Row");
root.AppendChild(rowElement);
// 遍歷列
for (int j = 0; j < usedRange.Columns.Length; j++)
{
// 獲取單元格的值
object cellValue = usedRange[i+1, j+1].Value;
// 創(chuàng)建單元格元素
XmlElement cellElement = xmlDoc.CreateElement("Cell");
rowElement.AppendChild(cellElement);
// 創(chuàng)建數(shù)據(jù)元素
XmlElement dataElement = xmlDoc.CreateElement("Data");
dataElement.InnerText = cellValue?.ToString() ?? string.Empty;
cellElement.AppendChild(dataElement);
}
}
// 保存XML文件
xmlDoc.Save("工作表寫入XML.xml");
// 釋放資源
wb.Dispose();
}
}
該方案的核心優(yōu)勢(shì)在于高度靈活可控,開(kāi)發(fā)者可根據(jù)需求自定義 XML 的結(jié)構(gòu)與節(jié)點(diǎn)命名:
- ? 節(jié)點(diǎn)自定義:可自由修改根節(jié)點(diǎn)(如將
<Worksheet>改為<ExcelData>)、行節(jié)點(diǎn)(<Row>)、單元格節(jié)點(diǎn)(<Cell>)的名稱,滿足不同場(chǎng)景下的 XML 格式要求; - ? 結(jié)構(gòu)可視化:通過(guò)手動(dòng)創(chuàng)建節(jié)點(diǎn),開(kāi)發(fā)者能清晰掌控 XML 的層級(jí)關(guān)系(如
Worksheet -> Name、Worksheet -> Row -> Cell -> Data),便于后續(xù) XML 文件的解析與使用。
方案二:調(diào)用內(nèi)置方法(簡(jiǎn)潔高效
Free Spire.XLS 組件提供了 SaveAsXml 方法,無(wú)需手動(dòng)構(gòu)建 XML 結(jié)構(gòu)即可實(shí)現(xiàn) Excel 到 XML 的快速轉(zhuǎn)換,代碼如下:
using Spire.Xls;
namespace ExcelToXML
{
internal class Program
{
static void Main(string[] args)
{
//Load an Excel file
Workbook workbook = new Workbook();
workbook.LoadFromFile("Sample.xlsx");
// Save the Excel file in Open XML file format
workbook.SaveAsXml("ExcelToXML.xml");
}
}
}
該方案的最大優(yōu)勢(shì)在于簡(jiǎn)潔高效,通過(guò)封裝好的 API 大幅簡(jiǎn)化開(kāi)發(fā)流程:
- ? 代碼極簡(jiǎn):僅需 3 行核心代碼,即可完成轉(zhuǎn)換,降低開(kāi)發(fā)難度與代碼維護(hù)成本;
- ? 遵循標(biāo)準(zhǔn)格式:
SaveAsXml方法生成的 XML 文件嚴(yán)格遵循Open XML 規(guī)范(微軟定義的開(kāi)放式文檔格式標(biāo)準(zhǔn)),確保文件的兼容性,可被其他支持 Open XML 的軟件(如 Office、Apache POI 等)正常解析;
兩種方案適用場(chǎng)景
開(kāi)發(fā)者可根據(jù)實(shí)際需求選擇合適方案:
- 若需生成自定義格式的 XML 文件(如用于特定系統(tǒng)的數(shù)據(jù)交換、自定義配置文件),或需對(duì) Excel 數(shù)據(jù)進(jìn)行過(guò)濾、格式化等處理,建議選擇方案一;
- 若僅需快速將 Excel 轉(zhuǎn)換為標(biāo)準(zhǔn) Open XML 格式,且無(wú)需自定義結(jié)構(gòu)(如用于 Office 軟件兼容、通用數(shù)據(jù)備份),建議選擇方案二。
到此這篇關(guān)于使用C#將Excel轉(zhuǎn)為XML的兩種方案的文章就介紹到這了,更多相關(guān)C# Excel轉(zhuǎn)為XML內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C# Winform按鈕中圖片實(shí)現(xiàn)左圖右字的效果實(shí)例
這篇文章主要給大家介紹了關(guān)于C# Winform按鈕中圖片實(shí)現(xiàn)左圖右字效果的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
C# WinForm實(shí)現(xiàn)Win7 Aero透明效果代碼
這篇文章主要介紹了C# WinForm實(shí)現(xiàn)Win7 Aero透明效果代碼,通過(guò)調(diào)用dwmapi.dll相關(guān)方法實(shí)現(xiàn),需要的朋友可以參考下2014-07-07
C#枚舉數(shù)值與名稱的轉(zhuǎn)換實(shí)例分享
在應(yīng)用枚舉的時(shí)候,時(shí)常需要將枚舉和數(shù)值相互轉(zhuǎn)換的情況。有時(shí)候還需要轉(zhuǎn)換成相應(yīng)的中文。下面介紹一種方法2013-08-08
UnityShader3實(shí)現(xiàn)轉(zhuǎn)圈與冷卻效果
這篇文章主要為大家詳細(xì)介紹了UnityShader3實(shí)現(xiàn)轉(zhuǎn)圈與冷卻效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03

