Excel不会从HTML应用mso-number-format

这是我的情况:我有简单的Excel OOXML文件与Web查询连接到我的服务器。 具有date的所有单元格具有“常规”水平alignment(不alignment)和MM / DD / YYYY格式。 它看起来像这样:

刷新之前

刷新服务器响应与非常简单的HTML:

<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"> <head> <style id="Leads_style"> table { mso-displayed-decimal-separator:"\."; mso-displayed-thousand-separator:"\,"; } .cs0 { mso-number-format:\@; } .cs1 { mso-number-format:mm\/dd\/yyyy; } </style> </head> <body> <table id="tbl_0_Leads" x:publishsource="Excel"> <tr> <td>Title:</td> <td colspan="2" style="white-space:nowrap">Leads</td> </tr> <tr> <td>Date:</td> <td align="left" colspan="2">27 Aug 2014 08:02 AM +0:00 GMT</td> </tr> <tr> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> </tr> </table> <table id="tbl_3_Leads" x:publishsource="Excel"> <tr> <td>Display Name</td> <td>Created Date</td> <td>Last Modified Date</td> </tr> <tr> <td class="cs0" x:str="Darrow Mag, Mrs.">Darrow Mag, Mrs.</td> <td class="cs1">04/23/2009</td> <td class="cs1">08/06/2014</td> </tr> <tr> <td class="cs0" x:str="qq, Prof.">qq, Prof.</td> <td class="cs1">06/04/2014</td> <td class="cs1">08/06/2014</td> </tr> <tr> <td class="cs0" x:str="dasd dsa, Dr.">dasd dsa, Dr.</td> <td class="cs1">06/16/2014</td> <td class="cs1">08/06/2014</td> </tr> <tr> <td class="cs0" x:str="Bouat Jerome, Dr.">Bouat Jerome, Dr.</td> <td class="cs1">08/12/2014</td> <td class="cs1">08/12/2014</td> </tr> </table> </body> </html> 

请注意样式部分中的.cs1类具有mso-number-format:mm\/dd\/yyyy ,因此Excel文档中的所有date应该看起来像08/27/2014

由于不明原因,Excel将错误的格式( MM.DD.YYYY )应用于date单元格: 刷新后

看起来正常的两个单元格也有MM.DD.YYYY格式,但是Excel将它们显示为MM/DD/YYYY左alignment,因为DD值远大于MM值的最大值(是的,这真的很奇怪)。

请帮忙。 我究竟做错了什么?

好的,我终于find了解决办法。

由于不明原因,从HTML中检索刷新的数据时,Excel不理解适当的ISO 8601格式。 所有的date时间应该以styles部分( mso-number-format:"mm\\/dd\\/yyyy"定义的正确的mso-number-format参数以yyyy-MM-dd / yyyy-MM-dd HH:mm:ss / HH:mm:ss mso-number-format:"mm\\/dd\\/yyyy"在我的情况)。

我有数字格式相同的问题。 显然,excel不能识别多于一个类的格式化目的,所以如果你指定了<td class="cls1 cls2">123</td>并且你有<style>.cls1 {mso-number-format:"\#\.00"}</style> – 这是行不通的。 您需要使用<td class="cls1">123</td> ,而不使用cls2 。 对我来说,这是一个很好的解决scheme,你可能也想尝试<td style='mso-number-format:"\#\.00"' class='cls2'>123</td>会工作。

只是供参考,我已经做到了这一点,它的效果很好。

  'style to format numbers to string Dim style As String = "<style>.textmode{mso-number-format:\@;}</style>" Response.Write(style) Response.Output.Write(sw.ToString()) 

你也可以用这种方式尝试任何数字格式。