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日

相关文章

  • ASP.NET静态页生成方法

    ASP.NET静态页生成方法是通过预先生成静态HTML文件来加速网站加载速度,提升用户体验。以下是实现ASP.NET静态页生成的步骤和示例。 步骤 1. 编写动态页 首先编写动态ASPX或ASCX页面,通过ASP.NET的数据访问机制从数据库等获取数据,并使用ASP.NET的控件等呈现数据,实现您的网站功能。 2. 编写静态页生成脚本 创建一个静态页生成脚本…

    C# 2023年6月3日
    00
  • .NET Core API之格式化输出对象OutputFormatter

    当我们在开发.NET Core API时,有时候需要在API返回结果中自定义格式,比如JSON格式化、XML格式化或者自定义格式化等。这时我们可以使用OutputFormatter来自定义输出格式,本文将详细讲解OutputFormatter的使用方法。 什么是OutputFormatter OutputFormatter是.NET Core框架中提供的一个…

    C# 2023年5月31日
    00
  • 基础-字符串驻留池

    字符串驻留池(string intern pool)是指,对于某些编程语言,相同的字符串字面值(即具有相同文本内容的字符串)在程序运行时只会被在内存中存储一份,即只保存一个字符串实例。这样做可以减少内存占用,并提高程序执行的效率。 在 Java 中,字符串驻留池是一个存储字符串的缓存,它存储在运行时常量池中。当创建字符串对象时,如果该字符串已经存在于字符串驻…

    C# 2023年5月9日
    00
  • C#实现用户自定义控件中嵌入自己的图标

    下面是C#实现用户自定义控件中嵌入自己的图标的完整攻略: 步骤一:添加图标资源 用户可以在程序资源文件(.resx)中添加他们自己的图标,以便在自定义控件中使用。首先,需要将图标文件添加到项目的资源文件中,具体步骤如下: 在Visual Studio中打开项目,找到“资源文件”(Resources.resx); 在“资源文件”窗口中,单击“添加资源”按钮,选…

    C# 2023年6月3日
    00
  • C#中的ICustomFormatter及IFormatProvider接口用法揭秘

    下面是关于”C#中的ICustomFormatter及IFormatProvider接口用法揭秘”的详细攻略。 什么是ICustomFormatter及IFormatProvider接口 在C#中,ICustomFormatter及IFormatProvider接口是用于格式化字符串的两个重要接口。 对于使用C#进行编程的开发者而言,需要了解这两个接口的主要…

    C# 2023年5月15日
    00
  • ASP.NET Core配置文件的获取和设置

    ASP.NET Core配置文件的获取和设置 在ASP.NET Core应用程序中,我们经常需要使用配置文件来存储应用程序的配置信息。本攻略将详细介绍如何获取和设置ASP.NET Core配置文件。 获取配置文件 我们可以使用ASP.NET Core中的Configuration API来获取配置文件。我们可以使用以下代码来获取配置文件: using Mic…

    C# 2023年5月17日
    00
  • 浅谈C#基础之类的访问修饰符

    浅谈C#基础之类的访问修饰符 C#中共有5种访问修饰符,分别为public、private、protected、internal和protected internal。不同的访问修饰符可以在不同的范围内控制类、方法、属性、字段及其他成员的可访问性。 public访问修饰符 public访问修饰符用于指定一个类、方法、属性或字段可以从任何其他类(包括其他项目中…

    C# 2023年5月31日
    00
  • C# CUR类实现代码

    下面是C# CUR类实现代码的完整攻略,包含以下几个步骤: 一、什么是CUR类? CUR类是一个用来进行和处理HTTP请求的.NET类库,它可以实现URL的编码和解码,支持HTTP请求和响应,可以发送HTTP请求并获取响应。CUR类广泛应用于各种.NET开发中,比如Web应用程序、桌面应用程序等。 二、CUR类的基本用法 1. 创建CUR对象 要使用CUR类…

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