Создание XML для импорта в Excel, особенно даты - PullRequest
1 голос
/ 14 июля 2009

Привет.

У меня есть простое приложение, которое генерирует некоторые данные регистрации производительности, и мне нужно, чтобы вывод был доступен для Excel.

Я создаю XML-документ с полями и т. Д. И могу открыть его в Excel.

Проблема в том, как заставить Excel обрабатывать даты как даты? Я пытался сохранить значение даты в различных форматах, но Excel всегда воспринимает его как текст. Если я щелкну в ячейке и нажму Enter, она с радостью отобразит ее как дату. То же самое, когда я делаю текст в столбцы.

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

Ответы [ 6 ]

4 голосов
/ 25 октября 2011

Хитрость в том, чтобы Excel определил для вас даты. Чтобы обработать дату как таковую, отформатируйте значение даты как UTC (iso8601) и удалите «Z» и все после этого (Excel не поддерживает их). Например, включите это:

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

к этому:

1999-05-31T13:20:00

Для получения дополнительной информации о том, как Excel определяет типы XML, ознакомьтесь с MSDN

1 голос
/ 26 октября 2017

Вы также можете создать Excel с подключением к XML. На листе, содержащем данные XML, добавьте дополнительные столбцы для каждого поля datetime, в котором вы используете формулу для создания значения datetime из значения tekst, например = DATEVALUE ([datetime_txt]) + TIMEVALUE ([datetime_txt]). Excel будет рассматривать это как datetime, даже после обновления вашего соединения.

1 голос
/ 21 октября 2014

Это сработало для меня без использования xsd или чего-либо еще:

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

Excel показывает это в соответствии с фактическими региональными настройками:

07/14/2009 01:02
1 голос
/ 01 августа 2009

Я бы попробовал этот маршрут: Создайте источник данных карты XML, например: (мы будем называть его "recordsMap.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» (Данные -> XML -> Источник XML)
  2. Нажмите кнопку «Карты XML ...» на панели «Источник XML»
  3. Выберите кнопку «Добавить ...»
  4. Выберите и откройте файл карты XML (измените тип файла * .xsd: наше - это recordsMap.xsd)
  5. Перетащите элементы карты (StartDate, Total и т. Д.) На собственные столбцы или перетащите верхний элемент сразу
  6. Перейти к данным -> XML -> Импорт ...
  7. Выберите файл данных XML

Не уверен, что у меня правильный файл xsd, но я верю, что если вы пойдете по этому пути, он будет работать.

1 голос
/ 14 июля 2009

Вы можете указать формат листа полностью. Чувствует себя немного уродливым, продюсеру нужно так много понимать о месте назначения.

<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 голосов
/ 14 июля 2009

Я вижу вашу проблему. Ваш формат даты - дд / мм / гггг. Если вы измените его на мм / дд / гггг, Excel автоматически распознает его как дату.

Итак, одним из решений было бы изменить способ регистрации данных о производительности.

Другой вариант - создать новый столбец в Excel, который использует формулу, подобную этой:

=VALUE(MID(A2,4,2)&"/"&LEFT(A2,2)&RIGHT(A2,LEN(A2)-5))
(where A2 is the cell containing the date text)

Эта формула физически перестраивает дату так, чтобы месяц предшествовал дню, а затем применяет к ней функцию VALUE, чтобы преобразовать ее в числовую дату + время.

Если бы могла быть только одна цифра "дня" (например, 1/07/2009 01: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 интерпретирует дату.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...