位置: 文档库 > C#(.NET) > 文档下载预览

《C#如何导入导出与处理Excel文件.doc》

1. 下载的文档为doc格式,下载后可用word或者wps进行编辑;

2. 将本文以doc文档格式下载到电脑,方便收藏和打印;

3. 下载后的文档,内容与下面显示的完全一致,下载之前请确认下面内容是否您想要的,是否完整.

点击下载文档

C#如何导入导出与处理Excel文件.doc

《C#如何导入导出与处理Excel文件》

在.NET开发中,Excel文件的导入导出与处理是常见的业务需求。无论是数据报表生成、批量数据导入还是数据分析,Excel作为广泛使用的电子表格工具,其与C#的交互能力直接影响开发效率。本文将系统介绍C#中处理Excel文件的多种方法,涵盖基础导入导出、高级数据处理及性能优化技巧,帮助开发者快速掌握核心技能。

一、Excel处理技术选型

C#处理Excel文件主要有三种技术路线:

1. Microsoft官方组件(Interop)

2. 第三方开源库(EPPlus、NPOI)

3. 轻量级解析库(ClosedXML、ExcelDataReader)

不同方案在功能、性能和部署环境上有显著差异。例如Interop依赖本地安装的Excel软件,适合桌面应用;EPPlus基于OpenXML规范,无需安装Excel即可操作.xlsx文件;NPOI则同时支持.xls和.xlsx格式,适合服务器环境。

二、使用EPPlus处理Excel文件

EPPlus是当前最流行的开源库之一,支持.NET Core和.NET Framework。其核心优势在于:

  • 无需安装Excel
  • 支持公式计算、图表生成
  • 内存高效管理

1. 基础导出功能

安装NuGet包后,可通过以下代码创建Excel文件:

using OfficeOpenXml;
using System.IO;

public void ExportToExcel()
{
    // 设置LicenseContext(EPPlus 5+需要)
    ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
    
    // 创建内存流
    using (var package = new ExcelPackage())
    {
        // 添加工作表
        var worksheet = package.Workbook.Worksheets.Add("Sheet1");
        
        // 填充数据
        worksheet.Cells["A1"].Value = "ID";
        worksheet.Cells["B1"].Value = "Name";
        worksheet.Cells["A2"].Value = 1;
        worksheet.Cells["B2"].Value = "张三";
        
        // 设置列宽
        worksheet.Column(1).Width = 10;
        worksheet.Column(2).Width = 20;
        
        // 保存文件
        var fileInfo = new FileInfo(@"C:\Temp\Export.xlsx");
        package.SaveAs(fileInfo);
    }
}

2. 高级功能实现

(1)样式设置:

var headerStyle = worksheet.Cells["A1:B1"].Style;
headerStyle.Font.Bold = true;
headerStyle.Fill.BackgroundColor.SetColor(System.Drawing.Color.LightGray);
headerStyle.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center;

(2)公式计算:

worksheet.Cells["C2"].Formula = "A2+B2";  // 简单算术
worksheet.Cells["D2"].Formula = "SUM(A2:A10)";  // 函数调用

(3)图表生成:

var chart = worksheet.Drawings.AddChart("chart1", eChartType.ColumnClustered);
chart.SetPosition(1, 0, 5, 0);
chart.SetSize(600, 400);

var series = chart.Series.Add(worksheet.Cells["B2:B5"], worksheet.Cells["A2:A5"]);
series.Header = "销售数据";

三、使用NPOI处理Excel文件

NPOI是Apache POI的.NET实现,支持旧版.xls格式。其特点包括:

  • 跨平台支持
  • 内存占用较低
  • 支持复杂格式

1. 创建Excel文件

using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;  // .xlsx格式
// using NPOI.HSSF.UserModel;  // .xls格式

public void CreateExcelWithNPOI()
{
    IWorkbook workbook = new XSSFWorkbook();
    ISheet sheet = workbook.CreateSheet("Sheet1");
    
    // 创建行和单元格
    IRow headerRow = sheet.CreateRow(0);
    headerRow.CreateCell(0).SetCellValue("产品");
    headerRow.CreateCell(1).SetCellValue("价格");
    
    IRow dataRow = sheet.CreateRow(1);
    dataRow.CreateCell(0).SetCellValue("笔记本电脑");
    dataRow.CreateCell(1).SetCellValue(5999.99);
    
    // 自动调整列宽
    sheet.AutoSizeColumn(0);
    sheet.AutoSizeColumn(1);
    
    // 保存文件
    using (var fs = new FileStream(@"C:\Temp\NPOI_Export.xlsx", FileMode.Create))
    {
        workbook.Write(fs);
    }
}

