1

我遇到了与这个问题相同的问题:

如何防止在使用c导入excel文档时去掉前导零#

但我不确定这是否是我的场景的最佳解决方案。这是我用于进行导出的代码。有人知道我可以改变什么来防止前面的0被去掉吗?

private static void Export_with_XSLT_Web(数据集dsExport,string[]s标题,string[]s文件,导出格式格式类型,字符串文件名){HttpContext。当前。回应。清除();HttpContext。当前。回应。缓冲区=真;HttpContext。当前。回应。ContentType=“application/vnd.ms-excel”;HttpContext。当前。回应。AppendHeader(“content-disposition”,“附件;文件名=“+文件名);}//用于转换此数据集的XSLT。MemoryStream流=new MemoryStream();XmlTextWriter writer=新的XmlTextWriter(流,Encoding.UTF8);创建样式表(writer、sHeaders、sFiled、FormatType);作者。冲洗();流。Seek(0,SeekOrigin.Begin);XmlDataDocument xmlDoc=新的XmlData文档(dsExport);XslTransform xslTran=新的XslTransfer();xslTran公司。加载(新的XmlTextReader(流),null,null);using(StringWriter sw=new StringWiter()){xslTran公司。转换(xmlDoc,null,sw,null);HttpContext。当前。回应。写入(sw.ToString());作者。关闭();流。关闭();HttpContext。当前。回应。结束();}}}

这是创建样式表的方法,这里有什么可以更改以将部分或所有字段作为文本引入的吗。

私有静态void CreateStylesheet(XmlTextWriter编写器,string[]s标题,string[]文件,导出格式格式类型){尝试{//xsl:样式表字符串ns=“http://www.w3.org/1999/XSL/Transform网站";作者。格式化=格式化。缩进;作者。WriteStartDocument();作者。WriteStartElement(“xsl”,“stylesheet”,ns);作者。WriteAttributeString(“版本”,“1.0”);作者。WriteStartElement(“xsl:output”);作者。WriteAttributeString(“方法”、“文本”);作者。WriteAttributeString(“版本”,“4.0”);作者。WriteEndElement();//xsl模板作者。WriteStartElement(“xsl:template”);作者。WriteAttributeString(“match”,“/”);//xsl:value-of用于头for(int i=0;i<sHeaders.Length;i++){作者。WriteString(“\”);作者。WriteStartElement(“xsl:value-of”);作者。WriteAttributeString(“select”,“'”+sHeaders[i]+“'”);作者。WriteEndElement();//xsl:值作家。WriteString(“\”);}//xsl:每个作者。WriteStartElement(“xsl:for-each”);作者。WriteAttributeString(“选择”,“导出/值”);作者。WriteString(“\r\n”);//数据字段的xsl:value-offor(int i=0;i<sFileds.Length;i++){作者。WriteString(“\”);作者。WriteStartElement(“xsl:value-of”);作者。WriteAttributeString(“select”,sFileds[i]);作家。WriteEndElement();//xsl:值作者。WriteString(“\”);}作家。WriteEndElement();//xsl:每个作者。WriteEndElement();//xsl模板作者。WriteEndElement();//xsl:样式表作者。WriteEndDocument();}catch(异常Ex){抛出Ex;}}
1
  • 我在工作中也遇到了同样的问题。还没有找到好的解决方案 评论 2009年1月8日16:39

3个答案

重置为默认值
2

我不知道XSL转换的输出:我假设它是Excel的xml格式。为了扭转这个过程,我在Excel表格中写了三个数字(007):一个作为数字,一个作为文本,一个是数字,但格式是显示用零填充的三位数。然后我将其保存为xml并查看。以下是片段:

<行><Cell><Data ss:Type=“Number”>7</Data></Cell></行><行>007数据</行><行><Cell ss:StyleID=“s22”><Data ss:Type=“Number”>7</Data></Cell></行>

我不是在模仿这种风格,但你可以很容易地做到。

编辑:一如既往,谷歌是你的朋友(我也是;-):http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm#CSVAndExcel.

编辑(2):我认为链接已经足够了。文章说(如果你确定目标是只有Excel)可以使用特定于Excel的CSV语法。所以在你的情况下,看看你的代码,我认为你应该插入缺失的逗号并更改开口

作者。WriteString(“\”);

进入之内

作者。WriteString(“=\”);

小心我没有尝试。

出于好奇,有一个问题是:只输出需要处理的数据集,而不是

  • 在XML中转换
  • 生成特殊XSL
  • 执行XSL转换
  • 将结果复制到响应流

?

6
  • 我在上面添加了创建样式表的方法。 评论 2009年1月8日15:00
  • 我懂了。。。您正在生成CSV(或类似的):所以我的提示不适用。对不起的。 评论 2009年1月8日15:07
  • 我可以对WriteAttributeString做点什么,告诉它将其导出为文本吗? 评论 2009年1月8日15:20
  • 这个链接对我帮助不大,因为我正在将数据表中的列导出到excel。相反,我想知道是否有办法更改样式表? 评论 2009年1月8日15:53
  • 很好,把“=\”放在一起就行了。为什么会这样呢?直接使用数据集可能会更简单,但我没有写代码,所以我很难回答。 评论 2009年1月8日16:48
1

在字符串的前面添加一个'(单引号)。

1
  • 如果我在字符串的前面加上一个引号,它就会显示在文件中。 评论 2009年1月8日14:35
0

如果你知道一个字段应该是5位数的邮政编码(或SSN的某些部分或其他内容),那么你可能必须通过sprintf()或其他等效的c#来手动修复它。如果它是一个不确定的字段,那么你完全可以任何读取数据。

对不起,我把这个问题误解为从Excel读取到HTML。

您是否考虑过导出为CSV而不是Excel?

2
  • 因此,您无法在响应中设置任何内容。标题。 评论 2009年1月8日14:35
  • 看一下编辑过的问题,看起来您实际上发出的是CSV(或其他非逗号分隔的文本)。 评论 2009年1月8日15:18

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.