【问题标题】:Exporting XML from Excel and Keeping Date Format从 Excel 导出 XML 并保持日期格式
【发布时间】:2011-10-27 15:29:31
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 如何导出 XML?
  • 我正在使用开发人员选项卡上的导出按钮。顺便说一句,我使用的是 Excel 2007。
  • 您是否有能力编辑 Excel 文件,或者是否有某些原因它必须在导出之前保持原样?

标签: javascript xml excel date


【解决方案1】:

Excel 用于 xml 导出的格式取决于添加的 XML 模式。这可以是显式创建和添加的,或者——我怀疑你的情况——是由 Excel隐式/自动生成的。

在我的示例中,我有两个列,第一个通过 XML-Schema 格式化日期时间,第二个是普通文本,仅用于 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”)我看到了区别(只有 sn-p,不是完整的文件):

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

第一列是格式日期时间的模式,第二列是varchar。同样,您可能甚至不知道 Excel 如何处理您的 XML 数据,因为此架构是自动生成的(如果我在 Excel 2003 中没记错的话,有一条消息表明已经为您生成了架构)

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

我希望这份大纲能让您了解如何进行。

问候

安德烈亚斯

【讨论】:

  • 谢谢,安德烈亚斯。我有一段时间没有登录,所以错过了您的回复,但感谢您的帮助。
【解决方案2】:

实际上非常简单……例如,如果您要创建自己的“模式”。创建一个 xml 文件,并假设您有 google 分析数据来填充您的完整 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

【讨论】:

    猜你喜欢
    • 2022-12-20
    • 2013-01-05
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多