C#的Excel导入、导出

下面给您详细讲解C#中的Excel导入和导出的完整攻略。

导入Excel

使用第三方库

要导入Excel文件到C#程序中,常用的做法是使用第三方库。其中比较常用的库有:

  • NPOI:NPOI是C#的开源库,用于按照Microsoft Office的公开标准读写Excel文件。功能强大,支持.xls、.xlsx、.ppt、.pptx、.doc和.docx等Office文件格式。此外,NPOI还支持Word/Excel的图表、图片等功能。

  • EPPlus:EPPlus是C#的开源库,用于按照Microsoft Office的公开标准读写Excel 2007/2010/2013/2016/2019文件(.xlsx、.xlsm)。内部使用OpenXml SDK。使用起来比NPOI更加简单。

下面是使用NPOI读取Excel文件的示例代码:

using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.IO;

static void Main(string[] args)
{
    string filePath = @"C:\example.xlsx";
    using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
    {
        XSSFWorkbook workbook = new XSSFWorkbook(file);
        XSSFSheet sheet = (XSSFSheet)workbook.GetSheet("Sheet1");
        if (sheet != null)
        {
            for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
            {
                IRow row = sheet.GetRow(i);
                if (row != null)
                {
                    string cell1 = row.GetCell(0) != null ? row.GetCell(0).ToString() : "";
                    string cell2 = row.GetCell(1) != null ? row.GetCell(1).ToString() : "";
                    string cell3 = row.GetCell(2) != null ? row.GetCell(2).ToString() : "";
                    Console.WriteLine($"第{i+1}行数据:{cell1}、{cell2}、{cell3}");
                }
            }
        }
        workbook.Close();
    }
}

上面的代码使用了NPOI的XSSFWorkbook和XSSFSheet类读取Excel文件数据。其中,XSSFWorkbook表示整个Excel工作簿,XSSFSheet表示工作簿中的表格,IRow表示Excel表格中的行,ICell表示Excel行中的单元格。通过代码可以看到,我们可以根据行和列的下标获取Excel表格中的单元格数据,然后进行进一步处理。

如果您使用了EPPlus库,则需要调用其提供的类和方法进行Excel读取。下面是使用EPPlus读取Excel文件的示例代码:

using OfficeOpenXml;
using System.IO;

static void Main(string[] args)
{
    string filePath = @"C:\example.xlsx";
    using (ExcelPackage package = new ExcelPackage(new FileInfo(filePath)))
    {
        ExcelWorksheet worksheet = package.Workbook.Worksheets["Sheet1"];
        if (worksheet != null)
        {
            for (int i = 2; i <= worksheet.Dimension.End.Row; i++)
            {
                string cell1 = worksheet.Cells[i, 1].Value?.ToString() ?? "";
                string cell2 = worksheet.Cells[i, 2].Value?.ToString() ?? "";
                string cell3 = worksheet.Cells[i, 3].Value?.ToString() ?? "";
                Console.WriteLine($"第{i}行数据:{cell1}、{cell2}、{cell3}");
            }
        }
    }
}

可以看到,使用EPPlus读取Excel文件的代码也比较简洁,与上面使用NPOI的代码有一些区别,不过逻辑相同。

使用OleDbDataReader读取Excel文件

除了使用第三方库,我们还可以使用OleDbDataReader读取Excel文件数据。下面是使用OleDbDataReader读取Excel文件数据的示例代码:

using System.Data.OleDb;
using System.IO;

static void Main(string[] args)
{
    string connectionString = $@"Provider=Microsoft.ACE.OLEDB.12.0;
                                 Data Source=C:\example.xlsx;
                                 Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1;'";
    string commandText = "SELECT * FROM [Sheet1$]";
    using (OleDbConnection connection = new OleDbConnection(connectionString))
    {
        connection.Open();
        using (OleDbCommand command = new OleDbCommand(commandText, connection))
        {
            using (OleDbDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    string cell1 = reader[0] != null ? reader[0].ToString() : "";
                    string cell2 = reader[1] != null ? reader[1].ToString() : "";
                    string cell3 = reader[2] != null ? reader[2].ToString() : "";
                    Console.WriteLine($"第{reader.Depth+1}行数据:{cell1}、{cell2}、{cell3}");
                }
            }
        }
    }
}

