C# Winform中DataGridView导出为Excel的实现示例

目录
  • 1、前言
  • 2、效果展示
  • 3、详细步骤
    • 3.1 添加NPOI和NPOI.Excel包
    • 3.2 创建NPOIHelper类
    • 3.3 给画面添加SaveFileDialog
    • 3.4 引入命名空间
    • 3.5 给按钮添加click事件
  • 4、 成功
  • 5、写在最后

1、前言

话不多说,跟着我的步骤保证你也能成功,下面直接开始!

2、效果展示

导出前

导出后

3、详细步骤

下面是详细操作步骤,请跟着我的步伐,一步一步进行操作,保证你能够导出成功!

3.1 添加NPOI和NPOI.Excel包

首先请请确定你的vs已经打开了【解决方案资源管理器】,打开步骤见下图:

在资源管理器中找到【引用】,然后在【引用】上右键选择【管理程序包】并点击,如下图:

在新打开的窗口中点击【浏览】并在搜索框中依次输入NPOI和NPOI.Excel并进行安装,安装按钮位置如下图:

待安装完成再进行下一步

3.2 创建NPOIHelper类

首先在资源管理器中选中你的项目,【右键】找到【添加】–>【类】,具体如下图:

创建一个名字为【NPOIHelper.cs】的类并打开

3.2.1 导入命名空间

复制下面的代码,覆盖你自动生成的命名空间

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

3.2.2 插入代码

将下面的代码导入到下图位置:

public class ExcelUtility
        {
            /// <summary>
            /// 将excel导入到datatable
            /// </summary>
            /// <param name="filePath">excel路径</param>
            /// <param name="isColumnName">第一行是否是列名</param>
            /// <returns>返回datatable</returns>
            public static DataTable ExcelToDataTable(string filePath, bool isColumnName)
            {
                DataTable dataTable = null;
                FileStream fs = null;
                DataColumn column = null;
                DataRow dataRow = null;
                IWorkbook workbook = null;
                ISheet sheet = null;
                IRow row = null;
                ICell cell = null;
                int startRow = 0;
                try
                {
                    using (fs = File.OpenRead(filePath))
                    {
                        // 版本后缀控制
                        if (filePath.IndexOf(".xlsx") > 0)
                            workbook = new XSSFWorkbook(fs);
                        // 版本后缀控制
                        else if (filePath.IndexOf(".xls") > 0)
                            workbook = new HSSFWorkbook(fs);

                        if (workbook != null)
                        {
                            sheet = workbook.GetSheetAt(0);//读取第一个sheet,当然也可以循环读取每个sheet
                            dataTable = new DataTable();
                            if (sheet != null)
                            {
                                int rowCount = sheet.LastRowNum;//总行数
                                if (rowCount > 0)
                                {
                                    IRow firstRow = sheet.GetRow(0);//第一行
                                    int cellCount = firstRow.LastCellNum;//列数

                                    //构建datatable的列
                                    if (isColumnName)
                                    {
                                        startRow = 1;//如果第一行是列名,则从第二行开始读取
                                        for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
                                        {
                                            cell = firstRow.GetCell(i);
                                            if (cell != null)
                                            {
                                                if (cell.StringCellValue != null)
                                                {
                                                    column = new DataColumn(cell.StringCellValue);
                                                    dataTable.Columns.Add(column);
                                                }
                                            }
                                        }
                                    }
                                    else
                                    {
                                        for (int i = firstRow.FirstCellNum; i < cellCount; ++i)
                                        {
                                            column = new DataColumn("column" + (i + 1));
                                            dataTable.Columns.Add(column);
                                        }
                                    }

                                    //填充行
                                    for (int i = startRow; i <= rowCount; ++i)
                                    {
                                        row = sheet.GetRow(i);
                                        if (row == null) continue;

                                        dataRow = dataTable.NewRow();
                                        for (int j = row.FirstCellNum; j < cellCount; ++j)
                                        {
                                            cell = row.GetCell(j);
                                            if (cell == null)
                                            {
                                                dataRow[j] = "";
                                            }
                                            else
                                            {
                                                //CellType(Unknown = -1,Numeric = 0,String = 1,Formula = 2,Blank = 3,Boolean = 4,Error = 5,)
                                                switch (cell.CellType)
                                                {
                                                    case CellType.Blank:
                                                        dataRow[j] = "";
                                                        break;
                                                    case CellType.Numeric:
                                                        short format = cell.CellStyle.DataFormat;
                                                        //对时间格式(2015.12.5、2015/12/5、2015-12-5等)的处理
                                                        if (format == 14 || format == 31 || format == 57 || format == 58)
                                                            dataRow[j] = cell.DateCellValue;
                                                        else
                                                            dataRow[j] = cell.NumericCellValue;
                                                        break;
                                                    case CellType.String:
                                                        dataRow[j] = cell.StringCellValue;
                                                        break;
                                                }
                                            }
                                        }
                                        dataTable.Rows.Add(dataRow);
                                    }
                                }
                            }
                        }
                    }
                    return dataTable;
                }
                catch (Exception)
                {
                    if (fs != null)
                    {
                        fs.Close();
                    }
                    return null;
                }
            }
        }
        public static bool DataTableToExcel(DataTable dt, string txtPath)
        {
            bool result = false;
            IWorkbook workbook = null;
            FileStream fs = null;
            IRow row = null;
            ISheet sheet = null;
            ICell cell = null;
            try
            {
                if (dt != null && dt.Rows.Count > 0)
                {
                    workbook = new HSSFWorkbook();
                    sheet = workbook.CreateSheet("Sheet0");//创建一个名称为Sheet0的表
                    int rowCount = dt.Rows.Count;//行数
                    int columnCount = dt.Columns.Count;//列数

                    //设置列头
                    row = sheet.CreateRow(0);//excel第一行设为列头
                    for (int c = 0; c < columnCount; c++)
                    {
                        cell = row.CreateCell(c);
                        cell.SetCellValue(dt.Columns[c].ColumnName);
                    }

                    //设置每行每列的单元格,
                    for (int i = 0; i < rowCount; i++)
                    {
                        row = sheet.CreateRow(i + 1);
                        for (int j = 0; j < columnCount; j++)
                        {
                            cell = row.CreateCell(j);//excel第二行开始写入数据
                            cell.SetCellValue(dt.Rows[i][j].ToString());
                        }
                    }
                    using (fs = File.OpenWrite(txtPath))
                    {
                        workbook.Write(fs);//向打开的这个xls文件中写入数据
                        result = true;
                    }
                }
                MessageBox.Show("导出成功");
                return result;
            }
            catch (Exception)
            {
                if (fs != null)
                {
                    fs.Close();
                }
                return false;
            }

        }

