以下是我的情况:我有simple Excel OOXML file与我的服务器的Web Query连接。所有具有日期的单元都具有" General"水平对齐(无对齐)和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> </td>
<td> </td>
<td> </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
)应用于日期单元格:
看似正常的两个单元格也有MM.DD.YYYY
格式,但Excel将它们显示为MM/DD/YYYY
左对齐,因为DD值远远大于MM值的最大值(是的,这真的是真的也很奇怪。
请帮忙。我做错了什么?
答案 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")