数据导入通常是提升用户操作软件的有效手段。在实现导入的功能常常会使用一些第三方库(需要安装)来简化代码。C# 提供了很多流行的第三方库来处理Excel文件,我建议用ClosedXML或者NPOI,因为是免费的。
不管用哪种方式,逻辑都是读取Excel文件的行和列数据。
使用ClosedXML处理Excel文件
在项目中安装ClosedXML,可以通过控制台命令安装,也可以通过NuGet包管理器安装。
using ClosedXML.Excel;using System;using System.Linq;namespace A_ExcelJonb{ internal class Program { staticvoidMain(string[] args) { // 要导入的Excel文件路径 var filePath = @"D:\Demo.xlsx"; using (var workbook = new XLWorkbook(filePath)) { // 获取第一个工作表 var worksheet = workbook.Worksheets.First(); Console.WriteLine($"工作表有 {worksheet.LastRowUsed().RowNumber()}行,{worksheet.LastColumnUsed().ColumnNumber()}列"); //工作表格是行列式,需要两个循环 // 从第工作表第一行开始读取 for (int row = worksheet.FirstRowUsed().RowNumber(); row <= worksheet.LastRowUsed().RowNumber(); row++) { // 从第工作表第一列开始读取 for (int col = worksheet.FirstColumnUsed().ColumnNumber(); col <= worksheet.LastColumnUsed().ColumnNumber(); col++) { Console.Write(worksheet.Cell(row, col).Value + "\t"); } Console.WriteLine(); } } Console.ReadKey(); } }}
输出:
使用NPOI处理Excel文件
同上面一样的操作在项目中安装NPOI,可以通过控制台命令安装,也可以通过NuGet包管理器安装。

using NPOI.SS.UserModel;using NPOI.XSSF.UserModel;using System;using System.IO;namespace A_ExcelJonb{ internal class Program { staticvoidMain(string[] args) { // 要导入的Excel文件路径 var filePath = @"D:\Demo.xlsx"; // 使用FileStream读取Excel文件 using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { // 创建XSSFWorkbook对象来读取XLSX格式的Excel文件 IWorkbook workbook = new XSSFWorkbook(file); // 获取第一个工作表(sheet) ISheet sheet = workbook.GetSheetAt(0); // 获取总行数 int rowCount = sheet.LastRowNum + 1; try { // 遍历行和列来读取数据 for (int row = 0; row < rowCount; row++) { if (sheet.GetRow(row) != null) { // 获取当前行 IRow currentRow = sheet.GetRow(row); // 获取总列数 int cellCount = currentRow.LastCellNum; // 遍历列来读取数据 for (int col = 0; col < cellCount; col++) { // 获取当前单元格 ICell cell = currentRow.GetCell(col); if (cell != null) { // 获取单元格内容,根据类型转换(这里以字符串为例) string cellValue = cell.ToString(); Console.Write(cellValue + "\t"); // 打印单元格内容,用Tab分隔列,可根据需要修改格式化输出方式 } } Console.WriteLine(); // 换行,准备输出下一行数据 } } } catch (Exception ex) { throw ex; } } Console.ReadKey(); } }}