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日

相关文章

  • Entity Framework代码优先(Code First)模式

    下面是Entity Framework代码优先(Code First)模式的完整攻略,包括定义数据模型、创建数据库、数据存取操作等内容。 什么是代码优先(Code First)模式 Entity Framework是微软推出的一个ORM(对象关系映射)框架,用于简化应用程序与数据库之间的访问。Entity Framework有三种模式:数据库优先(DataB…

    C# 2023年6月3日
    00
  • C#隐藏手机号、邮箱等敏感信息的实现方法

    首先,我们需要定义一个字符串替换方法,该方法可以将指定的字符串替换为指定字符的重复串。代码实现如下: public static string Mask(string text, char maskChar = ‘*’, int startIndex = 3, int endIndex = -4) { if (string.IsNullOrEmpty(tex…

    C# 2023年5月15日
    00
  • 在Linux中安装ASPNET.Core3.0运行时的示例代码

    在Linux中安装ASP.NET Core 3.0运行时的示例代码 在本文中,我们将详细讲解如何在Linux中安装ASP.NET Core 3.0运行时,并提供两个示例说明。 准备工作 在开始之前,您需要安装以下软件: Linux操作系统(本文以Ubuntu 18.04为例) .NET Core 3.0 SDK 安装ASP.NET Core 3.0运行时 添…

    C# 2023年5月16日
    00
  • 使用C#获取系统特殊文件夹路径的解决方法

    当我们搭建一个桌面应用程序时,需要获取一些系统特殊文件夹的路径,比如应用程序数据文件夹、用户文档文件夹等。使用C#可以方便地获取这些文件夹路径,下面是一些详细的攻略介绍。 1. 使用Environment.SpecialFolder枚举获取系统特殊文件夹路径 Environment.SpecialFolder枚举包含了系统特殊文件夹的名称,可以通过该枚举获取…

    C# 2023年6月7日
    00
  • C#实现字符串首字母大写的方法示例

    请您耐心阅读以下内容。 C#实现字符串首字母大写方法的完整攻略 字符串首字母大写操作在日常编程中是非常常见的,在C#语言中,实现字符串首字母大写有很多种方法。下面将会介绍两种比较常用的方法。 方法一:Substring方法实现 string str = "hello world"; string firstChar = str.Subst…

    C# 2023年6月8日
    00
  • WPF实现文本描边+外发光效果的示例代码

    WPF(Windows Presentation Foundation)是一种用于创建Windows桌面应用程序的技术。WPF提供了丰富的UI元素和效果,可以轻松实现文本描边和外发光效果。本文将提供WPF实现文本描边和外发光效果的完整攻略,包括创建WPF应用程序、实现文本描边、实现外发光效果、示例等。 创建WPF应用程序 要创建WPF应用程序,可以使用Vis…

    C# 2023年5月15日
    00
  • C#中委托用法实例详解

    下面是详细讲解“C#中委托用法实例详解”: 什么是委托 委托是一种类型,它可以用于封装对方法的引用。简单来说,委托就是存储了方法的对象,可以像对待方法一样对待它并向它传递参数。在C#中,使用委托可以大大简化回调函数,具有非常强的灵活性。 如何声明委托 使用delegate关键字可以声明一个委托,如下所示: delegate void MyDelegate(i…

    C# 2023年6月7日
    00
  • asp.net 无刷新分页实例代码

    ASP.NET 是一款开放源码的服务器端 Web 应用程序框架,提供了丰富的功能和强大的工具,为开发者提供了高效的方式来构建、部署和维护 Web 应用程序。无刷新分页是其中一个常见需求,本文将通过两个示例来演示如何实现ASP.NET无刷新分页功能。 示例1:使用AJAX实现无刷新分页 步骤1:创建数据库表和数据 CREATE TABLE [dbo].[Use…

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