這裡是asp.net Code的部份,這裡作了一個Excel檔案。
protected string ExportExeclByXSLT_Direct(DataSet dsReportData)
{
string fileName = “././DownLoadFile/ExcelExport.xls";
string xslPath = “././Xsl_Template/Excel.xslt";
string xlsPath = “././DownLoadFile/ExcelExport.xls";
StreamWriter oExcelWriter = System.IO.File.CreateText(Server.MapPath(xlsPath));
try
{
XmlDataDocument xddData = new XmlDataDocument(dsReportData);
XslCompiledTransform xt = new XslCompiledTransform();
xt.Load(Server.MapPath(xslPath));
xt.Transform(xddData, null, oExcelWriter);
return fileName;
}
catch (Exception ex)
{
return “";
}
finally
{
oExcelWriter.Close();
}
}
這裡是Excel下載的頁面(DownLoad.aspx)
protected void Page_Load(object sender, EventArgs e)
{
NameValueCollection coll = Request.QueryString;
String strRequest = coll[“file"];
if (strRequest != “")
{
String path = Server.MapPath(strRequest);
FileInfo file = new FileInfo(path);
StreamReader sr = null;
try
{
if (file.Exists)
{
//Method-1 將檔案資料讀入Stream,這時檔案已經可以刪除了..之後再把檔案內容輸出即可
//Read File Content
sr = new StreamReader(path);
Response.Clear();
Response.AddHeader(“Content-Disposition", “attachment; filename=ExcelExport.xls");
Response.AddHeader(“Content-Length", file.Length.ToString());
Response.ContentType = “application/vnd.ms-excel";
Response.Write(sr.ReadToEnd());
Response.End();
//Method-2 這是第二個方法,直接把檔案內容寫到前端,此時是不允許將檔案給刪除的,因為檔案是讀取的目標
//Response.Clear();
//Response.AddHeader(“Content-Disposition", “attachment; filename=ExcelExport.xls");
//Response.AddHeader(“Content-Length", file.Length.ToString());
//Response.ContentType = “application/vnd.ms-excel";
//Response.WriteFile(file.FullName);
//Response.End();
}
}
catch
{
}
finally
{
if (sr != null) sr.Close(); //Close Reader 注意:要記得把連接關閉
if (file.Exists)file.Delete(); //Delete Temp DownLoad File
}
}
}
這裡是XSLT的部份,負責將DataSet轉換成Excel的XML資料
<xsl:stylesheet version="1.0″
xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" >
<xsl:template match="*">
<ss:Workbook xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
<ss:Worksheet ss:Name="Main">
<ss:Table>
<!–資料標題–>
<ss:Row>
<xsl:for-each select="Main[position() = 1]/*">
<ss:Cell>
<ss:Data ss:Type="String">
<xsl:value-of select="local-name()"/>
</ss:Data>
</ss:Cell>
</xsl:for-each>
</ss:Row>
<xsl:for-each select="Main">
<!–資料內容–>
<ss:Row>
<xsl:for-each select="*">
<ss:Cell>
<ss:Data ss:Type="String">
<xsl:value-of select="."/>
</ss:Data>
</ss:Cell>
</xsl:for-each>
</ss:Row>
</xsl:for-each>
</ss:Table>
</ss:Worksheet>
<ss:Worksheet ss:Name="HQ_Detail">
<ss:Table>
<!–資料標題–>
<ss:Row>
<xsl:for-each select="HQ_Detail[position() = 1]/*">
<ss:Cell>
<ss:Data ss:Type="String">
<xsl:value-of select="local-name()"/>
</ss:Data>
</ss:Cell>
</xsl:for-each>
</ss:Row>
<xsl:for-each select="HQ_Detail">
<ss:Row>
<xsl:for-each select="*">
<ss:Cell>
<ss:Data ss:Type="String">
<xsl:value-of select="."/>
</ss:Data>
</ss:Cell>
</xsl:for-each>
</ss:Row>
</xsl:for-each>
</ss:Table>
</ss:Worksheet>
<ss:Worksheet ss:Name="NL_Detail">
<ss:Table>
<!–資料標題–>
<ss:Row>
<xsl:for-each select="NL_Detail[position() = 1]/*">
<ss:Cell>
<ss:Data ss:Type="String">
<xsl:value-of select="local-name()"/>
</ss:Data>
</ss:Cell>
</xsl:for-each>
</ss:Row>
<xsl:for-each select="NL_Detail">
<ss:Row>
<xsl:for-each select="*">
<ss:Cell>
<ss:Data ss:Type="String">
<xsl:value-of select="."/>
</ss:Data>
</ss:Cell>
</xsl:for-each>
</ss:Row>
</xsl:for-each>
</ss:Table>
</ss:Worksheet>
<ss:Worksheet ss:Name="CH_Detail">
<ss:Table>
<!–資料標題–>
<ss:Row>
<xsl:for-each select="CH_Detail[position() = 1]/*">
<ss:Cell>
<ss:Data ss:Type="String">
<xsl:value-of select="local-name()"/>
</ss:Data>
</ss:Cell>
</xsl:for-each>
</ss:Row>
<xsl:for-each select="CH_Detail">
<ss:Row>
<xsl:for-each select="*">
<ss:Cell>
<ss:Data ss:Type="String">
<xsl:value-of select="."/>
</ss:Data>
</ss:Cell>
</xsl:for-each>
</ss:Row>
</xsl:for-each>
</ss:Table>
</ss:Worksheet>
</ss:Workbook>
</xsl:template>
</xsl:stylesheet>