c# 将Datatable数据导出到Excel表格中

下面是将Datatable数据导出到Excel表格中的完整攻略。

1. 准备工作

在开始操作之前,需要确保已经将NPOI引入到项目中。可以通过NuGet包管理器或手动下载NPOI工具包的方式引入。

2. 代码实现

在代码中需要引入以下命名空间:

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;

具体实现步骤如下:

  1. 根据Excel版本创建一个工作簿对象:

C#
IWorkbook workbook = null;
if (excelType == ".xlsx")
{
workbook = new XSSFWorkbook();
}
else if (excelType == ".xls")
{
workbook = new HSSFWorkbook();
}

在创建工作簿对象时需要根据Excel文件的版本来选择HSSFWorkbook对象或XSSFWorkbook对象。

  1. 创建一个sheet,并设置sheet的名称:

C#
ISheet sheet = workbook.CreateSheet("Sheet1");

  1. 创建Excel的表头:

C#
IRow firstRow = sheet.CreateRow(0);
for (int i = 0; i < dataTable.Columns.Count; i++)
{
ICell cell = firstRow.CreateCell(i);
cell.SetCellValue(dataTable.Columns[i].ColumnName);
}

创建表头需要遍历datatable的列来创建一个单元格,设置单元格的值即为列名。

  1. 遍历datatable中的所有数据,并将数据填充到Excel表格对应的区域:

C#
for (int i = 0; i < dataTable.Rows.Count; i++){
IRow row = sheet.CreateRow(i + 1);
for (int j = 0; j < dataTable.Columns.Count; j++){
ICell cell = row.CreateCell(j);
cell.SetCellValue(dataTable.Rows[i][j].ToString());
}
}

遍历每一行数据,根据datatable的列数来创建单元格,将datatable中的数据填充到单元格中。

  1. 在内存中创建Excel文件,并保存文件:

C#
MemoryStream ms = new MemoryStream();
workbook.Write(ms);
byte[] fileByte = ms.ToArray();
File.WriteAllBytes(filePath, fileByte);

将Excel文件写入内存流中,然后将流写入到磁盘中。

完整代码如下:

public static void DataTableToExcel(DataTable dataTable, string filePath, string excelType)
{
    IWorkbook workbook = null;
    if (excelType == ".xlsx")
    {
        workbook = new XSSFWorkbook();
    }
    else if (excelType == ".xls")
    {
        workbook = new HSSFWorkbook();
    }

    ISheet sheet = workbook.CreateSheet("Sheet1");

    IRow firstRow = sheet.CreateRow(0);
    for (int i = 0; i < dataTable.Columns.Count; i++)
    {
        ICell cell = firstRow.CreateCell(i);
        cell.SetCellValue(dataTable.Columns[i].ColumnName);
    }

    for (int i = 0; i < dataTable.Rows.Count; i++)
    {
        IRow row = sheet.CreateRow(i + 1);
        for (int j = 0; j < dataTable.Columns.Count; j++)
        {
            ICell cell = row.CreateCell(j);
            cell.SetCellValue(dataTable.Rows[i][j].ToString());
        }
    }

    MemoryStream ms = new MemoryStream();
    workbook.Write(ms);
    byte[] fileByte = ms.ToArray();
    File.WriteAllBytes(filePath, fileByte);
}

3. 示例

下面是两个示例,一个是将一个datatable中的数据导出为Excel,一个是将两个datatable中的数据导出到Excel并分页放置。

示例1

DataTable dataTable = new DataTable();
dataTable.Columns.Add("col1", typeof(string));
dataTable.Columns.Add("col2", typeof(int));
dataTable.Columns.Add("col3", typeof(DateTime));
dataTable.Rows.Add("string1", 1, DateTime.Now);
dataTable.Rows.Add("string2", 2, DateTime.Now);
dataTable.Rows.Add("string3", 3, DateTime.Now);

DataTableToExcel(dataTable, @"C:\temp\test.xlsx", ".xlsx");

示例2

DataTable dataTable1 = new DataTable();
dataTable1.Columns.Add("col1", typeof(string));
dataTable1.Columns.Add("col2", typeof(int));
dataTable1.Columns.Add("col3", typeof(DateTime));
dataTable1.Rows.Add("string1", 1, DateTime.Now);
dataTable1.Rows.Add("string2", 2, DateTime.Now);

DataTable dataTable2 = new DataTable();
dataTable2.Columns.Add("col1", typeof(string));
dataTable2.Columns.Add("col2", typeof(int));
dataTable2.Columns.Add("col3", typeof(DateTime));
dataTable2.Rows.Add("string3", 3, DateTime.Now);

IWorkbook workbook = new XSSFWorkbook();
ISheet sheet1 = workbook.CreateSheet("Sheet1");

IRow firstRow = sheet1.CreateRow(0);
for (int i = 0; i < dataTable1.Columns.Count; i++)
{
    ICell cell = firstRow.CreateCell(i);
    cell.SetCellValue(dataTable1.Columns[i].ColumnName);
}

