从Excel导出XML并保留日期格式

时间:2011-10-27 15:29:31

标签: javascript xml excel date

许多StackOverflow帖子和其他在线论坛都有类似的问题,但没有一个能真正解决我遇到的问题。

我正在从Excel导出XML文件。 Excel文件包含日期。但是,在XML文件中,这些日期显示为整数 - 日期是自1/0/1900以来的第n天,我相信。

我正在使用JavaScript从XML文件中提取数据以填充网页中的表格。

我怀疑解决方案可以有两种不同的形式: 1.一种在JavaScript中将整数转换为它所代表的日期的方法。 2.一种强制XML文件从Excel文件中获取格式化日期的方法。

我显然是XML和JavaScript的新手,所以非常感谢您的帮助。感谢。

2 个答案:

答案 0 :(得分:2)

Excel用于xml-export的格式取决于添加的XML架构。这可以显式创建和添加,或者 - 正如我怀疑的那样 - 已经由Excel隐式/自动生成

在我的示例中,我有两个列,第一个通过XML-Schema格式化日期时间,第二个是普通文本,仅用于表示Excel(列格式)日期。

Screenshot of an excel-sheet with two columns both containing dates

当我将其导出为XML时,我得到两个看似完全不同的结果:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<dataroot>
    <Tabelle11>
        <Title_1>2009-10-12T00:00:00.000</Title_1>
        <Title_2>40098</Title_2>
    </Tabelle11>
    <Tabelle11>
        <Title_1>2000-01-01T00:00:00.000</Title_1>
        <Title_2>36526</Title_2>
    </Tabelle11>
</dataroot>

当我检查XML-Schema时(例如使用“Debug.Print ActiveWorkbook.XmlMaps(1).Schemas(1).XML”),我看到了区别(只有片段,而不是完整的文件):

<xsd:element name="Title_1" minOccurs="0" od:jetType="datetime" od:sqlSType="datetime" type="xsd:dateTime">
    <xsd:annotation>
        <xsd:appinfo>
            <od:fieldProperty name="Format" type="10" value="dd.mm.yyyy"/>
        </xsd:appinfo>
    </xsd:annotation>
</xsd:element>
<xsd:element name="Title_2" minOccurs="0" od:jetType="text" od:sqlSType="nvarchar">
    <xsd:annotation>
        <xsd:appinfo>
            <od:fieldProperty name="Format" type="10" value="@"/>
        </xsd:appinfo>
    </xsd:annotation>
    <xsd:simpleType>
        <xsd:restriction base="xsd:string">
            <xsd:maxLength value="255"/>
        </xsd:restriction>
    </xsd:simpleType>
</xsd:element>

第一列是格式datetime的模式,第二列是varchar。同样,您可能甚至不知道Excel如何处理您的XML数据,因为这个模式是自动生成的(如果我在Excel 2003中正确回忆,有一条消息表明已为您生成了模式)

现在如何实现这一点 - 特别是在现有文件中:我会尝试提取XML-Schema (见上文),将其保存为something.xsd,根据您的需要调整架构需要并导入这个新的Schema。 Bummer是你必须再次设置映射(或试试这个:Excel 2007 XML Source Maps - Refreshing Schemas)。我经常让MS Access生成我的XML-Schema,即生成所需的表,插入一些值并将表作为XML表示(勾选添加模式的选项)。

我希望这个大纲能让您了解如何继续。

此致

安德烈亚斯

答案 1 :(得分:2)

实际上非常简单......例如,如果您正在创建自己的“架构”。创建一个xml文件,并说你有谷歌分析数据来填充整个xml文件,每行包含以下三个数据点:

<date>1/1/2012</date>
<page>mywebsite.com</page>
<visits>100000</visits>

在导出之前将此xml文件导入为excel的数据映射架构时,您将结束上面描述的整数。但是,如果您将此架构定义为:

<date>2012-01-01</date>
<page>mywebsite.com</page>
<visits>100000</visits>

当您在工作表上组织xml时,Excel将显示日期元素的其他分组。使用值(不是format())作为列标题,导出将是格式化日期而不是整数。您无需从excel或访问中执行任何特殊的.xsd提取!!

有关如何构建自己的架构的示例,我发现此视频可以点亮:http://www.youtube.com/watch?v=9bat12gH3Qs