zoukankan      html  css  js  c++  java
  • 导出excel-模版

    后台代码

    public void ToExcel(){

        //第一步:获取模版文件物理路径

        string file_0 = Server.MapPath("/Content/Excel/ExportExcel.xlsx");

        //第二步:定义输入流

        FileStream stream_0 = new FileStream(file_0, FileMode.Open, FileAccess.Read);

        //第三步:判断模版excel文件的版本,创建工作簿

        IWorkbook book = null;

        if (file_0.IndexOf(".xlsx") > 0){

           book = new XSSFWorkbook(stream_0);

        }else if (file_0.IndexOf(".xls") > 0){

           book = new HSSFWorkbook(stream_0);   

        }

        //第四步:创建工作簿sheet页

         ISheet sheet = book.GetSheet("Sheet1");

        //第五步:遍历数据导入工作簿

         for (int i = 1; i < list.Count; i++) {//list是数据源,可以是dt,也可以是List<>,可以自己写方法获取,调用datagrid的方法,也可以利用session(导出当前页时) 

        //(int等数据类型)this.HttpContent.Session["key"] = value;

             IRow row = sheet.CreateRow(i);

             row.CreateCell(0).SetCellValue("测试");

             row.CreateCell(1).SetCellValue("测试");

             row.CreateCell(1).SetCellValue(dd);//若dd是dateTime类型的数据则导出到excel表格时只显示一个数值,需要做如下转换

             //dd.ToString("yyyy-mm-dd hh:mm:ss") ,转换后插入表格则显示指定的格式

         }

         //第六步:定义输出流,将工作簿写到输出流

         string file_1 = Server.MapPath("/Content/Excel/downExcel.xlsx");

         //.xls格式的excel可以加扩展名.xls,但.xlsx格式的加上扩展名会报错。

         //扩展名.xls时,可以在服务器预先设置下载模板,字段的格式都可以在下载模板中设置并会应用到下载后的excel中

         //扩展名为.xlsx时,无法预先设置下载模板,下载下来打不开;要求此处定义的路径不存在,执行时会自动创建,可以避免前面提到的错误。

         //但因此会在服务器新建一个downExcel.xlsx文件,为了避免以后导出出错,需要及时删除

         //if (System.IO.File.Exists(file_1))  { System.IO.File.Delete(file_1);}

         using (FileStream stream_1 = System.IO.File.OpenWrite(file_1)){

              book.Write(stream_1);

         }

         //第七步:写入客户端

         System.IO.FileInfo filet = new System.IO.FileInfo(file_1);

         Response.Clear();

         Response.Charset = "GB2312";

         Response.ContentEncoding = System.Text.Encoding.UTF8;

          // 添加头信息,为"文件下载/另存为"对话框指定默认文件名   

          if (file_0.IndexOf(".xlsx") > 0){

            Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode("订单详情.xlsx"));

         }else if (file_0.IndexOf(".xls") > 0){

            Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode("订单详情.xls"));

        }  //当excel是.xls类型时可以正常发挥作用,但xlsx则不行。Server.UrlEncode采用utf-编码,除文字外数字字母均可以,文字会显示一串乱码。

        绿色部分也可以改为: Response.AddHeader("Content-Disposition", "attachment; filename=" + Server.UrlEncode(""));此时默认文件名为方法名

        若非要显示指定文字: Response.AddHeader("Content-Disposition", "attachment; filename=默认文件名.xlsx");此时.xlsx不会显示出来,是扩展名

          // 添加头信息,指定文件大小,让浏览器能够显示下载进度   

         Response.AddHeader("Content-Length", filet.Length.ToString());

          // 指定返回的是一个不能被客户端读取的流,必须被下载   

         Response.ContentType = "application/ms-excel";

           // 把文件流发送到客户端   

         Response.WriteFile(filet.FullName);

          // 停止页面的执行   

          Response.End();         

          if (System.IO.File.Exists(file_1))
          {
             System.IO.File.Delete(file_1);
          }
          stream_0.Close();

    }

    注意:--ExportExcel.xls是模版文件;downExcel.xls是下载文件(扩展名为.xlsx,一定不能存在);

             --执行程序过程中会把创建的excel工作簿写入downExcel.xls里面,在根据downExcel.xls的物理路径写入客户端提供下载

    要么生,要么死
  • 相关阅读:
    overlapped
    overlapped编程
    Oracle DB 使用子查询来解决查询
    OCP-1Z0-051-V9.02-132题
    OCP-1Z0-051-V9.02-131题
    OCP-1Z0-051-V9.02-130题
    OCP-1Z0-051-V9.02-129题
    OCP-1Z0-051-V9.02-128题
    OCP-1Z0-051-V9.02-127题
    OCP-1Z0-051-V9.02-126题
  • 原文地址:https://www.cnblogs.com/llljpf/p/6596933.html
Copyright © 2011-2022 走看看