asp.net 导出excel--NPOI

1.使用OLEDB导出Excel  ,这种方式有点慢,慎用
 /// <summary>
        /// 使用OLEDB导出Excel
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="filepath"></param>
        /// <param name="tablename"></param>

        public static void Export(System.Data.DataTable dt, string filepath, string tablename)
        {

            //excel 2003格式

           // string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0;";

            //Excel 2007格式

            string connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Extended Properties=Excel 12.0 Xml;";

            try
            {

                using (OleDbConnection con = new OleDbConnection(connString))
                {
                    con.Open();
                    StringBuilder strSQL = new StringBuilder();
                    strSQL.Append("CREATE TABLE ").Append("[" + tablename + "]");

                    strSQL.Append("(");
                    for (int i = 0; i < dt.Columns.Count; i++)
                    {
                        strSQL.Append("[" + dt.Columns[i].ColumnName + "] text,");

                    }
                    strSQL = strSQL.Remove(strSQL.Length - 1, 1);
                    strSQL.Append(")");

                    OleDbCommand cmd = new OleDbCommand(strSQL.ToString(), con);
                    cmd.ExecuteNonQuery();
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        strSQL.Clear();

                        StringBuilder strfield = new StringBuilder();

                        StringBuilder strvalue = new StringBuilder();

                        for (int j = 0; j < dt.Columns.Count; j++)
                        {

                            strfield.Append("[" + dt.Columns[j].ColumnName + "]");

                            strvalue.Append("'" + dt.Rows[i][j].ToString() + "'");

                            if (j != dt.Columns.Count - 1)
                            {

                                strfield.Append(",");

                                strvalue.Append(",");

                            }

                            else
                            {

                            }

                        }

                        cmd.CommandText = strSQL.Append(" insert into [" + tablename + "]( ")

                            .Append(strfield.ToString())

                            .Append(") values (").Append(strvalue).Append(")").ToString();

                        cmd.ExecuteNonQuery();

                    }

                    con.Close();

                }

                Console.WriteLine("OK");

            }

            catch (Exception ex)
            {

                Console.WriteLine(ex.Message);

            }

        }

 

2.NPOI 导出excel

