创建XML以导入Excel,尤其是日期

时间:2009-07-14 12:24:07

标签: xml excel import

问候。

我有一个生成一些性能记录数据的简单应用程序,我需要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>

6 个答案:

答案 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工作表中:

  1. 打开“XML源”窗格(数据 - &gt; XML - &gt; XML源)
  2. 在“XML源”窗格中选择“XML Maps ...”按钮
  3. 选择“添加...”按钮
  4. 选择并打开XML Map文件(更改文件类型* .xsd:我们的是entriesMap.xsd)
  5. 将地图元素(StartDate,Total等)拖动到自己的cols或一次拖动顶部元素
  6. 转到数据 - &gt; XML - &gt;导入...
  7. 选择您的XML数据文件
  8. 不确定我的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如何解释日期。