您的位置:首页 > 其它

Datatable转换成excel并实现导出功能,导出到服务端,提供客户端下载

2014-09-09 13:15 711 查看
好久没有写笔记了,写得不好,大家将就看看吧!

这是一个关于导出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 + "\t"); //栏位:自动跳到下一个单元格

      }

      strBuilder.AppendLine(); //换行

    }

    foreach(DataRow _row in dt.Rows){

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

      }
      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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: