格式化HTML表格单元格以便Excel格式化为文本?

时间:2011-01-06 21:12:22

标签: html excel formatting cell

我正在创建一个HTML表格,该表格将在Excel中作为电子表格打开。我可以用什么HTML标签或CSS样式“告诉”Excel将单元格的内容显示为文本?

7 个答案:

答案 0 :(得分:99)

您可以将格式应用于单元格中的数字,文本,日期等。

请参阅我之前的回答:HTML to Excel: How can tell Excel to treat columns as numbers?

(已调整的代码段)

如果您在页面中添加CSS类:

.num {
  mso-number-format:General;
}
.text{
  mso-number-format:"\@";/*force text*/
}

在你的TD上打那些课程,它有用吗?

<td class="num">34</td>
<td class="num">17.0</td>
<td class="text">067</td>

答案 1 :(得分:13)

使用该解决方案存在一个问题(带数字格式的css样式)。 Excel给出错误“存储为文本的数字”,这在某些情况下可能不方便。 为了避免这个问题,可以在字段的开头使用ZERO WIDTH SPACE字符(&amp;#8203;)。

答案 2 :(得分:6)

您也可以通过在&nbsp;元素的值之前添加不间断空格<td>来解决问题。
例: <td>&nbsp;0:12:12.185</td>
而不是: <td>0:12:12.185</td>

答案 3 :(得分:3)

我没有足够的代表评论或投票,但Raposo的答案对我来说非常有效。我们的系统导入SSRS报告并以本地模式运行它们。它将DataSet查询存储在数据库中,并在运行时将其拉出。但是对于Excel导出,它只是将查询的结果数据运行到DataGrid对象中,并将其作为HTML直接写入流,将扩展名设置为.xls。将Raposo的解决方案放在报告的DataSet查询中:

SELECT someColumn = '&#8203;' + someColumn 
FROM, etc.

并在SSRS字段的表达式中删除它:

=Replace(Fields!someColumn.Value, "&#8203;", "")

是我发现的唯一有效的东西。谢谢!

答案 4 :(得分:2)

精湛的解决方案!我就像下面那样做了

HttpContext.Current.Response.Write("<style>  .txt " + "\r\n" + " {mso-style-parent:style0;mso-number-format:\"" + @"\@" + "\"" + ";} " + "\r\n" + "</style>");
HttpContext.Current.Response.Write("<Td class='txt'>&#8203;");
HttpContext.Current.Response.Write(Coltext);
HttpContext.Current.Response.Write("</Td>");

它适用于我

答案 5 :(得分:2)

我找到了五个解决这个问题的方法:

  1. 将字段格式化为文本,如scunliffe所述。这有Raposo所述的绿色三角形的问题。

  2. 使用&amp;#8203;正如Raposo所描述的那样。这有一个问题,价值不是真正的数字。如果将数据拉入某个系统进行处理,这可能是一个问题。

  3. 将TD添加为&lt; td&gt; =&#34; 067&#34;&lt; / td&gt;。这与#2具有相同的问题。

  4. 将TD添加为&lt; td&gt; = text(067,&#34; 000&#34;)&lt; / td&gt;。这也与#2有相同的问题。

  5. 使用CSS类.text3 {mso-number-format:&#34; 000&#34 ;;}并将此类添加到TD。这是我的首选解决方案,但如果您有不同长度的数量,则存在需要多个类的问题。如果您编写标题然后遍历数据,则必须先添加所有可能的类,然后才能知道您需要哪些类。但这样做的好处是文本实际上是一个数字而且没有绿色三角形。

答案 6 :(得分:0)

尝试在您的值前添加单引号:

'

所以您的手机会变成

<td>'007</td>

这是唯一对我有用的解决方案。我的解决方案在“ Open Office”和“ Libre Office”工作过。最好的部分是,如果您复制值,则不会复制单引号。