[ASP.net](note)读取DB并导出EXCEL (NPOI之 v.1.2.4版)

读取DB并导出EXCEL


附档须先下载配合使用,附档中有说明文档。
黄色部分为读取DB并导出EXCEL的程序,其余无背景色的为ado.net(datareader)


//----自己写的(声明) ----一般必写
using System.Web.Configuration;
using System.Data;
using System.Data.SqlClient;

//== 自己写的(声明) === Excel用
using System.IO;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;  

protected void Button1_Click(object sender, EventArgs e)
    {

 //* for Exporting to a Excel file
        HSSFWorkbook workbook = new HSSFWorkbook();
//== 新增试算表 Sheet名称。使用 NPOI.SS.UserModel命名空间。(v.1.2.4版)
        ISheet u_sheet = (ISheet)workbook.CreateSheet("My Sheet_124");

//== 插入数据值,我先建立excel的表头,从数据库捞出不会有表头
        // CreateRow()方法
        //同列第1格开始须先用“CreateRow”
        u_sheet.CreateRow(0).CreateCell(0).SetCellValue("此栏可删");
        //同列第2格开始须用“GetRow”,否则在excel中只会出现最后1格
        u_sheet.GetRow(0).CreateCell(1).SetCellValue("年月");
        u_sheet.GetRow(0).CreateCell(2).SetCellValue("姓名");
        u_sheet.GetRow(0).CreateCell(3).SetCellValue("应享特休");
        u_sheet.GetRow(0).CreateCell(4).SetCellValue("剩余特休");
        u_sheet.GetRow(0).CreateCell(5).SetCellValue("特");
        u_sheet.GetRow(0).CreateCell(6).SetCellValue("事");
        u_sheet.GetRow(0).CreateCell(7).SetCellValue("病");
        u_sheet.GetRow(0).CreateCell(8).SetCellValue("婚");
        u_sheet.GetRow(0).CreateCell(9).SetCellValue("丧");
        u_sheet.GetRow(0).CreateCell(10).SetCellValue("产");
        u_sheet.GetRow(0).CreateCell(11).SetCellValue("公");
        u_sheet.GetRow(0).CreateCell(12).SetCellValue("加班时数");
        u_sheet.GetRow(0).CreateCell(13).SetCellValue("上班天数");
        u_sheet.GetRow(0).CreateCell(14).SetCellValue("上班时数");
        u_sheet.GetRow(0).CreateCell(15).SetCellValue("迟到次数");
        u_sheet.GetRow(0).CreateCell(16).SetCellValue("未打卡次数");
        u_sheet.GetRow(0).CreateCell(17).SetCellValue("逾时打卡");
        u_sheet.GetRow(0).CreateCell(18).SetCellValue("备注");


//以下为ADO.NET (datareader)
//声明连线字符串
        string ds = WebConfigurationManager.ConnectionStrings["workerConnectionString"].ConnectionString;
        SqlConnection conn = new SqlConnection(ds);
        SqlDataReader dr3 = null;
        string dc = "select  * from mytable";
      SqlCommand cmd3 = new SqlCommand(Session["dc"].ToString(), conn);
try
      {
          //== 第一,连结数据库。
          conn.Open();
          //== 第二,执行SQL命令。
          dr3 = cmd3.ExecuteReader();

            //由此开始处理导出excel===================================
            //== 利用循环,把数据写入 Excel各个保存格里面。
            int k = 1;  
                     //k从1开始代表是excel的第2行开始建立,因为第1行已给表头使用了

            while (dr3.Read())
            {
                // 先建好一列(Row),才能去作格子(Cell)
                IRow u_Row = u_sheet.CreateRow(k);

                for (int i = 0; i < dr3.FieldCount; i++)
                {   //-- FieldCount是指 DataReader每一列纪录里面,有几个字段。

                    u_Row.CreateCell(i).SetCellValue(dr3.GetValue(i).ToString());  
                    //== .CreateCell() 可设定为同一列(Row)的 [第几个格子]

                    //补充:设定每一个字段(格子)的保存格型态,如:字符串。
                    //u_Row.CreateCell(i).SetCellType(CellType.STRING);
                }
                k++;
            }
            //结束处理导出excel===================================
      }

      catch (Exception ex)  //---- 如果程序有错误或是例外状况,将执行这一段
      {
          Response.Write("ERROE----" + ex.ToString() + "
");
          throw;
      }
      // == 第四,释放资源、关闭数据库的连结。
      finally
      {
          if (dr3 != null)
          {
              cmd3.Cancel();
              dr3.Close();
          }
          if (conn.State == ConnectionState.Open)
          {
              conn.Close();
              conn.Dispose();

          }

      }
 //* for Exporting to a Excel file
        MemoryStream ms = new MemoryStream();  //==需要 System.IO命名空间
        workbook.Write(ms);

        //== Excel文件名,请写在最后面 filename的地方
        Response.AddHeader("Content-Disposition", "attachment; filename=出勤加班表_" + DateTime.Now.ToString("yyyyMMdd") + ".xls");
        Response.BinaryWrite(ms.ToArray());
        //== 释放资源
        workbook = null;   
        ms.Close();
        ms.Dispose();

    }



附档下载





(以上参考mis2000的教学后实践整理出来的)

 
--
强烈建议购物网店或实例店家都必须使用关键字广告or原生广告来将Yahoo上与联播网的广大流量导至自己的网站!

●Yahoo关键字广告/原生广告
◆Yahoo广告方案介绍 : https://goo.gl/5k8FHW
◆Yahoo广告剖析与运用 : http://goo.gl/4xjUJD



​​