如何在C# Microsoft Bot Framework SDK开发的机器人中读取本地Excel数据
C# Bot Framework 项目读取本地Excel数据实现方案
Bot Framework SDK本身仅提供机器人会话相关能力,没有内置Excel处理相关功能,你可以直接复用.NET生态下的通用Excel处理库实现该需求,和普通C#控制台/WEB项目的Excel读取逻辑完全一致,以下是两种成熟的落地方案:
方案1:EPPlus(仅支持.xlsx格式,无Office依赖)
注意:EPPlus 5.x及以上版本采用Polyform Noncommercial授权,商业用途需购买官方授权,非商业场景可免费使用
- 第一步:通过NuGet安装稳定版包,推荐用4.5.3.3版本(MIT协议,可免费商用),NuGet安装命令:
Install-Package EPPlus -Version 4.5.3.3 - 第二步:配置授权上下文,在项目启动入口(Program.cs/Startup.cs)添加配置:
// 非商业使用设置 ExcelPackage.LicenseContext = LicenseContext.NonCommercial; // 商业使用且已购买授权设置 // ExcelPackage.LicenseContext = LicenseContext.Commercial;
- 第三步:封装Excel读取方法,示例如下:
/// <summary> /// 读取Excel数据返回结构化列表 /// </summary> /// <param name="localExcelPath">本地Excel文件绝对路径</param> /// <returns>每行数据为字典,key为表头,value为单元格内容</returns> public List<Dictionary<string, string>> ReadExcelToDict(string localExcelPath) { var resultList = new List<Dictionary<string, string>>(); var excelFile = new FileInfo(localExcelPath); if (!excelFile.Exists) return resultList; using (var excelPackage = new ExcelPackage(excelFile)) { // 读取第一个工作表,可按需修改为指定工作表名 var workSheet = excelPackage.Workbook.Worksheets.FirstOrDefault(); if (workSheet == null || workSheet.Dimension == null) return resultList; int totalRows = workSheet.Dimension.End.Row; int totalCols = workSheet.Dimension.End.Column; // 首行作为表头,从第二行开始读取数据 for (int row = 2; row <= totalRows; row++) { var rowData = new Dictionary<string, string>(); for (int col = 1; col <= totalCols; col++) { string header = workSheet.Cells[1, col].Text.Trim(); string cellValue = workSheet.Cells[row, col].Text.Trim(); rowData[header] = cellValue; } resultList.Add(rowData); } } return resultList; }
方案2:NPOI(兼容.xls/.xlsx格式,无Office依赖,可免费商用)
如果需要处理2007版本以前的.xls格式Excel文件,可以选择NPOI库实现:
- 第一步:安装NuGet包:
Install-Package NPOI - 第二步:直接调用NPOI的对应API读取即可,使用逻辑和普通C#项目完全一致,不需要做Bot Framework专属适配。
Bot 集成注意事项
- 如果是用户通过对话上传Excel文件的场景,需要先通过Bot Framework的附件接收API,把用户上传的文件缓存到本地临时目录后再调用上述方法读取,处理完成后可删除临时文件避免占用存储。
- 处理超过10M的大Excel文件时建议改为异步后台处理,避免会话请求超时。
内容的提问来源于stack exchange,提问作者Bissu Sahoo
相关产品推荐
相关产品推荐

