从Excel中导出XML并保留date格式

许多StackOverflowpost和其他在线论坛有类似的问题,但他们没有真正解决我遇到的问题。

我正在从Excel中导出一个XML文件。 Excel文件包含date。 然而,在XML文件中,这些date显示为整数 – 我相信这个date是自1/0/1900以来的第n天。

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

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

我明显是一个XML和JavaScript的新手,所以你的帮助将是真诚的赞赏。 谢谢。

Excel用于xml导出的格式取决于添加的XML模式。 这可以明确地创build和添加,或者 – 正如我怀疑你的情况 – 已被隐式/自动生成的Excel。

在我的例子中,我有两个colums,第一个通过XML-Schema格式化date时间,第二个是正常的文本,只有在Excel(列格式)表示一个date。

两个包含日期的列的Excel表的截图

当我把它作为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模式(例如“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,根据需要调整架构并导入这个新的架构。 Bummer是你必须再次设置映射(或者试试这个: Excel 2007 XML源地图 – 刷新模式 )。 通常我让MS Access生成我的XML架构,即生成所需的表格,插入一些值,并将表格显示为XML(勾选添加架构的选项)。

我希望这个大纲给你一个关于如何进行的想法。

问候

安德烈亚斯

这其实很简单,例如,如果你正在创build自己的“模式”。 创build一个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将显示date元素的附加分组。 使用值(不是格式())作为列标题,导出将是格式化date而不是整数。 你不需要从excel或访问做任何特殊的.xsd提取!

有关如何构build自己的模式的示例,我发现这个video是: http : //www.youtube.com/watch?v=9bat12gH3Qs