上面的代码中,connectionString表示OleDb连接字符串,commandText表示查询表格中的全部数据。我们可以看到,使用OleDbDataReader也可以轻松地读取Excel文件数据。

导出Excel

要将C#程序中的数据导出到Excel文件中,我们一般也会使用第三方库来实现。常用的库包括:

  • NPOI
  • EPPlus
  • ClosedXML:ClosedXML是C#的开源库,用于按照Microsoft Office的公开标准读写Excel文件,支持.xls、.xlsx文件,比NPOI和EPPlus更加易用。

下面是使用NPOI将数据导出到Excel文件的示例代码:

using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.IO;

static void Main(string[] args)
{
    string filePath = @"C:\export.xlsx";
    using (FileStream file = new FileStream(filePath, FileMode.Create, FileAccess.Write))
    {
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = (XSSFSheet)workbook.CreateSheet("Sheet1");
        sheet.CreateRow(0).CreateCell(0).SetCellValue("姓名");
        sheet.GetRow(0).CreateCell(1).SetCellValue("年龄");
        sheet.GetRow(0).CreateCell(2).SetCellValue("性别");
        sheet.CreateRow(1).CreateCell(0).SetCellValue("张三");
        sheet.GetRow(1).CreateCell(1).SetCellValue(18);
        sheet.GetRow(1).CreateCell(2).SetCellValue("男");
        sheet.CreateRow(2).CreateCell(0).SetCellValue("李四");
        sheet.GetRow(2).CreateCell(1).SetCellValue(20);
        sheet.GetRow(2).CreateCell(2).SetCellValue("女");
        workbook.Write(file);
        workbook.Close();
    }
}

上面的代码中,我们使用了NPOI的XSSFWorkbook、XSSFSheet、IRow、ICell等类来创建Excel工作簿、表格、行和单元格,并且给单元格设置了值。最后将Excel工作簿内容写入到文件中。

使用EPPlus导出Excel文件的方法与上面类似,下面是示例代码:

using OfficeOpenXml;
using System.IO;

static void Main(string[] args)
{
    string filePath = @"C:\export.xlsx";
    using (ExcelPackage package = new ExcelPackage(new FileInfo(filePath)))
    {
        ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Sheet1");
        worksheet.Cells[1, 1].Value = "姓名";
        worksheet.Cells[1, 2].Value = "年龄";
        worksheet.Cells[1, 3].Value = "性别";
        worksheet.Cells[2, 1].Value = "张三";
        worksheet.Cells[2, 2].Value = 18;
        worksheet.Cells[2, 3].Value = "男";
        worksheet.Cells[3, 1].Value = "李四";
        worksheet.Cells[3, 2].Value = 20;
        worksheet.Cells[3, 3].Value = "女";
        package.Save();
    }
}

使用ClosedXML导出Excel文件的方法也比较简单,下面是示例代码:

using ClosedXML.Excel;
using System.IO;

static void Main(string[] args)
{
    string filePath = @"C:\export.xlsx";
    using (XLWorkbook workbook = new XLWorkbook())
    {
        IXLWorksheet worksheet = workbook.Worksheets.Add("Sheet1");
        worksheet.Cell(1, 1).Value = "姓名";
        worksheet.Cell(1, 2).Value = "年龄";
        worksheet.Cell(1, 3).Value = "性别";
        worksheet.Cell(2, 1).Value = "张三";
        worksheet.Cell(2, 2).Value = 18;
        worksheet.Cell(2, 3).Value = "男";
        worksheet.Cell(3, 1).Value = "李四";
        worksheet.Cell(3, 2).Value = 20;
        worksheet.Cell(3, 3).Value = "女";
        workbook.SaveAs(filePath);
    }
}

