WINFORM读取Excel教程:两种有效方法

需积分: 10 8 下载量 28 浏览量 更新于2024-09-16 收藏 6KB TXT 举报
本文将介绍在Windows Forms (WINFROM) 应用程序中读取Excel文件的两种方法。主要关注的标签是“读取Excel”。 在Windows Forms应用中,我们经常需要处理Excel数据,例如导入、导出或者分析Excel表格中的信息。这里将介绍两种方法来实现这个功能。 ### 方法一:使用 Microsoft.Office.Interop.Excel 命名空间 这种方法依赖于 Microsoft Office 的 Interop 组件,允许 .NET 应用程序与 Office 应用程序进行交互。首先,确保在项目中引用了 `Microsoft.Office.Interop.Excel` 库。然后,可以使用以下代码来读取Excel文件: ```csharp using Microsoft.Office.Interop.Excel; public System.Data.DataTable[] ReadExcel2(string strFilePath) { strFilePath = ExcelFileUrl(); System.Data.DataTable[] dtInfo = null; // 用于存储Excel工作表的DataTable数组 if (!System.IO.File.Exists(strFilePath) || !(strFilePath.EndsWith(".xls") || strFilePath.EndsWith(".xlsx"))) { return dtInfo; } Application appExcel = new Application(); appExcel.DisplayAlerts = false; // 禁止显示警告对话框 Workbook workbook = appExcel.Workbooks.Open( strFilePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); // 打开Excel文件 int intSheetCount = workbook.Sheets.Count; // 获取Excel文件的工作表数量 dtInfo = new System.Data.DataTable[intSheetCount]; for (int i = 1; i <= intSheetCount; i++) { Worksheet ws = workbook.Sheets[i]; // 获取当前工作表 dtInfo[i - 1] = GetDataTableFromWorksheet(ws); // 将工作表转换为DataTable } workbook.Close(false, Type.Missing, Type.Missing); // 关闭工作簿 appExcel.Quit(); // 关闭Excel应用程序 return dtInfo; } private System.Data.DataTable GetDataTableFromWorksheet(Worksheet ws) { // 实现将工作表转换为DataTable的逻辑 } ``` 在 `ReadExcel2` 方法中,我们首先检查文件是否存在且为Excel格式,然后创建一个 `Application` 对象来打开Excel文件。通过 `Workbooks.Open` 方法打开文件,并获取工作表的数量。接着,遍历每个工作表,将其转换为 `DataTable` 并存储到数组中。最后,关闭工作簿和Excel应用程序。 ### 方法二:使用第三方库(如EPPlus) 如果不想依赖于Office Interop,可以使用第三方库,如EPPlus。EPPlus是一个.NET库,用于读写Excel 2007+(.xlsx)文件,无需安装Office。安装EPPlus后,代码会简洁很多: ```csharp using OfficeOpenXml; public System.Data.DataTable[] ReadExcelWithEPPlus(string strFilePath) { DataTable[] dtInfo = null; if (!System.IO.File.Exists(strFilePath) || !strFilePath.EndsWith(".xlsx")) { return dtInfo; } using (var package = new ExcelPackage(new FileInfo(strFilePath))) { int sheetCount = package.Workbook.Worksheets.Count; dtInfo = new System.Data.DataTable[sheetCount]; for (int i = 0; i < sheetCount; i++) { ExcelWorksheet worksheet = package.Workbook.Worksheets[i]; dtInfo[i] = worksheet.AsEnumerable().CopyToDataTable(); } } return dtInfo; } ``` 在 `ReadExcelWithEPPlus` 方法中,我们创建一个 `ExcelPackage` 对象来处理Excel文件,然后遍历每个工作表,使用 `AsEnumerable()` 方法将工作表数据转换为可枚举对象,并通过 `CopyToDataTable()` 创建 `DataTable`。 这两种方法各有优缺点。使用Interop方式可以直接操作Excel对象,但需要Office组件支持,可能引发兼容性问题。而EPPlus库则避免了对Office的依赖,但可能不支持所有Excel特性,且性能稍逊。 根据项目需求和环境选择适合的读取Excel的方法,确保代码的稳定性和效率。