创build用于导入Excel的XML,特别是date

问候。

我有一个简单的应用程序生成一些性能日志logging数据,我需要输出到Excel访问。

我创build一个XML文档,其中的字段等,并可以在Excel中打开它。

问题是,我如何强制Excel将date视为date? 我已经尝试将date值保存为各种格式,但Excel始终将其视为文本。 如果我点击单元格,然后按Enter键,它会愉快地显示它作为一个date。 同样,当我做“文本到列”的东西。

<?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> 

诀窍是让Excel推断你的date。 为了将date视为这样处理,请将date值格式化为UTC(iso8601),并删除“Z”及其后的所有内容(excel不支持这些)。 例如,把这个:

 1999-05-31T13:20:00Z-05:00 

对此:

 1999-05-31T13:20:00 

有关Excel如何推断XMLtypes的更多信息,请查看MSDN

您可以完全指定工作表格式。 感觉有点难看,生产者需要了解如此多的目的地。

 <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> 

我会尝试这个路线:创build一个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工作表中:

  1. 打开“XML Source”面板(Data – > XML – > XML Source)
  2. 在XML Source窗格中select“XML Maps …”button
  3. select“添加…”button
  4. select并打开XML Map文件(更改filetype * .xsd:我们的是mapsMap.xsd)
  5. 将地图元素(StartDate,Total等)拖动到他们自己的cols或一次拖动顶部的元素
  6. 转到数据 – > XML – >导入…
  7. select你的XML数据文件

不知道如果我有正确的XSD文件,但我相信如果你走这条路线,它将工作。

这对我没有使用xsd或其他:

 <StartDate>2009-07-14T01:02:35</StartDate> 

Excel根据实际的区域设置显示它:

 07/14/2009 01:02 

您也可以创build一个连接到XML的Excel。 在包含XML数据的工作表上,为每个使用公式的date时间字段添加额外的列,以便从tekst值(例如= DATEVALUE([datetime_txt])+ TIMEVALUE([datetime_txt]))中创builddate时间值。 即使在刷新连接之后,Excel也会将其视为date时间。

我看到你的问题。 你的date格式是dd / mm / yyyy。 如果将其更改为mm / dd / yyyy,Excel将自动将其识别为date。

所以,一个解决scheme就是改变你的性能数据的logging方式。

另一个是在Excel中创build一个新的列,使用这样的公式:

 =VALUE(MID(A2,4,2)&"/"&LEFT(A2,2)&RIGHT(A2,LEN(A2)-5)) (where A2 is the cell containing the date text) 

此公式在物理上重新排列date,以便该月份在一天之前,然后将VALUE函数应用于该date以将其转换为数字date+时间。

如果可能只有一个“天”数字(例如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默认的date/时间格式。 我认为这影响了Excel如何解释date。