以上就是C#中的Excel导入和导出的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#的Excel导入、导出 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • Redis总结笔记(二):C#连接Redis简单例子

    这篇文章是讲解如何在C#中连接Redis数据库,并进行简单的操作。文章会包含以下几个部分: 环境准备 Nuget安装Redis库 Redis连接与配置 Redis常用操作示例 1. 环境准备 在C#中连接Redis之前,需要确保本地已经安装好了Redis数据库,并且正在运行。可在Redis官网下载安装Redis,也可以下载Redis Desktop Mana…

    C# 2023年5月31日
    00
  • 记一次 .NET 某设备监控系统 死锁分析

    一:背景 1. 讲故事 上周看了一位训练营朋友的dump,据朋友说他的程序卡死了,看完之后发现是一例经典的死锁问题,蛮有意思,这个案例算是学习 .NET高级调试 入门级的案例,这里和大家分享一下。 二:WinDbg 分析 1. 程序为什么会卡死 因为是窗体程序,所以看主线程的线程栈就好了,如果卡在 用户态 那这个问题相对容易解决,如果卡在 内核态 这个问题就…

    C# 2023年4月18日
    00
  • C#使用CefSharp实现内嵌网页详解

    C#使用CefSharp实现内嵌网页详解 CefSharp是一个基于Chromium的.NET开源项目,它提供了一个简单的方法来在C#应用程序中嵌入浏览器。本文将介绍如何使用CefSharp实现内嵌网页,包括以下步骤: 安装CefSharp 创建WinForms应用程序 实现内嵌网页 1. 安装CefSharp 首先,我们需要安装CefSharp。可以使用N…

    C# 2023年5月15日
    00
  • 在 C# 中使用 Span 和 Memory 编写高性能代码的详细步骤

    在 C# 中,Span 和 Memory 是用于优化代码性能的关键类型。Span 是一种结构体类型,它将对象内存表示为连续的、可编辑的范围。Memory 则是一个类类型,可以包装一段内存以及操作该内存的方法。使用这两种类型,可以使代码更高效地使用内存和更快地执行。 下面介绍一些使用 Span 和 Memory 编写高性能代码的详细步骤。 步骤一:创建 Spa…

    C# 2023年6月3日
    00
  • C# WinForm程序处理后台繁忙导致前台控件假死现象解决方法

    背景介绍C# WinForm程序处理后台繁忙导致前台控件假死现象,是C#程序员常见的问题之一。为了提升程序的用户体验,我们需要采取措施解决此问题。 解决方法①使用多线程异步处理:在C# WinForm程序中,多线程是解决后台繁忙导致前台假死的最好方法。我们可以使用C#语言内置的多线程操作来实现此功能。例如采用BackgroundWorker组件实现异步处理。…

    C# 2023年5月31日
    00
  • 基于数据类型转换(装箱与拆箱)与常量详解

    基于数据类型转换(装箱与拆箱)与常量详解 数据类型转换 数据类型转换是指将一种数据类型转换成另一种数据类型的过程。在Java中,数据类型可以分为两种:基本数据类型和引用数据类型。而数据类型转换又分为两种:自动类型转换和强制类型转换。 自动类型转换 自动类型转换是指将数据类型范围小的类型转换为数据类型范围大的类型的过程。在此过程中,系统会自动将数据类型范围小的…

    C# 2023年5月15日
    00
  • 学习TraceLogging事件,使用ETW记录,并使用WPA捕获和分析跟踪

    优化响应行为的交互 下载WINDOWS评估和部署工具包 (Windows ADK) 保持默认安装 驱动延迟优化的基本步骤包括: 定义方案并添加 TraceLogging 事件。TraceLogging 是用于日志记录事件的系统,无需清单即可解码,TraceLogging基于windows事件跟踪(ETW),并提供检测代码的简化办法。C#可选的有.NET Ev…

    C# 2023年4月30日
    00
  • winform dateTime数据类型转换方法

    接下来我会详细讲解winform DateTime数据类型转换方法的完整攻略。 1. DateTime数据类型简介 DateTime是.NET Framework的一个结构,它主要用于表示日期和时间值。在开发WinForm应用程序中,我们经常需要使用DateTime来处理日期时间相关的操作,而在操作过程中需要涉及到不同的格式和类型的转换。 2. ToStri…

    C# 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部