好久没有写笔记了,写得不好,大家将就看看吧!
这是一个关于导出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;
}