一、NPOI控件概述

NPOI,顾名思义,就是POI的.NET版本。那POI又是什么呢?POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的情况下读写Office 97-2003的文件、Office2007以及Office2010,支持的文件格式包括xls, doc, ppt等

NPOI 2.0+主要由SS, HPSF, DDF, HSSF, XWPF, XSSF, OpenXml4Net, OpenXmlFormats组成,具体列表如下:

          Assembly名称    模块/命名空间                                             说明
NPOI.DLL

NPOI.POIFS

OLE2/ActiveX文档属性读写库

NPOI.DLL

NPOI.DDF

微软Office Drawing读写库

NPOI.DLL

NPOI.HPSF

OLE2/ActiveX文档读写库

NPOI.DLL

NPOI.HSSF

微软Excel BIFF(Excel 97-2003, doc)格式读写库(导出xls格式

NPOI.DLL

NPOI.SS

Excel公用接口及Excel公式计算引擎

NPOI.DLL

NPOI.Util

基础类库,提供了很多实用功能,可用于其他读写文件格式项目的开发

NPOI.OOXML.DLL NPOI.XSSF Excel 2007(xlsx)格式读写库(导出xlsx格式
NPOI.OOXML.DLL NPOI.XWPF Word 2007(docx)格式读写库
NPOI.OpenXml4Net.DLL NPOI.OpenXml4Net OpenXml底层zip包读写库
NPOI.OpenXmlFormats.DLL NPOI.OpenXmlFormats 微软Office OpenXml对象关系库
     

导出xls格式用HSSF,请包含:using NPOI.HSSF.UserModel;

using NPOI.HSSF.UserModel;

导出xlsx格式用XSSF ,请包含:using NPOI.XSSF.UserModel;

using NPOI.XSSF.UserModel;

二、NPOI控件下载

有2种途径下载NPOI控件,方法1是官网下载,但是比较麻烦,需要自己编译成DLL文件。方法2是利用Visual Studio 2017的NuGet包管理器。

用Visual Studio 2017的NuGet包管理器下载最方便,可以直接下载到DLL库。

1、官网下载NPOI

http://npoi.codeplex.com/releases/

2、Visual Studio 2017的NuGet包管理器下载

三、创建数据库

数据库名称=CarSYS
        数据库CarSYS内有一个Brand表
        数据库CarSYS的Brand表内有2个字段:BrandId,BrandName。

四、创建ASP.NET WEB程序

五、用Visual Studio 2017的NuGet包管理器下载NPOI库

1、鼠标右键单击【引用】,弹出下拉菜单中选择【管理NuGet程序包】

鼠标点击浏览,在输入框中输入NPOI,会在下面出现NPOI下载项(我下载的时候NPOI最新版本为V2.5.1)。

鼠标点击NPO由NPOI Contributors,5.62M个下载,右边会出现当前版本号和安装按钮。(当前版本号为:最新稳定版本2.5.1)

鼠标点击上图的【安装】按钮,安装进程参见下图

安装完毕,可在右边的【引用】中观察到NPOI库,包括:

LCSharpCode.SharpZIPLib,NPOI,NPOI.OOXML,NPOI.OpenXml4Net,NPOI.OpenXmlFormats。

六、添加MySQL库

要想添加MySQL库前提是你的电脑上已经安装好了MySQL数据库。

七、编写代码

1、在WebForm1.aspx中添加一个按钮,命名为btnExport,按钮文本为“导出到EXCEL”。

2、在在WebForm1.aspx.cs中编写代码

(1)、一定要添加MySQL的命名空间

using MySql.Data.MySqlClient;

(2)、一定要添加NPOI的命名空间

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

(3)、添加程序代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;using MySql.Data.MySqlClient;using NPOI;
using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;namespace 用NPOI控件把MySQL数据库中查询出来的数据数据导出到EXCEL
{public partial class WebForm1 : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){}protected void btnExport_Click(object sender, EventArgs e){string constr = "Server=localhost;UserId=root;Password=68331;Database=CarSYS;pooling=false;CharSet=utf8;port=3306";//声明一个字符串用来存放连接数据库的信息//string sql = "select * from Brand";//声明一个字符串,用来存放查询数据库表语句MySqlConnection con = new MySqlConnection(constr);//创建一个SqlConnection对象,由于我使用的是MySQL数据库,因此注意要引用using MySql.Data.MySqlClient;try       //将可能出错的语句放在try语句里{con.Open();MySqlCommand cmd = new MySqlCommand();cmd.Connection = con;cmd.CommandText = "select * from Brand where BrandId>=1 && BrandId <=3";  //声明一个字符串,用来存放查询数据库表语句MySqlDataReader reader = cmd.ExecuteReader();DataTable dt = ReaderToTable(reader);ExportExcel(dt);con.Close();con.Dispose();cmd.Dispose();reader.Close();dt.Dispose();}catch (Exception ex){Response.Write(ex.Message);}finally{con.Close();//关闭数据库连接}}protected DataTable ReaderToTable(MySqlDataReader dr){DataTable dt = new DataTable();for (int i = 0; i < dr.FieldCount; i++){dt.Columns.Add(dr.GetName(i), dr.GetFieldType(i));}object[] objValues = new object[dr.FieldCount];while (dr.Read()){dr.GetValues(objValues);dt.LoadDataRow(objValues, true);}dr.Close();return dt;}protected void ExportExcel(DataTable dt){HttpContext curContext = HttpContext.Current;//设置编码及附件格式curContext.Response.ContentType = "application/vnd.ms-excel";curContext.Response.ContentEncoding = Encoding.UTF8;curContext.Response.Charset = "";string fullName = HttpUtility.UrlEncode("FileName.xls", Encoding.UTF8);curContext.Response.AppendHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(fullName, Encoding.UTF8));  //attachment后面是分号byte[] data = TableToExcel(dt, fullName).GetBuffer();curContext.Response.BinaryWrite(TableToExcel(dt, fullName).GetBuffer());curContext.Response.End();}public MemoryStream TableToExcel(DataTable dt, string file){//创建workbookIWorkbook workbook;string fileExt = Path.GetExtension(file).ToLower();if (fileExt == ".xlsx")workbook = new XSSFWorkbook();else if (fileExt == ".xls")workbook = new HSSFWorkbook();elseworkbook = null;//创建sheetISheet sheet = workbook.CreateSheet("Sheet1");//表头IRow headrow = sheet.CreateRow(0);for (int i = 0; i < dt.Columns.Count; i++){ICell headcell = headrow.CreateCell(i);headcell.SetCellValue(dt.Columns[i].ColumnName);}//表内数据for (int i = 0; i < dt.Rows.Count; i++){IRow 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());}}//转化为字节数组MemoryStream ms = new MemoryStream();workbook.Write(ms);ms.Flush();ms.Position = 0;return ms;}}
}

结果发现如下错误:

错误1参见下图

添加   using System.Data;   后,DataTable错误消失。

using System.Data;

添加后   using System.Text;   ,Encoding错误消失。

using System.Text;

添加   using System.IO;   后,Path和MemoryStream错误消失。

(4)、完整无任何错误的程序代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;using MySql.Data.MySqlClient;using NPOI;
using NPOI.SS.UserModel;
using NPOI.HSSF.UserModel;
using NPOI.XSSF.UserModel;using System.Data;
using System.Text;
using System.IO;namespace 用NPOI控件把MySQL数据库中查询出来的数据数据导出到EXCEL
{public partial class WebForm1 : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){}protected void btnExport_Click(object sender, EventArgs e){string constr = "Server=localhost;UserId=root;Password=68331;Database=CarSYS;pooling=false;CharSet=utf8;port=3306";//声明一个字符串用来存放连接数据库的信息//string sql = "select * from Brand";//声明一个字符串,用来存放查询数据库表语句MySqlConnection con = new MySqlConnection(constr);//创建一个SqlConnection对象,由于我使用的是MySQL数据库,因此注意要引用using MySql.Data.MySqlClient;try       //将可能出错的语句放在try语句里{con.Open();MySqlCommand cmd = new MySqlCommand();cmd.Connection = con;cmd.CommandText = "select * from Brand where BrandId>=1 && BrandId <=3";  //声明一个字符串,用来存放查询数据库表语句MySqlDataReader reader = cmd.ExecuteReader();DataTable dt = ReaderToTable(reader);ExportExcel(dt);con.Close();con.Dispose();cmd.Dispose();reader.Close();dt.Dispose();}catch (Exception ex){Response.Write(ex.Message);}finally{con.Close();//关闭数据库连接}}protected DataTable ReaderToTable(MySqlDataReader dr){DataTable dt = new DataTable();for (int i = 0; i < dr.FieldCount; i++){dt.Columns.Add(dr.GetName(i), dr.GetFieldType(i));}object[] objValues = new object[dr.FieldCount];while (dr.Read()){dr.GetValues(objValues);dt.LoadDataRow(objValues, true);}dr.Close();return dt;}protected void ExportExcel(DataTable dt){HttpContext curContext = HttpContext.Current;//设置编码及附件格式curContext.Response.ContentType = "application/vnd.ms-excel";curContext.Response.ContentEncoding = Encoding.UTF8;curContext.Response.Charset = "";string fullName = HttpUtility.UrlEncode("FileName.xls", Encoding.UTF8);curContext.Response.AppendHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(fullName, Encoding.UTF8));  //attachment后面是分号byte[] data = TableToExcel(dt, fullName).GetBuffer();curContext.Response.BinaryWrite(TableToExcel(dt, fullName).GetBuffer());curContext.Response.End();}public MemoryStream TableToExcel(DataTable dt, string file){//创建workbookIWorkbook workbook;string fileExt = Path.GetExtension(file).ToLower();if (fileExt == ".xlsx")workbook = new XSSFWorkbook();else if (fileExt == ".xls")workbook = new HSSFWorkbook();elseworkbook = null;//创建sheetISheet sheet = workbook.CreateSheet("Sheet1");//表头IRow headrow = sheet.CreateRow(0);for (int i = 0; i < dt.Columns.Count; i++){ICell headcell = headrow.CreateCell(i);headcell.SetCellValue(dt.Columns[i].ColumnName);}//表内数据for (int i = 0; i < dt.Rows.Count; i++){IRow 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());}}//转化为字节数组MemoryStream ms = new MemoryStream();workbook.Write(ms);ms.Flush();ms.Position = 0;return ms;}}
}

八、运行程序

       程序运行后, 鼠标点【导出到EXCEL】按钮无任何反应。

(1)、打开WebForm1.aspx,发现单击按钮btnExport关联的是Page_Load

(2)、把按钮btnExport的关联由Page_Load修改为btnExport_Click,参见下图

(3)、再次运行程序

点击【导出到EXCEL】,出现如下提示“你想怎么处理FileName.xls”,点击【保存】即可将MYSQL数据库符合条件的数据导出到EXCEL文件中。

(4)、将MYSQL数据库符合条件的数据导出到EXCEL文件参见下图

C#用NPOI控件把MySQL数据库中查询符合条件的数据导出到EXCEL相关推荐

  1. laravel mysql rand_laravel如何从mysql数据库中随机抽取n条数据(高性能) - Laravel学习网...

    laravel如何高性能地从mysql数据库中随机获取n条数据,有时候我们常常会需要从数据库随机获取数据,比如:给工作人员随机分配10个订单,随机从数据库中随机抽查100个用户:这样我们就需要随机从数 ...

  2. Mysql数据库备份和按条件导出表数据

    Mysql数据库备份和按条件导出表数据 一.备份数据库 # mysqldump -u root -p  dbcurr>/home/20090219.sql mysqldum为备份命令,-u用户, ...

  3. mysql导出权限授权_本文实例讲述了mysql数据库创建账号、授权、数据导出、导入操作。分享给大家供大家参考,具体如下:1、账号创建及授权grant all privileg...

    本文实例讲述了mysql数据库创建账号.授权.数据导出.导入操作.分享给大家供大家参考,具体如下: 1.账号创建及授权 grant all privileges on *.* to 'yangxin' ...

  4. mysql数据库中查询第几条到第几条数据_在 mysql 数据库中,从查询结果的第四条记录开始选取5条记录,下面 sql 语句正确的是( )...

    [单选题]同一种货物,在同一线路上或平行线路上作相对方向的运送,而与对方运程的全部或一部分发生重迭交错的运输被称为( ). [多选题]水闸一般由()三部分组成 [单选题]在一个常规的统计表内,非必需包 ...

  5. mysql 对表数据进行求和分组并在结果中筛选符合条件的数据 having group by count

    查询table表查询每一个班级中年龄大于20,性别为男的人数 select COUNT(*)as '大于20岁人数',classid  from Table1 where sex='男' group ...

  6. datagridview控件读写mysql数据库表格的方法_C#读写Access数据库、表格datagridview窗体显示代码实例...

    C#读写Access数据库.表格datagridview窗体显示代码实例 最近项目中用到C#对于Access数据库表读写.mdb操作,学习了下相关的东西,这里先整理C#对于Access数据库的操作,对 ...

  7. mysql数据库生成json_Python3实现 将MySQL数据库中的记录生成JSON数据

    思路:首先连接MYSQL数据库,将查询到的数据存放到字典中,然年将每个组装好的字典放到List中 调用json.dumps(jsonData, ensure_ascii=False)方法,生成JSON ...

  8. 导出远程mysql数据库中的表_shell脚本实现导出远程mysql数据库表数据至本地

    bin/main.sh脚本内容 #!/bin/bash #作用:用于同步远程mysql数据库表数据至本地 #作者:丁艺博 source /etc/profile source ~/.bash_prof ...

  9. 从MySQL数据库中查询某个数据库某个表中字段

    #TABLE_NAME表  TABLE_SCHEMA数据库 COLUMN_NAME字段名 SELECT TABLE_SCHEMA,TABLE_NAME, COLUMN_NAME  FROM  info ...

  10. MySQL数据库中查询数据库表、字段总数量,查询数据总量

    最近要查询一些数据库的基本情况,由于以前用oracle数据库比较多,现在换了MySQL数据库,就整理了一部分语句记录下来. 1.查询数据库表数量 #查询MySQL服务中数据库表数据量SELECT CO ...

最新文章

  1. LeetCode: 106. Construct Binary Tree from Inorder and Postorder Traversal
  2. Boost:bind绑定访客的测试程序
  3. python根据月份获取月初月末_用python获取月末数据
  4. matlab行程编码,报告论文:游程(行程)长度编码matlab(或者C++)实现
  5. 牛客题霸 [删除链表的倒数第n个节点] C++题解/答案
  6. html上下滚动切换顶端tab,jQuery实现Tab菜单滚动切换的方法
  7. 我选择的是一种生活态度
  8. linux怎样修改目录字体颜色
  9. [学习笔记] JQuery datepicker用法 [转]
  10. python设置excel格式_Python使用xlwt写excel并设置写入格式
  11. 极点五笔状态栏菜单不显示,如何再让它显示?
  12. 重构改善既有的代码设计(代码的坏味道)
  13. win10开机的微软服务器,win10系统开机登录微软账户的操作方法
  14. java报错Error attempting to get column ‘XXX’ from result set. Cause: java.sql.怎么解决
  15. 《产品游戏化》电子书下载(epub+mobi+pdf) Netflix、迪士尼、微软巨头在使用的产品策略
  16. java玫瑰花代码_Java版给爱人表白的玫瑰花程序代码
  17. 半阳不阳后的一些总结
  18. python实现天气查询
  19. 第二证券|医药板块短期轮动加快 机构看好后市机会
  20. lombok使用详细教程

热门文章

  1. 冒险岛里不合逻辑的地方
  2. 基于C/C++的弹出气泡框
  3. python代码判断身份证号是男是女
  4. 2021年煤炭生产经营单位(安全生产管理人员)复审考试及煤炭生产经营单位(安全生产管理人员)模拟考试题
  5. 汉字风格迁移篇---用于汉字多字体生成的多样性正则化StarGAN
  6. 【iPhone】解决照片无法编辑或删除的问题
  7. Excel 冻结首行
  8. 解构华为AI技术布局:构建无所不及的智能
  9. 一款三搭_今秋内搭无需多,有“小高领”就够了!时髦百搭,配啥上衣都好看...
  10. C++统计输入字符串各个大写字母的个数