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

如何用C# .NET Core 6.0读取SharePoint中的Excel并转为C#对象?

从SharePoint加载Excel并转换为C#对象的可行方案

方案1:使用Microsoft Graph API(推荐,适配现代SharePoint/OneDrive)

前置准备

  • 在Azure AD注册应用,授予Files.Read或Sites.Read.All权限(根据访问范围选择)
  • 安装NuGet包:Microsoft.Graph、Microsoft.Graph.Auth、EPPlus(用于Excel解析)

代码实现

  1. 初始化Graph客户端并获取文件流
using Microsoft.Graph;
using Azure.Identity;
using OfficeOpenXml;

// 配置认证参数
var scopes = new[] { "https://graph.microsoft.com/.default" };
var tenantId = "你的租户ID";
var clientId = "你的应用ID";
var clientSecret = "你的应用密钥";

// 创建Graph客户端
var clientCredential = new ClientSecretCredential(tenantId, clientId, clientSecret);
var graphClient = new GraphServiceClient(clientCredential, scopes);

// 目标文件的标识(可通过Graph Explorer获取站点、库、文件ID)
var siteId = "xxx";
var driveId = "xxx";
var fileId = "xxx";

// 下载文件流
var stream = await graphClient.Sites[siteId].Drives[driveId].Items[fileId].Content.Request().GetAsync();
  1. 解析Excel并映射为C#对象
// 定义业务实体类
public class Employee
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Department { get; set; }
}

// 解析Excel内容
ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // 非商用场景,商用需购买授权
using (var package = new ExcelPackage(stream))
{
    var worksheet = package.Workbook.Worksheets.First();
    var employees = new List<Employee>();

    // 从第2行开始读取(假设第1行是表头)
    for (int row = 2; row <= worksheet.Dimension.End.Row; row++)
    {
        employees.Add(new Employee
        {
            Name = worksheet.Cells[row, 1].Text,
            Age = int.Parse(worksheet.Cells[row, 2].Text),
            Department = worksheet.Cells[row, 3].Text
        });
    }

    // employees即为转换后的C#对象列表
}

方案2:使用SharePoint CSOM(适配经典SharePoint Online)

前置准备

  • 安装NuGet包:Microsoft.SharePointOnline.CSOM、EPPlus

代码实现

  1. 连接SharePoint并获取文件流
using Microsoft.SharePoint.Client;
using OfficeOpenXml;
using System.Security;

var siteUrl = "你的SharePoint站点URL";
var username = "你的账号";
var password = "你的密码";

using (var context = new ClientContext(siteUrl))
{
    // 设置认证信息
    var securePassword = new SecureString();
    foreach (char c in password) securePassword.AppendChar(c);
    context.Credentials = new SharePointOnlineCredentials(username, securePassword);

    // 获取目标文件(示例:文档库名为"Documents",通过ID获取文件)
    var list = context.Web.Lists.GetByTitle("Documents");
    var item = list.GetItemById(1);
    context.Load(item, i => i.File);
    await context.ExecuteQueryAsync();

    // 下载文件流
    var fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(context, item.File.ServerRelativeUrl);
    var stream = fileInfo.Stream;
  1. 解析Excel并转换为C#对象(同方案1的解析逻辑)
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
    using (var package = new ExcelPackage(stream))
    {
        var worksheet = package.Workbook.Worksheets.First();
        var employees = new List<Employee>();

        for (int row = 2; row <= worksheet.Dimension.End.Row; row++)
        {
            employees.Add(new Employee
            {
                Name = worksheet.Cells[row, 1].Text,
                Age = int.Parse(worksheet.Cells[row, 2].Text),
                Department = worksheet.Cells[row, 3].Text
            });
        }
    }
}

常见问题排查

  • 权限异常:确认应用/账号拥有目标文件的读取权限,Graph API需检查Azure AD权限是否完成授权
  • 路径错误:核实站点ID、库ID、文件ID或ServerRelativeUrl的正确性,可通过Graph Explorer或SharePoint后台获取
  • 格式不兼容:EPPlus仅支持.xlsx格式,若需处理.xls文件,可替换为NPOI库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:13:23