for (int i = 0; i < dataTable1.Rows.Count; i++)
{
    IRow row = sheet1.CreateRow(i + 1);
    for (int j = 0; j < dataTable1.Columns.Count; j++)
    {
        ICell cell = row.CreateCell(j);
        cell.SetCellValue(dataTable1.Rows[i][j].ToString());
    }
}

ISheet sheet2 = workbook.CreateSheet("Sheet2");
firstRow = sheet2.CreateRow(0);
for (int i = 0; i < dataTable2.Columns.Count; i++)
{
    ICell cell = firstRow.CreateCell(i);
    cell.SetCellValue(dataTable2.Columns[i].ColumnName);
}

for (int i = 0; i < dataTable2.Rows.Count; i++)
{
    IRow row = sheet2.CreateRow(i + 1);
    for (int j = 0; j < dataTable2.Columns.Count; j++)
    {
        ICell cell = row.CreateCell(j);
        cell.SetCellValue(dataTable2.Rows[i][j].ToString());
    }
}

using (FileStream fs = File.Create(@"C:\temp\test.xlsx"))
{
    workbook.Write(fs);
}

这个示例将数据拆分成了两个datatable,然后使用NPOI创建两个sheet,并为每个sheet填充对应的数据。最终将所有数据写入Excel文件中,生成一个带有两个sheet的Excel文件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c# 将Datatable数据导出到Excel表格中 - Python技术站

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

相关文章

  • .NET Core开源 DDD微服务 支持 多租户 单点登录 多级缓存、自动任务、分布式、日志、授权和鉴权 、网关 、注册与发现 系统架构 docker部署

    源代码地址https://github.com/junkai-li/NetCoreKevin基于NET6搭建跨平台DDD思想WebApi架构、IDS4单点登录、多缓存、自动任务、分布式、多租户、日志、授权和鉴权、CAP、SignalR、 docker部署  如需简约项目可直接去除项目引用 解耦设计都可以单独引用 架构默认全部引用并启动 项目启动时注意相关 R…

    C# 2023年4月27日
    00
  • ASP.NET缓存方法分析和实践示例代码第1/2页

    ASP.NET缓存方法是提高网站性能的重要手段之一。为了更好地理解和应用ASP.NET缓存方法,我们需要进行分析和实践。以下是ASP.NET缓存方法的攻略: 1. 缓存介绍 缓存是对于经常被查询的数据的极限优化,它可以通过减少对数据库的重复查询来提高网站的性能。在ASP.NET中,我们可以使用多种缓存方式来提高网站的性能,如Output Cache、Page…

    C# 2023年5月31日
    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#插入图片到Excel表格单元格代码详解

    下面是详细讲解“C#插入图片到Excel表格单元格代码详解”的完整攻略。 简介 在使用C#处理Excel表格的过程中,插入图片是一个常见的需要,本文将讲解如何使用C#代码将图片插入到Excel表格单元格中。 准备工作 在开始之前,需要先检查电脑是否安装了Microsoft Office软件(包括Excel),还需要安装Excel程序集,以便我们可以在C#中使…

    C# 2023年6月6日
    00
  • 详解ASP.NET Core3.0 配置的Options模式

    详解ASP.NET Core3.0 配置的Options模式攻略 在本攻略中,我们将详细讲解如何使用ASP.NET Core3.0配置的Options模式,并提供两个示例说明。 步骤一:创建配置类 在应用程序中,您需要创建一个名为AppSettings的类,并定义应用程序的所有配置。以下是一个示例AppSettings类: public class AppS…

    C# 2023年5月17日
    00
  • C#的四种基本数据类型

    当我们进行C#编程时,常常需要使用到不同类型的数据,C#中共有四种基本的数据类型,它们分别是整型(int)、浮点型(float)、布尔型(bool)和字符型(char)。 整型(int) 整型在C#中表示数值,其中的值可以是正数,负数或0。整型变量可以存储在2字节、4字节或8字节内,根据使用情况可以选择适当的存储空间。下面是一个整型变量的声明和赋值示例: i…

    C# 2023年6月7日
    00
  • C#使用ILGenerator动态生成函数的简单代码

    C#使用ILGenerator动态生成函数的简单代码,可以让开发者在运行时动态构建函数,从而提高代码的灵活性和可扩展性。下面我们来详细讲解一下生成函数的步骤及具体代码实现。 准备工作 在使用ILGenerator动态生成函数的时候,需要引入以下两个命名空间: using System.Reflection.Emit; // 引入类库 using System…

    C# 2023年5月15日
    00
  • 如何使用Swagger上传文件

    Swagger是一种流行的API文档工具,它可以帮助开发人员快速创建和测试API。在Swagger中,可以使用Swagger UI来测试API,其中包括上传文件的功能。下面是如何使用Swagger上传文件的完整攻略: 步骤一:安装Swagger 首先,需要安装Swagger。可以使用以下命令在.NET Core应用程序中安装Swagger: dotnet a…

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