You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel转XML后读取并转为.NET对象,是否有内置类型可用?

嘿,这个需求完全可行!而且.NET本身就内置了工具能帮你轻松实现,我给你分享两种实用的处理方式:

方式一:用XmlSerializer反序列化为自定义强类型对象

如果希望得到结构清晰的.NET对象(对应工作表、行、列),最直接的方式是先根据Excel导出的XML结构定义匹配的类,再用XmlSerializer把XML内容直接转成对象。

举个简单的示例(你需要根据实际XML的节点名称、命名空间调整类的属性):

using System.Xml.Serialization;
using System.Collections.Generic;

// 对应XML根节点(比如Workbook)
[XmlRoot("Workbook")]
public class ExcelWorkbook
{
    // 对应每个工作表节点
    [XmlElement("Worksheet")]
    public List<ExcelWorksheet> Worksheets { get; set; } = new List<ExcelWorksheet>();
}

public class ExcelWorksheet
{
    // 工作表名称(如果XML里有Name属性)
    [XmlAttribute("Name")]
    public string Name { get; set; }

    // 对应工作表里的表格节点
    [XmlElement("Table")]
    public ExcelTable Table { get; set; }
}

public class ExcelTable
{
    // 对应每一行
    [XmlElement("Row")]
    public List<ExcelRow> Rows { get; set; } = new List<ExcelRow>();
}

public class ExcelRow
{
    // 对应每一列单元格
    [XmlElement("Cell")]
    public List<ExcelCell> Cells { get; set; } = new List<ExcelCell>();
}

public class ExcelCell
{
    // 单元格内容
    [XmlElement("Data")]
    public string Value { get; set; }

    // 如果XML里有数据类型属性,可以额外添加
    [XmlAttribute("Type")]
    public string DataType { get; set; }
}

然后用以下代码读取XML并转换:

var serializer = new XmlSerializer(typeof(ExcelWorkbook));
using (var reader = new StreamReader("你的Excel导出文件.xml"))
{
    var workbook = (ExcelWorkbook)serializer.Deserialize(reader);
    
    // 现在你可以直接操作workbook对象了,比如遍历工作表、行、列
    foreach (var sheet in workbook.Worksheets)
    {
        Console.WriteLine($"工作表:{sheet.Name}");
        foreach (var row in sheet.Table.Rows)
        {
            foreach (var cell in row.Cells)
            {
                Console.Write($"{cell.Value}\t");
            }
            Console.WriteLine();
        }
    }
}

注意:如果你的XML带有命名空间,需要在XmlRoot或XmlElement属性里指定Namespace参数,确保和XML里的命名空间一致。

方式二:用LINQ to XML灵活查询(无需预定义类)

如果不想提前写一堆类,或者XML结构偶尔有变动,用LINQ to XML会更灵活,直接加载XML后通过LINQ查询提取数据:

using System.Xml.Linq;

var doc = XDocument.Load("你的Excel导出文件.xml");

// 提取所有工作表及其行、列数据
var worksheetData = doc.Descendants("Worksheet")
    .Select(sheet => new
    {
        SheetName = sheet.Attribute("Name")?.Value,
        Rows = sheet.Descendants("Row")
            .Select(row => row.Descendants("Cell")
                .Select(cell => cell.Element("Data")?.Value)
                .ToList())
            .ToList()
    })
    .ToList();

// 遍历输出示例
foreach (var sheet in worksheetData)
{
    Console.WriteLine($"工作表:{sheet.SheetName}");
    foreach (var row in sheet.Rows)
    {
        Console.WriteLine(string.Join("\t", row));
    }
}

这种方式适合快速提取数据,不需要维护强类型类,尤其适合临时分析或结构多变的XML文件。

小提示

Excel导出的XML(比如SpreadsheetML格式)可能包含一些元数据节点(比如样式、格式定义),你可以根据实际需求过滤掉这些节点,只提取业务相关的行和列数据。

内容的提问来源于stack exchange,提问作者barteloma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:32:30