C# 导出Excel的6种简单方法实现
前言
在C#中实现Excel导出是很常见的需求。在本文中,我将介绍6种简单的方法来实现这个功能。这些方法包括使用Office Interop库、使用NPOI库、使用EPPlus库、使用OpenXML SDK、使用ClosedXML库以及使用Spire.XLS库。每种方法都有其优缺点,我们将逐一介绍并分析这些方法的使用场景、优势和限制。
方法一:使用Office Interop库
Office Interop库是使用COM技术与Microsoft Office应用程序进行交互的一种方式。通过引用Office Interop库,我们可以直接使用Excel对象模型来创建、修改和保存Excel文件。
using Excel = Microsoft.Office.Interop.Excel; // 创建Excel应用程序对象 Excel.Application excelApp = new Excel.Application(); // 创建Excel工作簿 Excel.Workbook workbook = excelApp.Workbooks.Add(); // 创建Excel工作表 Excel.Worksheet worksheet = workbook.Worksheets.Add(); worksheet.Name = "Sheet1"; // 设置单元格的值 worksheet.Cells[1, 1] = "Hello"; worksheet.Cells[1, 2] = "World"; // 保存为Excel文件 workbook.SaveAs("output.xlsx"); // 关闭工作簿和应用程序对象 workbook.Close(); excelApp.Quit();
使用Office Interop库的优势是可以直接操作Office应用程序的对象模型,功能强大。但是需要安装相关的Office程序,并且在服务器环境下可能会出现一些兼容性问题。
方法二:使用NPOI库
NPOI是一个开源的.NET库,专门用于处理Office文件。它提供了丰富的API用于创建、读取和修改Excel文件。
using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; // 创建工作簿 IWorkbook workbook = new XSSFWorkbook(); // 创建工作表 ISheet sheet = workbook.CreateSheet("Sheet1"); // 创建行并设置单元格的值 IRow row = sheet.CreateRow(0); row.CreateCell(0).SetCellValue("Hello"); row.CreateCell(1).SetCellValue("World"); // 保存为Excel文件 using (FileStream fs = new FileStream("output.xlsx", FileMode.Create, FileAccess.Write)) { workbook.Write(fs); }
NPOI库具有良好的兼容性和高性能,可以在服务器上进行Excel文件操作,并且支持导出更多的文件格式(如doc和ppt)。但是由于其庞大的API,使用起来可能会比较复杂。
方法三:使用EPPlus库
EPPlus是一个开源的.NET库,专门用于处理Office Open XML文件格式(如.xlsx)。它提供了一组简单易用的API用于创建、读取和修改Excel文件。
using OfficeOpenXml; // 创建ExcelPackage对象 using (ExcelPackage package = new ExcelPackage()) { // 创建工作簿 ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Sheet1"); // 设置单元格的值 worksheet.Cells[1, 1].Value = "Hello"; worksheet.Cells[1, 2].Value = "World"; // 保存为Excel文件 package.SaveAs(new FileInfo("output.xlsx")); }
EPPlus库使用简单,支持大量的Excel文件操作,并且具有较好的性能。但是由于其只支持Open XML文件格式,因此在处理较旧的Excel文件格式时可能会有限制。
方法四:使用OpenXML SDK
OpenXML SDK是由Microsoft开发的一个开源库,用于处理Office Open XML文件格式(如.xlsx)。它提供了一组底层的API用于创建、读取和修改Excel文件。
using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadsheet; // 创建Excel文件 using (SpreadsheetDocument document = SpreadsheetDocument.Create("output.xlsx", SpreadsheetDocumentType.Workbook)) { // 创建WorkbookPart WorkbookPart workbookPart = document.AddWorkbookPart(); workbookPart.Workbook = new Workbook(); // 创建WorksheetPart WorksheetPart worksheetPart = workbookPart.AddNewPart(); worksheetPart.Worksheet = new Worksheet(new SheetData()); // 创建SheetPart Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets()); Sheet sheet = new Sheet() { Id = workbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "Sheet1" }; sheets.Append(sheet); // 设置单元格的值 SheetData sheetData = worksheetPart.Worksheet.GetFirstChild (); Row row = new Row(); row.Append(new Cell() { CellValue = new CellValue("Hello"), DataType = CellValues.String }); row.Append(new Cell() { CellValue = new CellValue("World"), DataType = CellValues.String }); sheetData.Append(row); // 保存Excel文件 workbookPart.Workbook.Save(); }
OpenXML SDK提供了对Excel文件底层结构的直接访问,灵活性较高。但是由于其较为繁琐的API和复杂的结构,使用起来相对较复杂。
方法五:使用ClosedXML库
ClosedXML是一个开源的.NET库,专门用于处理Excel文件。它提供了一组简单易用的API用于创建、读取和修改Excel文件。
using ClosedXML.Excel; // 创建工作簿 XLWorkbook workbook = new XLWorkbook(); IXLWorksheet worksheet = workbook.Worksheets.Add("Sheet1"); // 设置单元格的值 worksheet.Cell(1, 1).Value = "Hello"; worksheet.Cell(1, 2).Value = "World"; // 保存为Excel文件 workbook.SaveAs("output.xlsx");
ClosedXML库使用简单,支持丰富的Excel文件操作,并且具有较好的性能。但是由于其底层使用了OpenXML SDK,因此在处理较大的Excel文件时可能会有一些性能问题。
方法六:使用Spire.XLS库
Spire.XLS是一个商业的.NET库,非常强大而且易于使用。它提供了一组丰富的API用于创建、读取和修改Excel文件,并且支持多种Excel文件格式。
using Spire.Xls; // 创建工作簿 Workbook workbook = new Workbook(); Worksheet worksheet = workbook.Worksheets[0]; // 设置单元格的值 worksheet.Range["A1"].Text = "Hello"; worksheet.Range["B1"].Text = "World"; // 保存为Excel文件 workbook.SaveToFile("output.xlsx", ExcelVersion.Version2013);
Spire.XLS具有友好的API和强大的功能,支持多种Excel文件格式,并且提供了各种高级特性(如图表、数据透视表等)。但是由于其是商业库,需要购买授权才能使用。
总结
通过本文我们介绍了使用C#实现Excel导出的六种简单方法:使用Office Interop库、使用NPOI库、使用EPPlus库、使用OpenXML SDK、使用ClosedXML库以及使用Spire.XLS库。每种方法都有其优缺点,根据具体的需求和开发环境选择合适的方法。希望本文能对您有所帮助。