zoukankan      html  css  js  c++  java
  • Datatable转换成excel并实现导出功能,导出到服务端,提供客户端下载

    好久没有写笔记了,写得不好,大家将就看看吧!

    这是一个关于导出Excel到服务端指定的文件中供客户去下载的一个方法;首先要获取保存服务器的物理路径,也就是绝对路径,可以使用

    HttpContext.Current.Server.MapPath(".");可以获取到。最方便的就是直接用datatable转成Excel格式,当生成文件时,同时向数据库插入一条记录;

     代码:

    public void DataTableTransmissionExcel(bool withHeaders,DataTable){

       var strBuilder = nwe System.Text.StringBuilder();

      if(dt != null || dt.Rows.Count == 0){

        if(withHeaders){ //是否显示列头名称

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

            strBuilder.Append(dt.Columns[i].ColumnName + " "); //栏位:自动跳到下一个单元格

          }

          strBuilder.AppendLine(); //换行

        }

        foreach(DataRow _row  in dt.Rows){

          for(int i = 0; i < dt.Columns.Count; i++){
            strBuilder.Append(dt.Columns[i].ColumnName + " "); //栏位:自动跳到下一个单元格

          }
          strBuilder.AppendLine(); //换行

        }

      }

      return strBuilder.ToString(); 

    }

    public int RAWExportDataAction(string orgID,string TableCodes,List<DataTable> Tables,Action e){

      int SaveRows = 0;

      string[] _TableNames = null; //导出的数据库表名

      _TableNames = TableCodes.Split('#');

      int InsRows = 0; //累计插入表数

      string _excelFileName = string.Empty; //累加Excel名

      string _tempTableName = string.Empty;//累加有数据产生导出的表名

      Action<Int32> CallBack = null;

      CallBack = (int rowIndex) =>{

        var data = DataTableTransmissionExcel(true,Tables[rowIndex]);

        string uri = HttpContext.Current.Server.MapPath(".");

        int index = uri.IndexOf(@"Services");

        uri = uri.Substring(0,index);

        //保存Excel表名称格式:机构ID+表名+年月日时分秒

        string saveFileName = orgID+_TableNames[rowIndex]+"-"+DateTime.Now.Year+DateTime.Now.Month+DateTime.Now.Day+

        DateTime.Now.Hour+DateTime.Now.Minute+DateTime.Now.Second+".xls";

        //保存到指定的路径地址

        string fileName = string.Format(@"{0}Excel{1}",uri,saveFileName);

        //当文件不存在时,就创建文件

        if(!System.IO.File.Exists(fileName)){

          System.IO.FileStream stream = System.IO.File.Creat(fileName);

          stream.Close();

          stream.Dispose();

        }

        using(var writer = new System.IO.StreamWriter(fileName,true,System.Text.Encoding.Unicode))

        {

          writer.Write(data); //读写数据

          writer.Close();  //关闭流

        }

        InsRows++;

        if(InsRows < Tables.Count){

          _tempTableName += _TableNames[rowIndex]+"#";

          _excelFileName += saveFileName + "#";

        }

        if(InsRows == Tables.Count){      

          _tempTableName += _TableNames[rowIndex];

          _excelFileName += saveFileName;

          //插入一条下载数据

          SaveRows = new XywDemoService.Web.DS.EpMsgDS.InserLotEpMsg(orgID,_tempTableName,_excelFileName);

        }

        if(rowIndex >= Tables.Count - 1){

          if(e!=null){ e(); }

        }else{ CallBack(rowIndex + 1); }

      };

      CallBack(0);

      return SaveRows;

    }

  • 相关阅读:
    20160130.CCPP体系详解(0009天)
    20160129.CCPP体系详解(0008天)
    20160128.CCPP体系详解(0007天)
    20160127.CCPP体系详解(0006天)
    20160126.CCPP体系详解(0005天)
    程序员_你的“强迫症”有哪些?
    天天写业务代码_如何成为技术大牛?
    阿里云全球首批MVP李文毅专访-一个“改邪归正”的90后
    【毕业季】穿越回毕业前一年_这次你会怎么选
    恢复Hyper-V虚拟机丢失的数据文件过程
  • 原文地址:https://www.cnblogs.com/xingyu1213/p/3962410.html
Copyright © 2011-2022 走看看