2. 读取Excel文件

public void ReadExcelWithNPOI()
{
    using (var fs = new FileStream(@"C:\Temp\Input.xlsx", FileMode.Open))
    {
        IWorkbook workbook = new XSSFWorkbook(fs);
        ISheet sheet = workbook.GetSheetAt(0);
        
        for (int i = 0; i 

四、ExcelDataReader轻量级解析

对于只需要读取Excel数据的场景,ExcelDataReader提供了极简的解决方案:

using ExcelDataReader;
using System.Data;

public void ReadWithExcelDataReader()
{
    System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
    
    using (var stream = File.Open(@"C:\Temp\Data.xlsx", FileMode.Open))
    {
        using (var reader = ExcelReaderFactory.CreateReader(stream))
        {
            var result = reader.AsDataSet();
            var table = result.Tables[0];
            
            foreach (DataRow row in table.Rows)
            {
                foreach (var item in row.ItemArray)
                {
                    Console.Write(item?.ToString() + "\t");
                }
                Console.WriteLine();
            }
        }
    }
}

五、性能优化技巧

1. 批量操作优化:

// EPPlus批量写入示例
using (var package = new ExcelPackage())
{
    var sheet = package.Workbook.Worksheets.Add("Data");
    
    // 创建二维数组批量写入
    object[,] data = new object[1000, 3];
    for (int i = 0; i 

2. 内存管理:

  • 使用流式处理大文件
  • 及时释放资源(using语句)
  • 分块读取超大数据集

3. 异步处理:

public async Task ExportAsync()
{
    await Task.Run(() => 
    {
        using (var package = new ExcelPackage())
        {
            // 导出逻辑...
            package.SaveAs(new FileInfo(@"C:\Temp\AsyncExport.xlsx"));
        }
    });
}

六、常见问题解决方案

1. 文件锁定问题:

// 确保文件流正确关闭
try
{
    using (var fs = new FileStream(path, FileMode.Create))
    {
        workbook.Write(fs);
    }
}
catch (IOException ex)
{
    // 处理文件占用异常
}

2. 格式兼容性问题:

  • 明确指定工作簿类型(XSSFWorkbook/HSSFWorkbook)
  • 处理日期格式转换
  • 统一数字格式显示

3. 性能瓶颈分析:

  • 使用Stopwatch测量各环节耗时
  • 避免频繁的单元格操作
  • 考虑使用内存缓存

七、完整项目示例

以下是一个结合EPPlus和ASP.NET Core的Web API示例:

[ApiController]
[Route("api/[controller]")]
public class ExcelController : ControllerBase
{
    [HttpPost("export")]
    public IActionResult ExportExcel([FromBody] List products)
    {
        ExcelPackage.LicenseContext = LicenseContext.NonCommercial;
        
        using (var package = new ExcelPackage())
        {
            var sheet = package.Workbook.Worksheets.Add("Products");
            
            // 写入表头
            sheet.Cells["A1"].Value = "ID";
            sheet.Cells["B1"].Value = "Name";
            sheet.Cells["C1"].Value = "Price";
            
            // 写入数据
            for (int i = 0; i 

八、未来发展趋势

1. 云存储集成:与OneDrive、Google Sheets API深度整合

2. 实时协作:支持多人同时编辑的Web版Excel处理

3. AI增强:自动数据清洗、异常值检测等智能功能

关键词:C#、Excel处理、EPPlus、NPOI、ExcelDataReader、.NET Core、数据导出、数据导入、性能优化、OpenXML

简介:本文详细介绍了C#中处理Excel文件的多种技术方案,包括EPPlus、NPOI等主流库的使用方法,涵盖了基础导入导出、高级样式设置、图表生成、性能优化等核心功能,并提供了完整的项目示例和常见问题解决方案,适合.NET开发者系统学习Excel文件处理技术。

《C#如何导入导出与处理Excel文件.doc》
将本文以doc文档格式下载到电脑,方便收藏和打印
推荐度:
点击下载文档