C#使用Datatable导出Excel

Sure,以下是详细讲解"C#使用DataTable导出Excel"的完整攻略。

1. 准备工作

在开始实现功能之前需要先添加引用,右键点击项目,选择“添加”→“引用”,然后在出现的对话框中找到“Microsoft.Office.Interop.Excel”并添加引用。还需要在文件头部添加命名空间:

using System.Data;
using Microsoft.Office.Interop.Excel; 

2. 实现导出Excel功能

2.1 创建DataTable

在使用DataTable时,需要先创建参数列并向其中添加数据,然后将参数列添加到DataTable,这里以一个简单的示例为例:

//创建参数列
DataTable dt = new DataTable();
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Age", typeof(int));
dt.Columns.Add("Birthday", typeof(string));

//添加数据
for(int i=0;i<10;i++)
{
    DataRow dr = dt.NewRow();
    dr["Name"] = "Mike" + i.ToString();
    dr["Age"] = 20 + i;
    dr["Birthday"] = "1990-01-01";
    dt.Rows.Add(dr);
}

2.2 添加到Excel

完成创建DataTable之后,就可以开始将这些数据添加到Excel中了。代码如下:

//创建Excel对象和worksheet对象
Application app = new Application();
Workbook workbook = app.Workbooks.Add();
Worksheet worksheet = workbook.Worksheets.Add();

//将DataTable添加到worksheet中
for(int i=1;i<=dt.Columns.Count;i++)
{
    worksheet.Cells[1,i]=dt.Columns[i-1].ColumnName;
}
for(int i=0;i<dt.Rows.Count;i++)
{
    for(int j=0;j<dt.Columns.Count;j++)
    {
        worksheet.Cells[i+2,j+1]=dt.Rows[i][j].ToString();
    }
}

//保存文件
workbook.SaveAs("D:\\test.xlsx");

//关闭Excel对象
workbook.Close(false, Type.Missing, Type.Missing);
app.Quit();

这里要注意的是,需要使用Microsoft.Office.Interop.Excel.Application进行创建和操作,同样需要关闭Excel对象并释放资源。

2.3 示例代码

下面是一个完整的示例代码,该代码将DataTable导出到本地的Excel文件:

using System.Data;
using Microsoft.Office.Interop.Excel;

namespace DataTableToExcelDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建参数列
            DataTable dt = new DataTable();
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Age", typeof(int));
            dt.Columns.Add("Birthday", typeof(string));

            //添加数据
            for (int i = 0; i < 10; i++)
            {
                DataRow dr = dt.NewRow();
                dr["Name"] = "Mike" + i.ToString();
                dr["Age"] = 20 + i;
                dr["Birthday"] = "1990-01-01";
                dt.Rows.Add(dr);
            }

            //创建Excel对象和worksheet对象
            Application app = new Application();
            Workbook workbook = app.Workbooks.Add();
            Worksheet worksheet = workbook.Worksheets.Add();

            //将DataTable添加到worksheet中
            for (int i = 1; i <= dt.Columns.Count; i++)
            {
                worksheet.Cells[1, i] = dt.Columns[i - 1].ColumnName;
            }
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    worksheet.Cells[i + 2, j + 1] = dt.Rows[i][j].ToString();
                }
            }

            //保存文件
            workbook.SaveAs("D:\\test.xlsx");

            //关闭Excel对象
            workbook.Close(false, Type.Missing, Type.Missing);
            app.Quit();
        }
    }
}

这个示例程序用到了创建和操作Excel文件所需的所有步骤,只需要按照指示步骤逐一实现即可完成DataTable到Excel的导出功能。

2.4 通过NPOI库导出Excel

除了使用Microsoft.Office.Interop.Excel来操作Excel之外,还可以使用NPOI库来实现。NPOI是一个流行的开源(Apache开源)库,可用于处理Excel、Word和PowerPoint等Microsoft Office应用程序文件。

下面是另一个用NPOI库实现的示例程序,该程序将DataTable导出到本地的Excel文件中:

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

