2009-07-14 45 views
1

问候。创建用于导入Excel的XML,特别是日期

我有一个简单的应用程序,它可以生成一些性能记录数据,并且我需要输出可以被Excel访问。

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

问题是,我如何强制Excel将日期视为日期?我试着将日期值保存为各种格式,但Excel始终将其视为文本。如果我点击单元格并按下回车键,它会愉快地将它显示为一个日期。当我做“文本到列”的时候也一样。

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

回答

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

啊,我明白了。我没有打算创建实际的Excel XML文档,看起来有点过分。这是必要的吗? – Cylindric 2009-07-14 12:54:43

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) 

这个公式物理重新安排日期,以便在一个月的前一天,然后应用价值的功能它将其转换为数值日期+时间。

如果只能有一个“日”的数字(例如,2009年1月7日1时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如何解释日期。

+0

我可以将记录器的输出格式设置为任何我喜欢的,我不想要做的是将任何公式添加到Excel。基本上我希望我能打开它,Excel会识别它。它确认数字毕竟:) 我的语言环境设置为英国,所以dd/mm/yyyy格式的作品 - 如果我添加另一列并使用类似= MONTH(A2)的东西,它会正确显示为“7 “,但该字段仍然是文本,因此我不能只按”短日期“按钮进行格式化。 我会放弃Excel并为其创建一个XSLT或其他东西。 – Cylindric 2009-07-16 10:33:08

+1

@Cylindric,啊,你说得对。您可能已经在这一点上继续前进,但我认为您需要做的就是让日志格式的日期+时间与适当的XML模式匹配DateTime简单数据类型(“YYYY-MM-DDThh:mm:ss” )不是Excel首选格式之一。我只是试了一个例子,它的工作原理。如果您未在XML中引用XSD文件,则Excel将推断该架构,并且只有根据XML架构规范将元素格式化为适当的DateTime时,才会推断元素包含日期。请参阅:http://www.w3schools.com/Schema/schema_dtypes_date.asp – devuxer 2009-07-16 15:15:22

1

我会尝试这条路线: 创建一个XML地图数据源,如:(我们称之为 “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”面板(数据 - > XML - > XML Source)
  2. 在XML Source窗格中选择“XML Maps ...”按钮
  3. 选择“Add ...”按钮
  4. 选择并打开XML映射文件(文件类型变化*的.xsd:我们的是entriesMap.xsd)
  5. 拖动地图元素(起始日期,总计等),以自己的cols或拖动顶级元素
  6. 一次全部
  7. 转到数据 - > XML - >导入...
  8. 选择XML数据文件

不知道如果我有XSD文件的权利,但我相信,如果你走这条路线会工作。

+0

这是正确的方法 - 但是,当使用type =“xs:timeDate”时,XML要求使用ISO8601日期,而Excel不幸地不支持它 - 请参阅http:// office.microsoft.com/en-gb/excel-help/xml-schema-definition-xsd-data-type-support-HP001046225.aspx。来吧M $! – thedayofcondor 2013-07-17 13:13:40

4

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

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

这样:

1999-05-31T13:20:00 

有关Excel如何推断出更多信息的XML类型检查MSDN

1

这为我工作,而无需使用XSD或什么:

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

Excel根据实际区域设置显示如下:

07/14/2009 01:02 
1

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