Excel不会从HTML应用mso-number格式

时间:2014-08-27 11:31:24

标签: html excel formatting cell

以下是我的情况:我有simple Excel OOXML file与我的服务器的Web Query连接。所有具有日期的单元都具有" General"水平对齐(无对齐)和MM / DD / YYYY格式。它看起来像这样:

Before refresh

使用相当简单的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="q q, Prof.">q q, 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文档中的所有日期应显示为08/27/2014

由于未知原因,Excel将错误的格式(MM.DD.YYYY)应用于日期单元格: After refresh

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

请帮忙。我做错了什么?

4 个答案:

答案 0 :(得分:5)

好的,我终于找到了解决方案。

由于未知原因,从HTML检索刷新数据时,Excel无法理解正确的ISO 8601格式。所有日期时间都应以yyyy-MM-dd / yyyy-MM-dd HH:mm:ss / HH:mm:ss格式传递,并在mso-number-format部分styles部分中定义正确的mso-number-format:"mm\\/dd\\/yyyy"参数(在我的情况下为{{1}})

答案 1 :(得分:0)

我对数字格式有同样的问题。显然,excel不会识别多个类用于格式化目的,因此如果您指定<td class="cls1 cls2">123</td>并且您有<style>.cls1 {mso-number-format:"\#\.00"}</style> - 那将无法正常工作。您需要使用<td class="cls1">123</td>,而不是cls2。这对我来说是一个很好的解决方案,你可能还想尝试<td style='mso-number-format:"\#\.00"' class='cls2'>123</td>,不确定它是否会起作用。

答案 2 :(得分:0)

仅供参考,我已经完成了这项工作并且效果很好。

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

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

答案 3 :(得分:0)

只需编写公式,如下所示:

=CONVERT("04/12/2019 20:48:21")