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

