Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel不';t应用HTML中的mso编号格式_Html_Excel_Formatting_Cell - Fatal编程技术网

Excel不';t应用HTML中的mso编号格式

Excel不';t应用HTML中的mso编号格式,html,excel,formatting,cell,Html,Excel,Formatting,Cell,以下是我的情况:我有一个Web查询连接到我的服务器。所有带有日期的单元格都具有“常规”水平对齐(无对齐)和MM/DD/YYYY格式。看起来是这样的: =CONVERT("04/12/2019 20:48:21") 使用非常简单的HTML刷新服务器响应时: <html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xm

以下是我的情况:我有一个Web查询连接到我的服务器。所有带有日期的单元格都具有“常规”水平对齐(无对齐)和MM/DD/YYYY格式。看起来是这样的:

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

使用非常简单的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>

桌子
{
mso显示的十进制分隔符:“\”;
mso显示千位分隔符:“\,”;
} 
.cs0{mso编号格式:\@;}
.cs1{mso编号格式:mm\/dd\/yyyy;}
标题:
引导
日期:
2014年8月27日上午8:02+格林威治标准时间0:00
显示名称
创建日期
上次修改日期
达罗杂志。
04/23/2009
08/06/2014
q,教授。
06/04/2014
08/06/2014
dasd-dsa,Dr。
06/16/2014
08/06/2014
布亚特·杰罗姆博士。
08/12/2014
08/12/2014
请注意,样式部分中的.cs1类具有
mso编号格式:mm\/dd\/yyyy
,因此Excel文档中的所有日期都应类似于
08/27/2014

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

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


请帮忙。我做错了什么?

好的,我终于找到了解决办法


由于未知原因,Excel在从HTML检索刷新数据时无法理解正确的ISO 8601格式。所有日期时间都应以
yyyy-MM-dd
/
yyy-MM-dd HH:MM:ss
/
HH:MM:ss
格式传递,格式应正确
mso number format
节中定义的参数(
mso number format:“MM\\\/dd\\\/yyyy”
)。显然,excel无法识别多个用于格式化的类,因此如果指定
123
,并且使用
.cls1{mso number format:“\\\.00”}
,则无法使用。您需要使用
123
,而不使用
cls2
。这对我来说是一个足够好的解决方案,您可能还想尝试一下
123
,不确定这是否有效。

仅供参考,我已经完成了这项工作,效果非常好

    'style to format numbers to string 
    Dim style As String = "<style>.textmode{mso-number-format:\@;}</style>"
    Response.Write(style)
    Response.Output.Write(sw.ToString())
将数字格式化为字符串的样式 Dim style As String=“.textmode{mso数字格式:\@;}” 回应。写作(风格) Response.Output.Write(sw.ToString())
您也可以用这种方式尝试任何数字格式。

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

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

正确的mso编号格式代码应为
mso编号格式:“mm\\/dd\\/yyyy”
。但这并不是全部解决方案。如果Excel读取HTML,那么它将获取值,就像用户将这些值输入单元格一样。如果在单元格中输入2014年6月8日,将创建哪个日期值?谢谢您的回答!如果在单元格中输入2014年6月8日,将创建2014年6月8日。我还尝试了
mm\\/dd\\/yyyy
格式,Excel中的所有单元格现在都有
mm/dd/yyyy
格式,但它是。请注意编辑器中两个日期的格式差异。您确定您输入的2014年6月8日存储为MM/DD/YYYY吗?不是DD/MM/YYYY?但无论如何,HTML是一种数据表示格式。它通常不能用于数据交换。XML是一种很好的数据交换格式,因为它很容易转换为HTML。但在XML中,我们也必须遵守约定。日期值的一个很好的约定是ISO格式YYYY-MM-DD。因此,对于数据交换,请使用此格式,并在需要时将其转换为其他格式进行数据表示。我再次检查,您是对的:2014年6月8日根据系统区域设置(DD.MM.YYYY)存储为2014年6月8日。ISO格式YYYY-MM-DD和mso编号格式:“MM\\/DD\\/YYYY”非常适合!多谢各位!不幸的是,不可能每次从外部系统导出Excel文件时都编写这样的公式。我的问题不是关于一个文档,而是关于一个常见的重复案例。Excel需要在
mso number format
中使用Excel格式代码(“自定义”格式),而忽略其他所有内容。这可能就是它不理解您的格式说明的原因。