使用C#读取Excel:需装Access数据库引擎2010还是2016?有无替代方案?
关于C#读取Excel的驱动选择与无外部依赖方案
1. ACE OLEDB驱动版本选择
你当前的连接字符串用的是Microsoft.ACE.OLEDB.12.0,这个驱动在Microsoft Access Database Engine 2010里就已经包含了,安装2010版本完全能让代码正常运行。而2016版本也兼容这个驱动标识(甚至可以直接把Provider改成Microsoft.ACE.OLEDB.16.0),所以装2010或2016都没问题。
这里要特别注意系统位数匹配:如果你的C#程序编译成32位(x86),必须装32位的Access Database Engine;要是64位程序,就得对应装64位版本,不然会出现驱动找不到的报错。
2. 无需安装外部程序的Excel读取方法
如果不想依赖外部驱动安装,推荐下面几个成熟的开源NuGet库,直接通过NuGet包管理器安装就能用:
EPPlus(推荐用于xlsx/xlsm格式)
这是.NET生态里最常用的Excel处理库之一,API简洁功能还强。注意EPPlus 5及以上版本需要设置LicenseContext(非商用直接设为LicenseContext.NonCommercial就行):using OfficeOpenXml; using System.IO; ExcelPackage.LicenseContext = LicenseContext.NonCommercial; using (var package = new ExcelPackage(new FileInfo("你的Excel文件路径"))) { var firstSheet = package.Workbook.Worksheets.First(); // 读取单个单元格示例 string cellValue = firstSheet.Cells["A1"].Text; // 遍历行读取数据示例 for (int row = 1; row <= firstSheet.Dimension.End.Row; row++) { string columnValue = firstSheet.Cells[row, 1].Text; } }NPOI(同时支持xls和xlsx格式)
对旧版Excel(.xls)支持很到位,也兼容新版格式,适合需要处理多种Excel版本的场景:using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System.IO; using (var stream = new FileStream("你的Excel文件路径", FileMode.Open, FileAccess.Read)) { // 处理xlsx用XSSFWorkbook,处理xls用HSSFWorkbook IWorkbook workbook = new XSSFWorkbook(stream); ISheet sheet = workbook.GetSheetAt(0); IRow firstRow = sheet.GetRow(0); string cellValue = firstRow.GetCell(0).ToString(); }ClosedXML(简化版xlsx处理工具)
基于EPPlus封装,API更直观友好,适合快速开发简单的Excel读取需求:using ClosedXML.Excel; using (var workbook = new XLWorkbook("你的Excel文件路径")) { var worksheet = workbook.Worksheet(1); // 按索引获取工作表,索引从1开始 string cellValue = worksheet.Cell(1, 1).Value.ToString(); // 行号、列号同样从1开始 }
内容的提问来源于stack exchange,提问作者LopDev
相关产品推荐
相关产品推荐

