您的位置:首页 > 其它

导出导入Excel(DataSet,DataGrid)

2006-12-19 16:21 417 查看
using System;


using System.Data;


using System.Web;


using System.Web.UI.WebControls;


using System.Web.UI.HtmlControls;


using System.Text.RegularExpressions;


using System.Xml;


using System.Xml.Xsl;


using System.IO;


using System.Xml.XPath;




namespace Document.Bll






{




/**//// <summary>


/// Summary description for ExportExcel.


/// </summary>


public class ExportExcel






{


public ExportExcel()






{




}




GetXslFile#region GetXslFile


private static void GetXslFile(DataSet ds,string xslPath)






{


string strColumn = "";


string strRow = "";


string dsName = ds.DataSetName;


string tableName = ds.Tables[0].TableName;


string header = dsName + "/" + tableName;




foreach(DataColumn clm in ds.Tables[0].Columns)






{


//特殊字符 <,>,",*,%,(,),& 替换


//*************************************************


//*************************************************


// 符号 xml下的值 excel中的值


// < -------- _x003C_ ------ <


// > -------- _x003E_ ------ >


// " -------- _x0022_ ------ "


// * -------- _x002A_ ------ *


// % -------- _x0025_ ------ %


// & -------- _x0026_ ------ &


// ( -------- _x0028_ ------ (


// ) -------- _x0029_ ------ )


// = -------- _x003D_ ------ =


//*************************************************


//*************************************************




string strClmName = clm.ColumnName;


string strRowName = clm.ColumnName;




if(strClmName.IndexOf("&")!=-1)






{


strClmName = strClmName.Replace("&","&");


}


if(strClmName.IndexOf("<")!=-1)






{


strClmName = strClmName.Replace("<","<");


}


if(strClmName.IndexOf(">")!=-1)






{


strClmName=strClmName.Replace(">",">");


}


if(strClmName.IndexOf("/"")!=-1)






{


strClmName=strClmName.Replace("/"",""");


}


if(strRowName.IndexOf("<")!=-1)






{


strRowName=strRowName.Replace("<","_x003C_");


}


if(strRowName.IndexOf(">")!=-1)






{


strRowName=strRowName.Replace(">","_x003E_");


}


if(strRowName.IndexOf("/"")!=-1)






{


strRowName=strRowName.Replace("/"","_x0022_");


}


if(strRowName.IndexOf("*")!=-1)






{


strRowName=strRowName.Replace("*","_x002A_");


}


if(strRowName.IndexOf("%")!=-1)






{


strRowName=strRowName.Replace("%","_x0025_");


}


if(strRowName.IndexOf("&")!=-1)






{


strRowName=strRowName.Replace("&","_x0026_");


}


if(strRowName.IndexOf("(")!=-1)






{


strRowName=strRowName.Replace("(","_x0028_");


}


if(strRowName.IndexOf(")")!=-1)






{


strRowName=strRowName.Replace(")","_x0029_");


}


if(strRowName.IndexOf("=")!=-1)






{


strRowName=strRowName.Replace("=","_x003D_");


}






strColumn += "<th>" + strClmName +"</th>" + "/r/n";


strRow += "<td>" + "<xsl:value-of select=" + "/"" + strRowName + "/"" +"/>" + "</td>" + "/r/n";


}




string str = @"<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">


<xsl:template match=""/"">


<html xmlns:o=""urn:schemas-microsoft-com:office:office"" xmlns:x=""urn:schemas-microsoft-com:office:excel"" xmlns=""http://www.w3.org/TR/REC-html40"">


<head>


<meta http-equiv=""Content-Type"" content=""text/html;charset=utf-8"" />


<style>


.xl24{mso-style-parent:style0;mso-number-format:""/@"";text-align:right;}


</style>


<xml>


<x:ExcelWorkbook>


<x:ExcelWorksheets>


<x:ExcelWorksheet>


<x:Name>Sheet1</x:Name>


<x:WorksheetOptions>


<x:ProtectContents>False</x:ProtectContents>


<x:ProtectObjects>False</x:ProtectObjects>


<x:ProtectScenarios>False</x:ProtectScenarios>


</x:WorksheetOptions>


</x:ExcelWorksheet>


</x:ExcelWorksheets>


</x:ExcelWorkbook>


</xml>


</head>


<body> ";


str += "/r/n" + @"<table border=""1"" cellpadding=""0"" cellspacing=""0"">


<tr>" + "/r/n";


str += strColumn;


str += @" </tr>


<xsl:for-each select="""+header+@""">


<tr>";


str += "/r/n" + strRow;


str += @"</tr>


</xsl:for-each>


</table>


</body>


</html>






</xsl:template>


</xsl:stylesheet> ";




string path =xslPath;


if(File.Exists(path))






{


File.Delete(path);


}


FileStream fs = File.Create(path);


StreamWriter sw=new StreamWriter(fs);


sw.Write(str);


sw.Close();


fs.Close();




}




#endregion






GetXmlFile#region GetXmlFile


private static void GetXmlFile(DataSet ds,string xmlFilePath)






{


string strXml = ds.GetXml();


if(File.Exists(xmlFilePath))






{


File.Delete(xmlFilePath);


}


FileStream fs1 = File.Create(xmlFilePath);


StreamWriter writer = new StreamWriter(fs1);


writer.Write(strXml);


writer.Close();


fs1.Close();


}




#endregion






BuildExcel#region BuildExcel


private static void BuildExcel(DataSet ds,string path)






{


if(File.Exists(path))






{


File.Delete(path);


}


string m_path = path.Substring(0,path.Length-4);


string m_fileXml = m_path + ".xml";


string m_fileXsl = m_path + ".xsl";


string m_fileXls = m_path + ".xls";




try






{


GetXmlFile(ds,m_fileXml);


GetXslFile(ds,m_fileXsl);




//Excel changed


XmlDocument doc = new XmlDocument();


doc.Load(m_fileXml);


XslTransform xslt = new XslTransform();


xslt.Load(m_fileXsl);


XmlElement root = doc.DocumentElement;


XPathNavigator nav = root.CreateNavigator();


XmlTextWriter writer = new XmlTextWriter(m_fileXls,null);


xslt.Transform(nav,null,writer,null);


writer.Close();


File.Delete(m_fileXml);


File.Delete(m_fileXsl);


}


catch






{


throw;


}


}




#endregion






ToExcel#region ToExcel


public static void ToExcel(System.Web.UI.Control ctl,string FileName)






{


HttpContext.Current.Response.Charset ="UTF-8";


HttpContext.Current.Response.ContentEncoding =System.Text.Encoding.Default;


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


HttpContext.Current.Response.AppendHeader("Content-Disposition","attachment;filename="+""+FileName+".xls");


ctl.Page.EnableViewState =false;


System.IO.StringWriter tw = new System.IO.StringWriter();


System.Web.UI.HtmlTextWriter hw = new System.Web.UI.HtmlTextWriter(tw);


ctl.RenderControl(hw);


HttpContext.Current.Response.Write(tw.ToString());


HttpContext.Current.Response.End();


}


#endregion






DownloadFile#region DownloadFile


public static void DownloadFile(string physicalFilePath)






{


FileStream stream=null;


try






{


stream = new FileStream(physicalFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);


int bufSize = (int)stream.Length;


byte[] buf = new byte[bufSize];




int bytesRead = stream.Read(buf, 0, bufSize);


HttpContext.Current.Response.ContentType = "application/octet-stream";


HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename="+System.IO.Path.GetFileName(physicalFilePath));


HttpContext.Current.Response.OutputStream.Write(buf, 0, bytesRead);


HttpContext.Current.Response.End();


}


finally






{


stream.Close();


}


}


#endregion


}


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