如何格式化 HTML 表格单元格,使得 Excel 将其格式化为文本?

46

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

7个回答

126

您可以对数字、文本、日期等单元格应用格式。

请参见我之前的回答: 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>

15
花了太长时间在谷歌上找这个解决方案了...这些将HTML表格转换为Excel电子表格的贴士实在是太难找了。 - John
2
太棒了,这让我的一天都变得美好了...差不多一年后才发现这个...哈哈,无论如何还是谢谢你 :) - pojomx
我在LibreOffice中打开时无法使其工作。但是M$ Excel可以正常工作。 - javabeangrinder
@javabeangrinder 是的,格式设置是针对 Microsoft Excel 特定的。我认为 OpenOffice、LibreOffice 等没有任何特殊设置。 - scunliffe
2
对于任何使用特殊数字格式的人:您可以将Excel文件保存为.htm格式,并在生成的文件中搜索mso-number-format(或高级方法:复制单元格并从剪贴板获取HTML)。CSS也可以内联 <td style='mso-number-format:"#,##0"'>2345</td>,但这可能会使文件变得更大。 - Slai
显示剩余3条评论

15

使用该解决方案(使用数字格式的CSS样式)存在一个问题。Excel会出现错误“数字存储为文本”,这在某些情况下可能不方便。

为了避免这个问题,可以在字段开头使用零宽度空格字符(&#8203;)。


留下一个不可见的字符,但它看起来更好! - TheStoryCoder
这是唯一能帮助我将单元格强制转换为文本的方法。在值之前添加了这个,嘭!变成文本了! - Gary
谢谢,这对我有用。(mso-number-format:"@";/强制文本/不是) - Lloyd

14

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


哦,兄弟你救了我!✌ - Urvish Joshi
看到这个答案时,我认为它是一个解决问题的变通方法,并且应用它解决了我的问题。谢谢兄弟。 - fatih

3

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

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

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

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

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


2

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

  1. 按照scunliffe的描述将字段格式化为文本。这种方法存在Raposo所述的绿色三角形问题。

  2. 如Raposo所述,使用&#8203;。这种方法存在一个问题,即该值实际上不是一个数字。如果数据被拉入某些系统进行处理,则可能会出现问题。

  3. 将TD添加为<td>="067"</td>。这与#2具有相同的问题。

  4. 将TD添加为<td>=text(067,"000")</td>。这也与#2具有相同的问题。

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


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>");

对我来说它很好用


-2

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

'

那么你的单元格将变成

<td>'007</td>

这是唯一对我有效的解决方案。对于“Open Office”和“Libre Office”,没有任何其他方法可行,但我的解决方案却行得通。最好的部分是,如果您复制该值,它不会复制单引号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接