(转)Asp.Net(C#) XML+Xslt转Excel的解决方案

摘要:
xmlversion=“1.0”encoding=“utf-8”?˃˂?mso-applicationprogid=“Excel.Sheet”?

1. 新建一个Excel文档,并填写表头与两行左右的内容,然后另存为XML表格 格式 并修改成Xslt模板;
2. 将要导入的数据生成XML格式文档;
3. 通过Xslt模板将数据生成,并设定Response.ContentType = "application/vnd.ms-excel";
4. 刷新输出页保存文件即为Excel格式的文档

ExportCards.xsl模板代码

XML/HTML代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:fn="http://www.w3.org/2005/xpath-functions" xmlns:xdt="http://www.w3.org/2005/xpath-datatypes" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns="urn:schemas-microsoft-com:office:spreadsheet">  
  3. <xsl:output method="xml" version="1.0" encoding="utf-8" indent="yes"/>  
  4. <xsl:template match="BitLab.Xml">  
  5.   
  6. <xsl:param name="Collection" select="Cards/Card" />  
  7.   
  8. <?mso-application progid="Excel.Sheet"?>  
  9. <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"  
  10.  xmlns:o="urn:schemas-microsoft-com:office:office"  
  11.  xmlns:x="urn:schemas-microsoft-com:office:excel"  
  12.  xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"  
  13.  xmlns:html="http://www.w3.org/TR/REC-html40">  
  14.  <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">  
  15.   <Created>1996-12-17T01:32:42Z</Created>  
  16.   <LastSaved>2008-07-04T02:10:38Z</LastSaved>  
  17.   <Version>11.6360</Version>  
  18.  </DocumentProperties>  
  19.  <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">  
  20.   <RemovePersonalInformation/>  
  21.  </OfficeDocumentSettings>  
  22.  <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">  
  23.   <WindowHeight>4530</WindowHeight>  
  24.   <WindowWidth>8505</WindowWidth>  
  25.   <WindowTopX>480</WindowTopX>  
  26.   <WindowTopY>120</WindowTopY>  
  27.   <AcceptLabelsInFormulas/>  
  28.   <ProtectStructure>False</ProtectStructure>  
  29.   <ProtectWindows>False</ProtectWindows>  
  30.  </ExcelWorkbook>  
  31.  <Styles>  
  32.   <Style ss:ID="Default" ss:Name="Normal">  
  33.    <Alignment ss:Vertical="Bottom"/>  
  34.    <Borders/>  
  35.    <Font ss:FontName="宋体" x:CharSet="134" ss:Size="12"/>  
  36.    <Interior/>  
  37.    <NumberFormat/>  
  38.    <Protection/>  
  39.   </Style>  
  40.   <Style ss:ID="s28">  
  41.    <Font ss:FontName="宋体" x:CharSet="134"/>  
  42.   </Style>  
  43.   <Style ss:ID="s29">  
  44.    <Font ss:FontName="宋体" x:CharSet="134"/>  
  45.    <NumberFormat ss:Format=""¥"#,##0.00;"¥"\-#,##0.00"/>  
  46.   </Style>  
  47.   <Style ss:ID="s30">  
  48.    <Font ss:FontName="Verdana" x:Family="Swiss"/>  
  49.   </Style>  
  50.   <Style ss:ID="s31">  
  51.    <Font ss:FontName="Verdana" x:Family="Swiss"/>  
  52.    <NumberFormat ss:Format=""¥"#,##0.00;"¥"\-#,##0.00"/>  
  53.   </Style>  
  54.   <Style ss:ID="s32">  
  55.    <Font ss:FontName="Verdana" x:Family="Swiss"/>  
  56.    <NumberFormat ss:Format="General Date"/>  
  57.   </Style>  
  58.  </Styles>  
  59.  <Worksheet ss:Name="Cards">  
  60.   <Table ss:ExpandedColumnCount="7" ss:ExpandedRowCount="{1+count($Collection)}" x:FullColumns="1"  
  61.    x:FullRows="1" ss:StyleID="s30" ss:DefaultColumnWidth="54">  
  62.    <Column ss:StyleID="s30" ss:Width="45.75" ss:Span="1"/>  
  63.    <Column ss:Index="3" ss:StyleID="s30" ss:Width="129.75" ss:Span="1"/>  
  64.    <Column ss:Index="5" ss:StyleID="s31" ss:Width="54.75"/>  
  65.    <Column ss:Index="7" ss:StyleID="s30" ss:Width="127.5"/>  
  66.    <Row>  
  67.     <Cell ss:StyleID="s28"><Data ss:Type="String">标识列</Data></Cell>  
  68.     <Cell ss:StyleID="s28"><Data ss:Type="String">批次号</Data></Cell>  
  69.     <Cell ss:StyleID="s28"><Data ss:Type="String">卡序列号</Data></Cell>  
  70.     <Cell ss:StyleID="s28"><Data ss:Type="String">卡密码</Data></Cell>  
  71.     <Cell ss:StyleID="s29"><Data ss:Type="String">面额</Data></Cell>  
  72.     <Cell ss:StyleID="s28"><Data ss:Type="String">状态</Data></Cell>  
  73.     <Cell ss:StyleID="s28"><Data ss:Type="String">创建时间</Data></Cell>  
  74.    </Row>  
  75.   
  76. <xsl:for-each select="$Collection">  
  77.   
  78.    <Row>  
  79.     <Cell><Data ss:Type="Number"> <xsl:value-of select="@ID" /> </Data></Cell>  
  80.     <Cell><Data ss:Type="Number"> <xsl:value-of select="@BatchID" /> </Data></Cell>  
  81.     <Cell ss:StyleID="s30"><Data ss:Type="String"> <xsl:value-of select="@SN" /> </Data></Cell>  
  82.     <Cell ss:StyleID="s30"><Data ss:Type="String"> <xsl:value-of select="@Password" /> </Data></Cell>  
  83.     <Cell ss:StyleID="s31"><Data ss:Type="Number"> <xsl:value-of select="@Par" /> </Data></Cell>  
  84.     <Cell ss:StyleID="s30"><Data ss:Type="String"> <xsl:value-of select="@State" /> </Data></Cell>  
  85.     <Cell ss:StyleID="s32"><Data ss:Type="String"> <xsl:value-of select="@CreateDate" /> </Data></Cell>  
  86.    </Row>  
  87.   
  88. </xsl:for-each>  
  89.   
  90.  </Table>  
  91.   <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">  
  92.    <Selected/>  
  93.    <Panes>  
  94.     <Pane>  
  95.      <Number>3</Number>  
  96.     </Pane>  
  97.    </Panes>  
  98.    <ProtectObjects>False</ProtectObjects>  
  99.    <ProtectScenarios>False</ProtectScenarios>  
  100.   </WorksheetOptions>  
  101.  </Worksheet>  
  102. </Workbook>  
  103.   
  104.  </xsl:template>  
  105. </xsl:stylesheet>  



导出代码:

C#代码
  1. public partial class ExportCardForm : Czintel.Moodou.UI.ManagePage   
  2. {   
  3.     protected void Page_Load(object sender, EventArgs e)   
  4.     {   
  5.         this.Components.Remove(ServerContext.User);   
  6.   
  7.         Response.ContentType = "application/vnd.ms-excel";   
  8.         this.StyleSheet = "ExportCards.xsl";   
  9.         ComponentCollection<Card> cards = Cards.LoadCards();   
  10.         this.Components.Add(cards);   
  11.            
  12.     }   
  13.   
  14. }  


具体转换过程在基类里,这儿就不写了!

免责声明:文章转载自《(转)Asp.Net(C#) XML+Xslt转Excel的解决方案》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇2.1 顺序栈06 django视图层下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

细说 Form (表单)

细说 Form (表单) 阅读目录 开始 简单的表单,简单的处理方式 表单提交,成功控件 多提交按钮的表单 上传文件的表单 MVC Controller中多个自定义类型的传入参数 F5刷新问题并不是WebForms的错 以Ajax方式提交整个表单 以Ajax方式提交部分表单 使用JQuery,就不要再拼URL了! id, name 有什么关系 使用C#...

【Go学习笔记】 string转Map 和 Map嵌套取值 和 interface转string

Go字符串转Map 和 Map的嵌套取值 想用Go写爬虫练习一下语法的,结果数据类型转换还不熟悉。 强行 map嵌套取值就会报错type interface {} does not support indexing 字符串转Map // 示例字符串 resString := ` { "args": {}, "headers": { "Accept...

Spring Boot配置文件详解:自定义属性、随机数、多环境配置

自定义属性与加载 我们在使用Spring Boot的时候,通常也需要定义一些自己使用的属性,我们可以如下方式直接定义: application-dev.yml 1 com.didispace.blog: 2 3 name: 程序猿DD 4 5 title: Spring Boot教程 6 7 desc: ${com.didispace.blog.na...

Android中Parcel的分析以及使用

简单点来说:Parcel就是一个存放读取数据的容器, Android系统中的binder进程间通信(IPC)就使用了Parcel类来进行客户端与服务端数据的交互,而且AIDL的数据也是通过Parcel来交互的。在Java空间和C++都实现了Parcel,由于它在C/C++中,直接使用了内存来读取数据,因此,它更有效率。 分析Binder机制中的客户端与服务...

dateutil

Date、long、Calendar之间的相互转换 //当前时间 Date date = DateUtil.date(); //当前时间 Date date2 = DateUtil.date(Calendar.getInstance()); //当前时间 Date date3 = DateUtil.date(System.currentTimeMillis...

rokectMq

目录 消息模型 集群部署 NameServer producer消息队列选择器MessageQueueSeleetor 消息存储 commitLog数据存储文件 ConsumeQueue索引文件 IndexFile索引文件 消息查找 根据偏移量查询 根据消息id查询 根据消息key查询 实时更新消息消费队列与索引文件 消息队列与索引文件恢复 过期...