2007 版

  public FileResult Export(SC_ServiceCardUsedRecordSearchParam param)
        {

         
            int cou = 0;

            //创建Excel文件的对象
            //NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();//03

            NPOI.XSSF.UserModel.XSSFWorkbook book = new NPOI.XSSF.UserModel.XSSFWorkbook();
            //NPOI.XSSF.UserModel.XSSFWorkbook workbook = new NPOI.XSSF.UserModel.XSSFWorkbook();
            //添加一个sheet
            //NPOI.SS.UserModel.ISheet sheet1 = book.CreateSheet("Sheet1");  //03

            NPOI.SS.UserModel.ISheet sheet1=  book.CreateSheet("Sheet1");  //07
            
            List<SC_ServiceCardUsedRecord> cards = new List<SC_ServiceCardUsedRecord>();

            //获取list数据
            cards = _AppContext.ServiceCardUsedRecordApp.SelectRecordList(param).ToList<SC_ServiceCardUsedRecord>();

            //给sheet1添加第一行的头部标题
            NPOI.SS.UserModel.IRow row1 = sheet1.CreateRow(0);
            row1.CreateCell(0).SetCellValue("编号");
            row1.CreateCell(1).SetCellValue("卡券号码");
            row1.CreateCell(2).SetCellValue("手机号");
            row1.CreateCell(3).SetCellValue("姓名");
            row1.CreateCell(4).SetCellValue("车架号");
            row1.CreateCell(5).SetCellValue("经销商");
            row1.CreateCell(6).SetCellValue("行驶里程");
            row1.CreateCell(7).SetCellValue("创建时间");
            row1.CreateCell(8).SetCellValue("卡劵类型");
            row1.CreateCell(9).SetCellValue("车型");
            row1.CreateCell(10).SetCellValue("来源");
            row1.CreateCell(11).SetCellValue("经销商名称");
            row1.CreateCell(12).SetCellValue("发卡时间");
            row1.CreateCell(13).SetCellValue("购车时间");
            row1.CreateCell(14).SetCellValue("会员等级");


            //将数据逐步写入sheet1各个行
            for (int i = 0; i < cards.Count(); i++)
            {
                NPOI.SS.UserModel.IRow rowtemp = sheet1.CreateRow(i + 1);
                
                rowtemp.CreateCell(0).SetCellValue(cards[i].Id.ToString());
                rowtemp.CreateCell(1).SetCellValue(cards[i].CardNo.ToString());
                rowtemp.CreateCell(2).SetCellValue(cards[i].PhoneNumber.ToString());
                rowtemp.CreateCell(3).SetCellValue(cards[i].CustName == null ? "" : cards[i].CustName.ToString());
                rowtemp.CreateCell(4).SetCellValue(cards[i].VIN == null ? "" : cards[i].VIN.ToString());
                rowtemp.CreateCell(5).SetCellValue(cards[i].DealerId == null ? "" : cards[i].DealerId.ToString());
                rowtemp.CreateCell(6).SetCellValue(cards[i].Mileage == null ? "" : cards[i].Mileage.ToString());
                rowtemp.CreateCell(7).SetCellValue(cards[i].CreateTime.ToLongDateString());
                rowtemp.CreateCell(8).SetCellValue(cards[i].CardTypeName == null ? "" : cards[i].CardTypeName.ToString());
                rowtemp.CreateCell(9).SetCellValue(cards[i].CarCategory == null ? "" : cards[i].CarCategory.ToString());
                rowtemp.CreateCell(10).SetCellValue(cards[i].ActivityTag == null ? "" : cards[i].ActivityTag.ToString());
                rowtemp.CreateCell(11).SetCellValue(cards[i].DealerName == null ? "" : cards[i].DealerName.ToString());
                rowtemp.CreateCell(12).SetCellValue(cards[i].kqCreateTime == null ? "" : cards[i].kqCreateTime.ToString());
                rowtemp.CreateCell(13).SetCellValue(cards[i].BuyTime == null ? "" : cards[i].BuyTime.ToString());
                rowtemp.CreateCell(14).SetCellValue(cards[i].MLevel == null ? "" : cards[i].MLevel.ToString());

            }

            // 写入到客户端 
           System.IO.MemoryStream ms = new System.IO.MemoryStream();
          // MemoryStream stream = new MemoryStream();
            book.Write(ms);
            var buf = ms.ToArray();
            //ms.Seek(0, SeekOrigin.Begin);
            
            //application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
            //return File(ms, "application/vnd.ms-excel", "Card.xlsx");
            return File(buf, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Card.xlsx");
        }

 

2003 版

        public ActionResult Export(DateTime? startTime, DateTime? endTime, string tableName)
        {
            IWorkbook book = new HSSFWorkbook();

            //获取list数据
            DataTable dt = _AppContext.ReportApp.GetReport(startTime ?? DateTime.Now.AddDays(-1), endTime ?? DateTime.Now, tableName);

            if (dt.Rows.Count < EXCEL03_MaxRow)
                DataWrite2Sheet(dt, 0, dt.Rows.Count - 1, book, "Sheet1");
            else
            {
                int page = dt.Rows.Count / EXCEL03_MaxRow;
                for (int i = 0; i < page; i++)
                {
                    int start = i * EXCEL03_MaxRow;
                    int end = (i * EXCEL03_MaxRow) + EXCEL03_MaxRow - 1;
                    DataWrite2Sheet(dt, start, end, book, "Sheet" + i.ToString());
                }
                int lastPageItemCount = dt.Rows.Count % EXCEL03_MaxRow;
                DataWrite2Sheet(dt, dt.Rows.Count - lastPageItemCount, dt.Rows.Count - 1, book, "Sheet" + page.ToString());
            }

            // 写入到客户端 
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            book.Write(ms);
            ms.Seek(0, SeekOrigin.Begin);
            return File(ms, "application/vnd.ms-excel", tableName + ".xls");
        }

注意:操作Excel2003与操作Excel2007使用的是不同的命名空间下的内容 

使用NPOI.HSSF.UserModel空间下的HSSFWorkbook操作Excel2003

使用NPOI.XSSF.UserModel空间下的XSSFWorkbook操作Excel2007

 

posted @ 2017-03-30 17:30  秋香姑娘请你不要紧张  阅读(514)  评论(0编辑  收藏  举报