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;
}
这是一个关于导出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;
}
相关文章推荐
- asp.net mvc导出excel文件先保存到服务器某个目录,然后再导出到客户端供客户下载功能的实现
- Apache-POI实现Excel文档的导出下载功能
- 导出datatable到excel然后让web客户端下载到本地
- CarlosAg.ExcelXmlWriter实现.net下Excel导出功能(服务端不需要安装Excel程序)
- DataTable导出生成Excel文件,并提供下载!
- [转]NPOI 2.0将DataTable对象转换为Excel 2007文件提供下载
- Apache-POI实现Excel文档的导出下载功能
- 公共代码帮助类:下载页面、导出Excel(不带表头)、导出Execl(带表头)、 导出CSV、实现对IList到DataSet的转换
- 使用第三方.Net NPOI实现.net mvc使用FileResult导出excel(下载到客户端)
- CarlosAg.ExcelXmlWriter实现.net下Excel导出功能(服务端不需要安装Excel程序)
- Springboot/SpringMVC+POI 实现Excel导出功能(点击下载方式实现)
- easyUI导出excel文件 提供下载功能
- VUE的axios实现excel导出下载功能
- DataTable数据导出到Excel,并发送到客户端进行下载
- datagrid数据导出到excel文件给客户端下载的几种方法
- datagrid数据导出到excel文件给客户端下载的几种方法(转)
- 一种简单方法实现页面导出(Excel)功能
- 使用ADO.net转换数据到Excel格式并提供下载
- datagrid数据导出到excel文件给客户端下载的几种方法(转)
- datagrid数据导出到excel文件给客户端下载的几种方法