c#实现导出的excel文本转数值的方法!

feitianchong 2009-05-21 11:07:57
项目中做了导出excel功能,代码如下:

XmlNode xml = myXml;//我的数据已经取到了myXml中,这步多余
DataTable dt = new DataTable();

//生成客户端下载
this.Response.Clear();
this.Response.ContentType = "application/vnd.ms-excel";
this.Response.AddHeader("Content-Disposition", "attachment; filename=submittedData.xls");
XslCompiledTransform xtExcel = new XslCompiledTransform();
xtExcel.Load(Server.MapPath("Excel.xsl"));
xtExcel.Transform(xml, null, Response.OutputStream);
this.Response.End();

代码就这么多了,能够正常生成下载,问题是生成的Excel数据全是字符串,现需要将是数值的列转为数值,可以直接在Excel里统计的那种。求高手可以帮忙?
我现在的思路:
1.修改xml,加上schema,将部分列定义成数值型(xml里的列不固定,就算可以改起来也麻烦)
2.修改excel模板,让是数值的那部分默认以数值保存(这种方式最想要,但是Excel模板不太熟悉,求高手指点)
3.先在本地生成Excel,使用Excel后使用代码处理数值的列转为数值,然后提供给客户下载(如果都不可行也只能这样了)
里面加了个excel模板(Excel.xsl),内容如下:

<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:user="urn:my-scripts"
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="/">
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<xsl:apply-templates/>
</Workbook>
</xsl:template>
<xsl:template match="/*">
<Worksheet>
<xsl:attribute name="ss:Name">
<xsl:value-of select="local-name(/*/*)"/>
</xsl:attribute>
<Table x:FullColumns="1" x:FullRows="1">
<Row>
<xsl:for-each select="*[position() = 1]/*">
<Cell><Data ss:Type="String">
<xsl:value-of select="local-name()"/>
</Data></Cell>
</xsl:for-each>
</Row>
<xsl:apply-templates/>
</Table>
</Worksheet>
</xsl:template>
<xsl:template match="/*/*">
<Row>
<xsl:apply-templates/>
</Row>
</xsl:template>
<xsl:template match="/*/*/*">
<Cell><Data ss:Type="String">
<xsl:value-of select="."/>
</Data></Cell>
</xsl:template>
</xsl:stylesheet>






...全文
970 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
feitianchong 2009-05-21
  • 打赏
  • 举报
回复
默认是字符串,
<xsl:template match="/*/*/*">
<Cell><Data ss:Type="String">
<xsl:value-of select="."/>
</Data></Cell>
</xsl:template>


应该就是改这里,使用xml的规则选择类型,求精通 xml的高手相助!
symcious 2009-05-21
  • 打赏
  • 举报
回复
先在机器上创建一个Excel文件,在该文件中加入宏,将某些需要转为数值的列转换一下。
宏: Private Sub Workbook_Open()
Dim i As Long
i = 2
While Cells(i, 33) <> ""
Cells(i, 34) = CDec(Cells(i, 34))
Cells(i, 35) = CDec(Cells(i, 35))
i = i + 1
Wend
End Sub
在导出时复制这个excel文件,生成一个新的excel文件.
生成的方法是采用了Oledb方式,可以在网上搜下如何使用Oledb像操作数据库一样去操作excel文件。
llsen 2009-05-21
  • 打赏
  • 举报
回复
模板

但是这样有点慢,数据大的时候
还有就是数据如果是数字,默认倒出来的就是数字吧
feitianchong 2009-05-21
  • 打赏
  • 举报
回复
果然是我xml太差了。
<xsl:template match="/*/*/数值列名">
<Cell><Data ss:Type="String">
<xsl:value-of select="."/>
</Data></Cell>
</xsl:template>

结贴去了。。


feitianchong 2009-05-21
  • 打赏
  • 举报
回复
symcious说的会考虑的,也就是我的第三个方法了,但我的字段、索引都不确定,要这样速度太慢了。感谢。。
能用第二种修改Excel模板来解决吗?xml请教中。。

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