我正在创建一个在Excel中打开的HTML表格。有哪个HTML标签或CSS样式可以用来“告诉”Excel将单元格内容显示为文本?
我正在创建一个在Excel中打开的HTML表格。有哪个HTML标签或CSS样式可以用来“告诉”Excel将单元格内容显示为文本?
您可以对数字、文本、日期等单元格应用格式。
请参见我之前的回答: 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>
使用该解决方案(使用数字格式的CSS样式)存在一个问题。Excel会出现错误“数字存储为文本”,这在某些情况下可能不方便。
为了避免这个问题,可以在字段开头使用零宽度空格字符(​)。
您也可以通过在 <td>
元素的值之前添加不换行空格:
来解决这个问题。
例如:
<td> 0:12:12.185</td>
而不是:
<td>0:12:12.185</td>
我没有足够的声望来评论或点赞,但Raposo的答案对我非常有效。我们的系统导入SSRS报告并在本地模式下运行它们。它将DataSet查询存储在数据库中,并在运行时提取它们。然而,对于Excel导出,它只是将查询的结果数据运行到一个DataGrid对象中,并直接将其作为HTML写入流中,将扩展名设置为.xls。将Raposo的解决方案放在报表的DataSet查询中:
SELECT someColumn = '​' + someColumn
FROM, etc.
并在SSRS字段表达式中删除它:
=Replace(Fields!someColumn.Value, "​", "")
这是我发现唯一有效的东西。谢谢!
我找到了五种解决这个问题的方法:
按照scunliffe的描述将字段格式化为文本。这种方法存在Raposo所述的绿色三角形问题。
如Raposo所述,使用​。这种方法存在一个问题,即该值实际上不是一个数字。如果数据被拉入某些系统进行处理,则可能会出现问题。
将TD添加为<td>="067"</td>。这与#2具有相同的问题。
将TD添加为<td>=text(067,"000")</td>。这也与#2具有相同的问题。
使用CSS类.text3 {mso-number-format:"000";}并将此类添加到TD中。这是我首选的解决方案,但它存在一个问题,即如果您有不同长度的数字,则需要多个类。 如果您编写标题然后遍历数据,则必须在知道需要哪些类之前添加所有可能的类。 但这样做的好处是文本确实是数字,并且没有绿色三角形。
太棒了!我按照以下方式实现了它
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'>​");
HttpContext.Current.Response.Write(Coltext);
HttpContext.Current.Response.Write("</Td>");
对我来说它很好用
尝试在您的值之前添加单引号:
'
那么你的单元格将变成
<td>'007</td>
这是唯一对我有效的解决方案。对于“Open Office”和“Libre Office”,没有任何其他方法可行,但我的解决方案却行得通。最好的部分是,如果您复制该值,它不会复制单引号。
.htm
格式,并在生成的文件中搜索mso-number-format
(或高级方法:复制单元格并从剪贴板获取HTML)。CSS也可以内联<td style='mso-number-format:"#,##0"'>2345</td>
,但这可能会使文件变得更大。 - Slai