xslt+xml生成Excel

  做了个Excel的导出,Excel的表头和表尾有些麻烦,就想着用xslt模板来做。期间碰到了一些问题。

  如果只是根据xslt转换xml的话,下面的代码就可以实现:

  
 1 ''' <summary>
 2     ''' Xml2Excel
 3     ''' </summary>
 4     ''' <param name="xsltName">模板文件</param>
 5     ''' <param name="xmlName">xml文件</param>
 6     ''' <param name="xlsName">excel文件</param>
 7     Sub Xml2Excel(xsltName As String, xmlName As String, xlsName As String)
 8         Dim xmlDoc As Xml.XmlDocument = New Xml.XmlDocument()
 9         Dim proc As XslCompiledTransform = New XslCompiledTransform()
10         Dim writer As XmlTextWriter = New XmlTextWriter(xlsName, System.Text.Encoding.Unicode)
11 
12         xmlDoc.Load(xmlName)
13         proc.Load(xsltName)
14         writer.WriteProcessingInstruction("xml", "version='1.0'")
15 
16         proc.Transform(xmlDoc, Nothing, writer)
17 
18         writer.Close()
19 
20     End Sub
xml2Excel

  打开这个导出后的文件发现,其实这个还是xml,只是以excel的方式呈现。所以还需要将xml转换成excel

  
 1 Imports OIE = Microsoft.Office.Interop.Excel
 2 
 3     ''' <summary>
 4     ''' 把xml转存为excel
 5     ''' </summary>
 6     ''' <param name="tempExcelFileName"></param>
 7     ''' <param name="excleFileName"></param>
 8     Private Sub ConvertToExcel(tempExcelFileName As String, excleFileName As String)
 9 
10         Dim missing As Object = Reflection.Missing.Value
11         Dim excel As OIE.ApplicationClass
12         Dim workbook As OIE._Workbook
13         excel = New OIE.ApplicationClass()
14         Try
15 
16             'workbook=excel.Workbooks.Open(tempExcelFileName,0,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing);
17             workbook = excel.Workbooks.OpenXML(tempExcelFileName, 1, 1) '/New Object[]{1,New Object[]{"A"}}
18 
19             workbook.SaveAs(excleFileName,
20                             OIE.XlFileFormat.xlWorkbookNormal,'Excel的格式
21                             missing,
22                             missing,
23                             False,
24                             False,
25                             OIE.XlSaveAsAccessMode.xlNoChange,
26                             False,
27                             missing,
28                             missing,
29                             missing,
30                             missing)
31 
32             IO.File.Delete(tempExcelFileName)
33 
34         Catch ex As Exception
35             Throw ex
36         Finally
37             excel.Quit()
38             excel = Nothing
39         End Try
40     End Sub
ConvertToExcel

  需要注意的是SaveAs中的参数fileFormat(保存的文件格式),保存的excel版本要和本机上的版本一直,不然会有HRESULT:0x800A03EC异常。

  将Excel另存为xml文件,可以快速生成一个xslt文件,然后根据xslt格式修改此模板文件。注意将表格中的ss:ExpandedColumnCount 属性去掉。此属性表示表格的可扩展行数,不然转换后的文件可能无法打开。

  

  此链接关于Excel的一些属性描述挺清楚: http://zhangzhongjie.iteye.com/blog/1779891


  

转载于:https://www.cnblogs.com/sshadow/p/8554725.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值