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

.NET Maui中如何将Excel(.xlsx)文件转换为对象列表

.NET Maui中如何将Excel(.xlsx)文件转换为对象列表

嘿,我来帮你捋清楚接下来的步骤!你已经用FilePicker拿到了Excel文件,接下来核心就是用合适的工具解析Excel内容,再把数据映射成你需要的对象列表。我给你一步步拆解:

1. 安装Excel处理库

首先得装个能读取.xlsx的NuGet包,EPPlus是个靠谱的选择,对.NET Maui支持很好。你可以:

  • 打开NuGet包管理器,搜索「EPPlus」并安装
  • 或者用Package Manager Console执行命令:Install-Package EPPlus

2. 定义你的实体类

先想好你要把Excel数据转换成什么对象,比如假设你要处理学生数据,先定义一个类:

public class Student
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
    public string Grade { get; set; }
}

3. 结合FilePicker解析Excel并映射列表

接下来把FilePicker的逻辑和Excel解析结合起来,完整代码大概是这样:

using OfficeOpenXml;
using Microsoft.Maui.Storage;

public async Task<List<Student>> ConvertExcelToStudentList()
{
    var studentList = new List<Student>();

    // 调用FilePicker选择Excel文件
    var result = await FilePicker.PickAsync(new PickOptions
    {
        PickerTitle = "选择Excel文件",
        FileTypes = new FilePickerFileType(new Dictionary<DevicePlatform, IEnumerable<string>>
        {
            { DevicePlatform.Windows, new[] { ".xlsx" } },
            { DevicePlatform.Android, new[] { "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" } },
            { DevicePlatform.iOS, new[] { "com.microsoft.excel.xlsx" } }
        })
    });

    if (result != null)
    {
        // 打开文件流
        using var stream = await result.OpenReadAsync();
        // 初始化EPPlus(注意:商业用途要遵循EPPlus的许可证要求)
        ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // 如果是非商业使用
        using var package = new ExcelPackage(stream);

        // 获取第一个工作表(你可以根据实际情况指定工作表名称)
        var worksheet = package.Workbook.Worksheets.First();

        // 获取总行数和列数(跳过表头,假设表头在第一行)
        int rowCount = worksheet.Dimension.Rows;
        int colCount = worksheet.Dimension.Columns;

        // 从第二行开始遍历数据行
        for (int row = 2; row <= rowCount; row++)
        {
            var student = new Student();
            // 按列索引读取值,这里假设第1列是Id,第2列Name,第3列Age,第4列Grade
            student.Id = int.TryParse(worksheet.Cells[row, 1].Text, out int id) ? id : 0;
            student.Name = worksheet.Cells[row, 2].Text;
            student.Age = int.TryParse(worksheet.Cells[row, 3].Text, out int age) ? age : 0;
            student.Grade = worksheet.Cells[row, 4].Text;

            studentList.Add(student);
        }
    }

    return studentList;
}

一些注意事项

  • 许可证问题:EPPlus在非商业场景下可以免费使用,如果是商业项目,需要购买对应的许可证,或者你也可以选择其他开源库比如NPOI(支持.xls和.xlsx)
  • 数据类型转换:实际处理时要根据Excel里的单元格类型做合适的转换,避免出现格式错误
  • 表头处理:如果你的Excel表头不是第一行,记得调整循环的起始行;如果表头和实体类属性名对应,还可以用反射来自动映射,减少硬编码

这样你就能把Excel里的数据转换成对象列表啦,是不是清晰多了?

备注:内容来源于stack exchange,提问作者yorick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 12:08:12