namespace DataTableToExcelDemo2
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建参数列
            DataTable dt = new DataTable();
            dt.Columns.Add("Name", typeof(string));
            dt.Columns.Add("Age", typeof(int));
            dt.Columns.Add("Birthday", typeof(string));

            //添加数据
            for (int i = 0; i < 10; i++)
            {
                DataRow dr = dt.NewRow();
                dr["Name"] = "Mike" + i.ToString();
                dr["Age"] = 20 + i;
                dr["Birthday"] = "1990-01-01";
                dt.Rows.Add(dr);
            }

            //创建Excel对象和worksheet对象
            IWorkbook workbook;
            string fileName = "D:\\test.xlsx";
            if (fileName.IndexOf(".xlsx") > 0) workbook = new XSSFWorkbook();
            else if (fileName.IndexOf(".xls") > 0) workbook = new HSSFWorkbook();
            else workbook = null;
            if (workbook == null) return;

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

            //将DataTable添加到worksheet中
            IRow row = sheet.CreateRow(0);
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                ICell cell = row.CreateCell(i);
                cell.SetCellValue(dt.Columns[i].ColumnName);
            }
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                row = sheet.CreateRow(i + 1);
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    ICell cell = row.CreateCell(j);
                    cell.SetCellValue(dt.Rows[i][j].ToString());
                }
            }

            //保存文件
            FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write);
            workbook.Write(fs);
            fs.Close();

            //关闭Excel对象
            workbook.Close();
        }
    }
}

3. 总结

使用DataTable导出Excel并不难,因为.NET平台内置了一些API和库可以帮助我们实现这个功能。希望这篇文章能够帮助读者更好地理解和掌握C#中如何基于DataTable实现导出Excel的功能。

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

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

相关文章

  • linux操作系统安装MONO执行C#程序的详解步骤

    下面是安装MONO并执行C#程序的详细步骤: 简述 首先,需要理解什么是MONO。MONO是一个可跨平台的开源的.NET框架实现,它能够让开发者使用C#等.NET语言在Linux、MacOS、Windows等多个操作系统上运行程序。因此,如果你想在Linux上执行C#程序,就需要先安装MONO。 步骤 检查系统是否已经安装了MONO: 在终端中输入以下命令:…

    C# 2023年6月3日
    00
  • 记录.Net部署Docker-v指令使用

    记录Docker的-v指令使用 前言 之前我浅学了一下docker,方便部署.net项目(部署的是打包之后的项目) dockerfile文件如下: FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base WORKDIR /app EXPOSE 5031 EXPOSE 7031 FROM mcr.microsoft.c…

    C# 2023年4月25日
    00
  • ASP.NET如何自定义项目模板详解

    ASP.NET如何自定义项目模板详解 ASP.NET是一个动态站点开发工具,它可以帮助开发者快速构建Web应用程序。ASP.NET允许开发者自定义项目模板,以便在日常开发中提高工作效率。本文将介绍如何自定义ASP.NET项目模板,以及如何使用自定义项目模板。 1. 创建自定义项目模板 步骤如下: 在Visual Studio中创建一个新的ASP.NET项目。…

    C# 2023年6月3日
    00
  • .NET之后台用户权限管理实现

    下面是“.NET之后台用户权限管理实现”的完整攻略。 1. 确认需求 在实现任何功能之前,我们需要明确需求。对于后台用户权限管理这个功能,我们需要确定以下几点: 用户分组:用户可以被分配到不同的组别,不同组别可以拥有不同的权限。 权限管理:针对不同的权限,我们需要确定哪些用户有权限访问哪些页面、哪些操作。 页面控制:对于没有权限访问的页面,需要实现跳转或者显…

    C# 2023年5月31日
    00
  • C#多线程之Semaphore用法详解

    C#多线程之Semaphore用法详解 概述 Semaphore 用来控制同时访问特定资源的线程数量,可以用来实现线程的同步和互斥。Semaphore 维护了一个计数器,表示可用的资源数量。每个线程在访问资源之前都需要对 Semaphore 进行等待,如果 Semaphore 的计数器大于 0,则线程可以继续执行,同时 Semaphore 的计数器会减 1,…

    C# 2023年5月15日
    00
  • 详解C#编程中一维数组与多维数组的使用

    详解C#编程中一维数组与多维数组的使用 一维数组的定义和使用 定义 一维数组是由相同类型元素组成的一组有序集合。这些元素在内存中按照一定的顺序依次存放。在C#中,我们可以通过以下语法来定义一个一维数组: <数据类型>[] <数组名> = new <数据类型>[<数组长度>]; 例如,定义一个长度为5的int类型…

    C# 2023年6月7日
    00
  • C# String字符串案例详解

    C# String字符串案例详解 在C#编程中,字符串常常是我们经常需要处理的数据类型之一。因此,对于string类型的操作和处理,是我们编程学习的重中之重。本文将带大家详细了解C# String字符串的应用实例及操作技巧。 1. 字符串的定义及基本操作 在C#中,String字符串是一种不可变的类型,即被创建之后,它的值就不能被修改了。以下是一些定义字符串…

    C# 2023年5月31日
    00
  • C#多线程学习(一) 多线程的相关概念

    C#多线程学习(一) 多线程的相关概念 什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。 而一个进程又是由多个线程所组成的。 什么是线程? 线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针、程序计数器等), 但代码区是共享的,即不同的线程可以执行同样的函数。 什么是多线程? 多线程是指程序…

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