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