2011-10-27 104 views
1

許多StackOverflow帖子和其他在線論壇都有類似的問題,但他們都沒有真正解決我遇到的問題。從Excel導出XML並保存日期格式

我從Excel導出XML文件。 Excel文件包含日期。然而,在XML文件中,這些日期顯示爲整數 - 我認爲日期是自1/0/1900以來的第n天。

我正在使用JavaScript從XML文件中提取數據以填充網頁中的表格。

我懷疑解決方案可能有兩種不同的形式: 1.一種在JavaScript中將整數轉換爲它所代表的日期的方法。 2.一種強制XML文件從Excel文件中獲取格式化日期的方法。

我明顯是XML和JavaScript的新手,所以您的幫助將真誠地感謝。謝謝。

+0

你如何導出XML? –

+0

我正在使用開發人員選項卡上的導出按鈕。順便說一下,我使用的是Excel 2007。 –

+0

您是否有能力編輯Excel文件,或者是否有某些原因需要在導出之前保持原樣? –

回答

2

Excel用於xml導出的格式取決於添加的XML模式。這可以是明確創建和添加或 - 如我懷疑你的情況 - 已被隱式/自動生成由Excel。

在我的示例中,我有兩個colums,第一個通過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的模式(例如,使用「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> 

第一列是在格式日期時間的模式,第二i s varchar。同樣,你甚至可能不知道,Excel是如何處理你的XML數據的,因爲這個模式是自動生成的(如果我在Excel 2003中正確記得有消息表明模式已經爲你生成)

現在如何實現這一點 - 尤其是在現有文件中:我會嘗試提取XML模式(請參閱上文),將其另存爲something.xsd,根據需要調整模式並導入此新模式。 Bummer是你必須再次設置映射(或者試試這個:Excel 2007 XML Source Maps - Refreshing Schemas)。通常我讓MS Access生成我的XML模式,即生成所需的表格,插入一些值並將表格顯示爲XML(勾選添加模式的選項)。

我希望這個大綱能讓您瞭解如何繼續。

問候

安德烈亞斯

+0

謝謝,安德烈亞斯。我沒有登錄一段時間,所以我錯過了您的回覆,但感謝您的幫助。 –

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將顯示日期元素的附加分組。使用值(不是格式())作爲列標題,並且導出將是格式化日期而不是整數。您不需要從Excel或Access中進行任何特殊的.xsd提取!

關於如何建立自己的模式爲例,我發現這個視頻被發現在:http://www.youtube.com/watch?v=9bat12gH3Qs