问候。
我有一个生成一些性能记录数据的简单应用程序,我需要Excel可以访问输出。
我创建了一个包含字段等的XML文档,可以在Excel中打开它。
问题是,如何强制Excel将日期视为日期?我已经尝试将日期值保存为各种格式,但Excel始终将其视为文本。如果我单击单元格并按Enter键,它会愉快地将其显示为日期。当我做“文字到列”的事情时也一样。
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<entries>
<entry>
<StartDate>14/07/2009 01:02:35</StartDate>
<Total>1084</Total>
<Connecting>788</Connecting>
<Disconnecting>0</Disconnecting>
<Queries>98</Queries>
</entry>
<entry>
<StartDate>14/07/2009 01:10:00</StartDate>
<Total>1054</Total>
<Connecting>228</Connecting>
<Disconnecting>1</Disconnecting>
<Queries>104</Queries>
</entry>
</entries>
答案 0 :(得分:4)
诀窍是让Excel为您推断日期。为了将日期视为这样,将日期值格式化为UTC(iso8601)并删除“Z”以及之后的所有内容(excel不支持这些)。例如,转过来:
1999-05-31T13:20:00Z-05:00
到此:
1999-05-31T13:20:00
有关Excel如何推断XML类型的详细信息,请查看MSDN
答案 1 :(得分:1)
您可以完全指定工作表格式。感觉有点难看,制作人需要了解这么多目的地。
<Worksheet ss:Name="Sheet2">
<Table ss:ExpandedColumnCount="12" ss:ExpandedRowCount="15" x:FullColumns="1"
x:FullRows="1" ss:DefaultRowHeight="13.2">
<Column ss:StyleID="s21" ss:AutoFitWidth="0" ss:Width="47.4" ss:Span="11"/>
<Row ss:Index="4">
<Cell ss:StyleID="s22"><Data ss:Type="DateTime">2009-04-20T00:00:00.000</Data></Cell>
答案 2 :(得分:1)
我会尝试这条路线: 创建一个XML Map数据源,如:(我们称之为“entriesMap.xsd”)
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.com" elementFormDefault="qualified">
<xs:element name="entries">
<xs:complexType>
<xs:element name="entry">
<xs:complexType>
<xs:sequence>
<xs:element name="StartDate" type="xs:timeDate"/>
<xs:element name="Total" type="xs:integer"/>
<xs:element name="Connecting" type="xs:string"/>
<xs:element name="Disconnecting" type="xs:string"/>
<xs:element name="Queries" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:complexType>
</xs:element>
</xs:schema>
在新的Excel工作表中:
不确定我的xsd文件是否正确,但我相信如果你走这条路线就行了。
答案 3 :(得分:1)
这对我有用,不使用xsd或其他:
<StartDate>2009-07-14T01:02:35</StartDate>
Excel会根据实际的区域设置显示它:
07/14/2009 01:02
答案 4 :(得分:1)
您还可以创建一个与XML连接的Excel。在包含XML数据的工作表上,为每个日期时间字段添加额外的列,在该字段中使用公式从tekst值创建日期时间值,例如 = DATEVALUE([datetime_txt])+ TIMEVALUE([datetime_txt])。 即使刷新了连接,Excel也会将其视为日期时间。
答案 5 :(得分:0)
我看到了你的问题。您的日期格式为dd / mm / yyyy。如果将其更改为mm / dd / yyyy,Excel将自动将其识别为日期。
因此,一种解决方案是改变性能数据的记录方式。
另一种方法是在Excel中创建一个使用如下公式的新列:
=VALUE(MID(A2,4,2)&"/"&LEFT(A2,2)&RIGHT(A2,LEN(A2)-5))
(where A2 is the cell containing the date text)
此公式在物理上重新排列日期,使月份在日期之前,然后对其应用VALUE函数将其转换为数字日期+时间。
如果只有一个“日”数字(例如,1/07/2009 01:02:35),您需要使用if语句检查,如下所示:
=VALUE(IF(FIND("/",A2)=2,MID(A2,3,2)&"/"&LEFT(A2,1)&RIGHT(LEN(A2)-4),MID(A2,4,2)&"/"&LEFT(A2,2)&RIGHT(A2,LEN(A2)-5)))
希望有所帮助。
另一个想法:如果要在您的计算机上使用它,您可以更改Windows默认日期/时间格式。我认为这会影响Excel如何解释日期。