3.3 给画面添加SaveFileDialog

首先在工具箱里找到SaveFileDialog(如果不知到工具箱在哪的可以点击上方的【视图】–> 【工具箱】)

点住SaveFileDialog拖入页面中效果如上图所示

3.4 引入命名空间

将下方命名空间引入到你按钮所在的cs中(主要是3、4)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.OleDb;

3.5 给按钮添加click事件

给按钮添加click事件(直接双击按钮即可),并在click函数中插入以下代码

//打开文件对话框,导出文件
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Title = "保存文件";
saveFileDialog1.Filter = "Excel 文件(*.xls)|*.xls|Excel 文件(*.xlsx)|*.xlsx|所有文件(*.*)|*.*";
saveFileDialog1.FileName = "用户信息.xls"; //设置默认另存为的名字
if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
{
    string txtPath = this.saveFileDialog1.FileName;
    string sql = "select ID as ID,UserName as 用户名,LoginAccount as 账号,UserPower as 用户权限,Founder as 创建者,Addtime as 创建日期,Activestate as 状态 from UserData";
    SqlHelp sqlHelper = new SqlHelp();
    DataTable dt = sqlHelper.GetDataTableValue(sql);
    NPOIHelper.DataTableToExcel(dt, txtPath);
}

注意:上面的saveFileDialog1要和你视图里的一样一般没问题,sql语句我就不详细讲了不会的可以看我其他文章。

4、 成功

相信大家根据我的步骤应该都能成功了,如果成功了别忘了三连哦!如果在操作过程中遇到什么问题记得评论或者私信。

5、写在最后

