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日

相关文章

  • C#中@的用法总结

    下面我就来详细讲解 “C#中@的用法总结” 的攻略。 正文 1. @符号的含义 在C#中,@符号是一个特殊的字符,它具有特定的含义。在C#中,@符号表示一个字符串中的所有特殊字符都不需要进行转义。 在普通的字符串中,有些特殊字符需要进行转义,如\n代表换行符,\”代表双引号,\’代表单引号等。如果要在字符串中使用这些特殊字符,我们需要使用转义字符来表示这些特…

    C# 2023年6月6日
    00
  • C# 正则表达式经典分类整理集合手册第1/3页

    C# 正则表达式经典分类整理集合手册 简介 C# 正则表达式是在.NET Framework类库中提供的一种字符串检索、匹配和替换的强大工具。该工具可以有效地处理文本数据,支持多种字符串操作方式,并且可以应用于多种编程环境中。 但是,因为 C# 正则表达式具有复杂的语法和规则,很容易让初学者在使用中遇到各种问题。为方便使用,本文融合了多种实际应用经验,以分类…

    C# 2023年6月6日
    00
  • C#使用EF连接PGSql数据库的完整步骤

    概述 C# 是一种广泛使用的编程语言,EF(Entity Framework) 是一种数据访问技术,用于在 C# 中从数据库中检索、更新和操作数据。PGSql 是一种开源的关系型数据库。 在这篇文章中,我将带你了解如何使用 Entity Framework 与 C# 连接 PGSql 数据库的完整步骤。 步骤 以下是完整的步骤: 2.1. 安装 NuGet …

    C# 2023年6月1日
    00
  • Winform中Treeview实现按需加载的方法

    一、Winform中Treeview实现按需加载的方法 Winform中的Treeview控件非常适合用于显示树形结构的数据,但如果树的层次比较多或者数据比较庞大,一次性将所有数据全部加载到TreeView中显然不太现实,这时就需要实现按需加载的功能,即当需要展开树节点时,才动态地加载该节点下的子节点。 实现按需加载需要以下几个步骤: 1.设置TreeVie…

    C# 2023年5月31日
    00
  • C#实例化和静态类对象调用对比

    下面是针对“C#实例化和静态类对象调用对比”的完整攻略。 一、实例化对象调用方法 在C#中,我们可以创建一个类的实例,从而调用该类的方法或访问该类的属性。实例化对象可以通过new关键字创建,具体代码如下: MyClass obj = new MyClass(); // 创建MyClass类的实例,存储在obj变量中 obj.MyMethod(); // 调用…

    C# 2023年6月1日
    00
  • C#使用linq对数组进行筛选排序的方法

    下面是“C#使用linq对数组进行筛选排序的方法”的完整攻略。 1. 筛选数组 使用linq对数组进行筛选的方式有很多,下面介绍几种比较常用的方法。 1.1. Where 使用Where方法可以对数组进行筛选,例如筛选出数组中大于等于10的元素,可以这样写: int[] arr = { 1, 5, 8, 10, 13, 15 }; var filteredA…

    C# 2023年6月1日
    00
  • C#如何通过RFC连接sap系统

    这里是C#通过RFC连接SAP系统的详细攻略。 一、前置要求 在进行RFC连接SAP系统之前,需要准备以下条件和环境: 已安装SAP GUI或SAP RFC SDK(建议使用SAP RFC SDK) 已获得SAP系统的RFC连接权限 熟悉C#编程语言 二、SAP RFC SDK介绍 SAP RFC SDK是一个允许开发人员使用C/C++或C#等语言连接到SA…

    C# 2023年5月15日
    00
  • C#多线程之线程同步WaitHandle

    C#多线程之线程同步WaitHandle 在C#多线程编程中,当多个线程同时访问同一个资源时,就要用到线程同步技术。WaitHandle就是其中一种线程同步机制。本文将详细讲解WaitHandle的用法。 什么是WaitHandle WaitHandle是一个抽象基类,定义了等待时的信号通知方式。它有两个主要的实现类:AutoResetEvent和Manua…

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