Excel导出

        public void CreateKekaoExcel1(DataTable dt, string FileName)
        {
            if (dt.Rows.Count > 0)
            {

                Response.ClearContent();
                Response.BufferOutput = true;
                Response.Charset = "utf-8";
                Response.ContentType = "text/xml";
                Response.ContentEncoding = System.Text.Encoding.UTF8;
                Response.AppendHeader("Content-Disposition", "attachment;filename=" + FileName + "");

                //if (Result.data == null || Result.data.Count() == 0)
                //{ throw new Exception("数据为空,不能生成数据表格"); }
                StringBuilder sb = new StringBuilder();
                try
                {
                    //生成标题行
                    sb.Append("<Row>");
                    sb.Append("<Cell ss:StyleID='scen'><Data ss:Type='String'>城市</Data></Cell>");
                    sb.Append("<Cell ss:StyleID='scen'><Data ss:Type='String'>姓名</Data></Cell>");
                    sb.Append("<Cell ss:StyleID='scen'><Data ss:Type='String'>工号</Data></Cell>");
                    sb.Append("<Cell ss:StyleID='scen'><Data ss:Type='String'>考试岗位</Data></Cell>");
                    sb.Append("<Cell ss:StyleID='scen'><Data ss:Type='String'>笔试成绩</Data></Cell>");
                    sb.Append("<Cell ss:StyleID='scen'><Data ss:Type='String'>面试成绩</Data></Cell>");
                    sb.Append("<Cell ss:StyleID='scen'><Data ss:Type='String'>最终成绩</Data></Cell>");
                    sb.Append("</Row>");

                    int n = 1;

                    foreach (DataRow dtrow in dt.Rows)
                    {
                        sb.Append("<Row>");
                        sb.Append("<Cell ss:StyleID='scen'><Data ss:Type='String'>" + dtrow["城市"] + "</Data></Cell>");
                        sb.Append("<Cell ss:StyleID='scen'><Data ss:Type='String'>" + dtrow["姓名"] + "</Data></Cell>");
                        sb.Append("<Cell ss:StyleID='scen'><Data ss:Type='String'>" + dtrow["工号"] + "</Data></Cell>");
                        sb.Append("<Cell ss:StyleID='scen'><Data ss:Type='String'>" + dtrow["考试岗位"] + "</Data></Cell>");
                        sb.Append("<Cell ss:StyleID='scen'><Data ss:Type='String'>" + dtrow["笔试成绩"] + "</Data></Cell>");
                        sb.Append("<Cell ss:StyleID='scen'><Data ss:Type='String'>" + dtrow["面试成绩"] + "</Data></Cell>");
                        sb.Append("<Cell ss:StyleID='scen'><Data ss:Type='String'>" + dtrow["最终成绩"] + "</Data></Cell>");
                        sb.Append("</Row>");
                        n++;
                    }

                    //生成完毕

                    //获取文件共通部分
                    string comon = GetExcelCommonPart();
                    StringBuilder all = new StringBuilder();
                    string str1 = all.AppendFormat(comon, sb.ToString()).ToString();
                    Response.Write(str1);
                    Response.End();
                    Response.Clear();
                    // File(System.Text.Encoding.UTF8.GetBytes(str1), "application/ms-excel", "export.xls");
                }
                catch
                {
                    throw;
                }

            }
        }

        /// <summary>
        /// 报表导出文件获取文件共通部分
        /// </summary>
        /// <returns></returns>
        public static string GetExcelCommonPart()
        {
            StringBuilder sb = new StringBuilder();
            string FileAuthorName = "考试系统";
            // 迅雷下载时可以在下载完毕后会自动把文件名更新成 xls 或者 xml 的。
            // 兼容 Excel 2003,Excel 2007, Excel 2010

            //生成
            sb.Append("<?xml version='1.0'?><?mso-application progid='Excel.Sheet'?>");

            sb.Append(@"<Workbook xmlns='urn:schemas-microsoft-com:office:spreadsheet'  
                                                    xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel'  
                                                    xmlns:ss='urn:schemas-microsoft-com:office:spreadsheet' xmlns:html='http://www.w3.org/TR/REC-html40'>");

            sb.Append(@"<DocumentProperties xmlns='urn:schemas-microsoft-com:office:office'>");
            sb.Append(@"<Author>" + FileAuthorName + "</Author><LastAuthor>ZJLHC.COM</LastAuthor><Created>" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "</Created><Company>" + FileAuthorName + "</Company><Version>v1.0</Version>");
            sb.Append("</DocumentProperties>");

            sb.Append(@"<Styles><Style ss:ID='Default' ss:Name='Normal'><Alignment ss:Vertical='Center'/>  
                                                    <Borders/><Font ss:FontName='宋体' x:CharSet='134' ss:Size='12'/><Interior/><NumberFormat/><Protection/></Style>");
            //定义标题样式      
            //            Response.Write(@"<Style ss:ID='Header'><Borders><Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/>  
            //           <Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/>  
            //           <Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/>  
            //           <Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/></Borders>  
            //           <Font ss:FontName='宋体' x:CharSet='134' ss:Size='18' ss:Color='#FF0000' ss:Bold='1'/></Style>");

            //定义边框样式
            sb.Append(@"<Style ss:ID='border'><NumberFormat ss:Format='@'/><Borders>  
                                                      <Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/>  
                                                      <Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/>  
                                                      <Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/>  
                                                      <Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/></Borders></Style>");

            //时间格式
            sb.Append(@"<Style ss:ID='s1'><NumberFormat ss:Format='yyyy/mm/dd'/><Borders>  
                                                      <Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/>  
                                                      <Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/>  
                                                      <Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/>  
                                                      <Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/></Borders></Style>");
            //数值格式
            sb.Append(@"<Style ss:ID='s2'><NumberFormat ss:Format='#,##0.00'/><Borders>  
                                                      <Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/>  
                                                      <Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/>  
                                                      <Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/>  
                                                      <Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/></Borders></Style>");
            //居中
            sb.Append(@"<Style ss:ID='scen'><Alignment ss:Horizontal='Center' ss:Vertical='Center'/>
                                                   <Borders>
                                                    <Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/>
                                                    <Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/>
                                                    <Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/>
                                                    <Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/>
                                                   </Borders>
                                                   <NumberFormat ss:Format='@'/>
                                                  </Style>");
            //居左
            sb.Append(@"<Style ss:ID='sleft'><Alignment ss:Horizontal='Left' ss:Vertical='Center'/>
                                                   <Borders>
                                                    <Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/>
                                                    <Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/>
                                                    <Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/>
                                                    <Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/>
                                                   </Borders>
                                                   <NumberFormat ss:Format='@'/>
                                                  </Style>");
            //居右
            sb.Append(@"<Style ss:ID='sright'><Alignment ss:Horizontal='Right' ss:Vertical='Center'/>
                                                   <Borders>
                                                    <Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/>
                                                    <Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/>
                                                    <Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/>
                                                    <Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/>
                                                   </Borders>
                                                   <NumberFormat ss:Format='@'/>
                                                  </Style>");
            //报表日期格式
            sb.Append(@"<Style ss:ID='sdate'><NumberFormat ss:Format='yyyy年mm月dd日'/><Alignment ss:Horizontal='Center' ss:Vertical='Center'/><Borders>  
                                                      <Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1'/>  
                                                      <Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1'/>  
                                                      <Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1'/>  
                                                      <Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1'/></Borders></Style>");
            sb.Append("</Styles>");

            sb.Append("<Worksheet ss:Name='Sheet1'>");
            sb.Append("<Table x:FullColumns='1' x:FullRows='1'>");
            sb.Append("{0}");//数据部分
            sb.Append("</Table>");
            sb.Append("</Worksheet>");
            sb.Append("</Workbook>");
            return sb.ToString();
        }

 

 

引入NOPI进行导出(推荐)

学习地址: http://www.cnblogs.com/stone_w/archive/2012/08/02/2620528.html

下载NOPI插件,引入程序集

 

        public void CreateKekaoExcel(DataTable dt, string FileName)
        {
            if (dt.Rows.Count > 0)
            {
                NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
                NPOI.SS.UserModel.ISheet sheet = book.CreateSheet("Sheet1");

                NPOI.SS.UserModel.IRow row1 = sheet.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("最终成绩");

                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    NPOI.SS.UserModel.IRow rows = sheet.CreateRow(i+1);

                    rows.CreateCell(0).SetCellValue(dt.Rows[i]["城市"].ToString());
                    rows.CreateCell(1).SetCellValue(dt.Rows[i]["姓名"].ToString());
                    rows.CreateCell(2).SetCellValue(dt.Rows[i]["工号"].ToString());
                    rows.CreateCell(3).SetCellValue(dt.Rows[i]["考试岗位"].ToString());
                    rows.CreateCell(4).SetCellValue(dt.Rows[i]["笔试成绩"].ToString());
                    rows.CreateCell(5).SetCellValue(dt.Rows[i]["面试成绩"].ToString());
                    rows.CreateCell(6).SetCellValue(dt.Rows[i]["最终成绩"].ToString());
                }


                // 写入到客户端  
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                book.Write(ms);
                Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}", FileName));
                Response.BinaryWrite(ms.ToArray());
                book = null;
                ms.Close();
                ms.Dispose();



            }
        }

 

posted @ 2016-05-23 09:36  团子先生  阅读(266)  评论(0编辑  收藏  举报