到此这篇关于C# Winform中DataGridView导出为Excel的实现示例的文章就介绍到这了,更多相关C# Winform中DataGridView导出为Excel内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C#中DataGridView导出Excel的两种方法

    第一种是用数据流导出: #region SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = "Execl files (*.xls)|*.xls"; saveFileDialog.FilterIndex = 0; saveFileDialog.RestoreDirectory = true; saveFileDialog.CreatePrompt = true; saveFileDi

  • C# Winform中DataGridView导出为Excel的实现示例

    目录 1.前言 2.效果展示 3.详细步骤 3.1 添加NPOI和NPOI.Excel包 3.2 创建NPOIHelper类 3.3 给画面添加SaveFileDialog 3.4 引入命名空间 3.5 给按钮添加click事件 4. 成功 5.写在最后 1.前言 话不多说,跟着我的步骤保证你也能成功,下面直接开始! 2.效果展示 导出前 导出后 3.详细步骤 下面是详细操作步骤,请跟着我的步伐,一步一步进行操作,保证你能够导出成功! 3.1 添加NPOI和NPOI.Excel包 首先请请确定你

  • asp.net DataGridView导出到Excel的三个方法[亲测]

    #region DataGridView数据显示到Excel    /// <summary>     /// 打开Excel并将DataGridView控件中数据导出到Excel    /// </summary>     /// <param name="dgv">DataGridView对象 </param>     /// <param name="isShowExcle">是否显示Excel界面 

  • WinForm使用DataGridView实现类似Excel表格的查找替换功能

    在桌面程序开发过程中我们常常使用DataGridView作为数据展示的表格,在表格中我们可能要对数据进行查找或者替换. 其实要实现这个查找替换的功能并不难,记录下实现过程,不一定是最好的方式,但它有用! 先看demo下效果 1.数据展示建一个WinForm窗体 GridDataWindow ,放上菜单和DataGridView控件,添加4列用来显示信息. 创建一个Person类用于显示数据 public class Person { public int ID { get; set; } pub

  • WinForm中DataGridView折叠控件【超好看】

    刚到一家新公司,领导下发任务要用cs系统做一个表格折叠显示,这真是把我难倒了,自己工作6年一直以来都是做BS的系统.这如果在BS里面那太简单了,JqGrid默认都自带,可是DataGridview不支持折叠啊.自己一点经验没有,怎么办呢?于是上网搜了相关视频,资料,开始学习起来.最后借鉴源码封了这么一个东西,发出来分享下,也能让自己加深印象. 首先不多说,上图.如果大家感谢还不错,请继续往下阅读: 大概的效果就是这样. 上代码. 1.首先重写DataGridview,代码如下: public c

  • Java使用Apache.POI中HSSFWorkbook导出到Excel的实现方法

    使用Apache.POI中HSSFWorkbook导出到Excel,具体内容如下所示: 1.引入Poi依赖(3.12) 依赖如下: <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.12</version> </dependency> 2.创建实体类(User.java) package

  • SpringBoot整合POI导出通用Excel的方法示例

    一.准备工作 1.pom依赖 在pom.xml中加入POI的依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.11-beta1</version> </dependency> <dependency> <groupId>org.apache.poi

  • Grid或者DataTable中数据导出为Excel原来这么简单

    以前一直认为,将Grid 或者DataTable中的数据导出到Excel功能实现会非常复杂,可能会想用什么类库什么的或者实在太难就用csv算了. 看了FineUI中的将Grid导出为Excel的实现方法,实际上是可以非常简单.看来很难的问题,变换一种思路就可以非常简单. 1. Aspx后台代码输出Content Type信息 复制代码 代码如下: Response.ClearContent(); Response.AddHeader("content-disposition", &qu

  • Asp.net中DataTable导出到Excel的方法介绍

    复制代码 代码如下: #region  DataTable导出到Excel        /// <summary>        /// DataTable导出到Excel        /// </summary>        /// <param name="pData">DataTable</param>        /// <param name="pFileName">导出文件名</p

  • C#中将ListView中数据导出到Excel的实例方法

    添加方法:选择项目->引用->右击"添加引用"->选择COM 找到上面组件->点击"确定".实现代码如下: 复制代码 代码如下: private void 导出数据_Click(object sender, EventArgs e)      {          ExportToExecl();      }       /// <summary>        /// 执行导出数据     /// </summary&g

随机推荐