2009-07-14 48 views
1

問候。創建用於導入Excel的XML,特別是日期

我有一個簡單的應用程序,它可以生成一些性能記錄數據,並且我需要輸出可以被Excel訪問。

我創建一個帶有字段等的XML文檔,並可以在Excel中打開它。

問題是,我如何強制Excel將日期視爲日期?我試着將日期值保存爲各種格式,但Excel始終將其視爲文本。如果我點擊單元格並按下回車鍵,它會愉快地將它顯示爲一個日期。當我做「文本到列」的時候也一樣。

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

回答

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

啊,我明白了。我沒有打算創建實際的Excel XML文檔,看起來有點過分。這是必要的嗎? – Cylindric 2009-07-14 12:54:43

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) 

這個公式物理重新安排日期,以便在一個月的前一天,然後應用價值的功能它將其轉換爲數值日期+時間。

如果只能有一個「日」的數字(例如,2009年1月7日1時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如何解釋日期。

+0

我可以將記錄器的輸出格式設置爲任何我喜歡的,我不想要做的是將任何公式添加到Excel。基本上我希望我能打開它,Excel會識別它。它確認數字畢竟:) 我的語言環境設置爲英國,所以dd/mm/yyyy格式的作品 - 如果我添加另一列並使用類似= MONTH(A2)的東西,它會正確顯示爲「7 「,但該字段仍然是文本,因此我不能只按」短日期「按鈕進行格式化。 我會放棄Excel併爲其創建一個XSLT或其他東西。 – Cylindric 2009-07-16 10:33:08

+1

@Cylindric,啊,你說得對。您可能已經在這一點上繼續前進,但我認爲您需要做的就是讓日誌格式的日期+時間與適當的XML模式匹配DateTime簡單數據類型(「YYYY-MM-DDThh:mm:ss」 )不是Excel首選格式之一。我只是試了一個例子,它的工作原理。如果您未在XML中引用XSD文件,則Excel將推斷該架構,並且只有根據XML架構規範將元素格式化爲適當的DateTime時,纔會推斷元素包含日期。請參閱:http://www.w3schools.com/Schema/schema_dtypes_date.asp – devuxer 2009-07-16 15:15:22

1

我會嘗試這條路線: 創建一個XML地圖數據源,如:(我們稱之爲 「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 Source」面板(數據 - > XML - > XML Source)
  2. 在XML Source窗格中選擇「XML Maps ...」按鈕
  3. 選擇「Add ...」按鈕
  4. 選擇並打開XML映射文件(文件類型變化*的.xsd:我們的是entriesMap.xsd)
  5. 拖動地圖元素(起始日期,總計等),以自己的cols或拖動頂級元素
  6. 一次全部
  7. 轉到數據 - > XML - >導入...
  8. 選擇XML數據文件

不知道如果我有XSD文件的權利,但我相信,如果你走這條路線會工作。

+0

這是正確的方法 - 但是,當使用type =「xs:timeDate」時,XML要求使用ISO8601日期,而Excel不幸地不支持它 - 請參閱http:// office.microsoft.com/en-gb/excel-help/xml-schema-definition-xsd-data-type-support-HP001046225.aspx。來吧M $! – thedayofcondor 2013-07-17 13:13:40

4

訣竅是讓Excel推斷出你的日期。爲了將日期視爲這樣處理,請將日期值格式化爲UTC(iso8601),並刪除「Z」以及之後的所有內容(excel不支持這些)。例如,把這個:

1999-05-31T13:20:00Z-05:00 

這樣:

1999-05-31T13:20:00 

有關Excel如何推斷出更多信息的XML類型檢查MSDN

1

這爲我工作,而無需使用XSD或什麼:

<StartDate>2009-07-14T01:02:35</StartDate> 

Excel根據實際區域設置顯示如下:

07/14/2009 01:02 
1

您也可以創建一個連接到XML的Excel。在包含XML數據的工作表上,爲每個使用公式的日期時間字段添加額外列,以便從tekst值創建日期時間值,例如 = DATEVALUE([datetime_txt])+ TIMEVALUE([datetime_txt]))。 即使在刷新連接之後,Excel也會將其視爲日期時間。