Экспорт данных в XML для открытия в Excel - PullRequest
1 голос
/ 20 марта 2012

У меня есть вопрос относительно сохранения данных в файл XML, который будет открыт в Microsoft Excel.Я построил элемент управления отчетами с использованием MFC в Visual C ++ и экспортировал данные в Excel с использованием простого файла CSV (значения, разделенные запятыми).Метод CSV хорошо работает, так как он показывает все строки и столбцы в отчете в Excel.

Проблема, однако, возникает при необходимости сохранить тип данных для каждого столбца, поскольку метод CSV игнорирует тип данных при экспорте данных, так как в нем отображаются все ячейки в строке после открытия в Excel.Тип данных ячеек в отчете важен, так как мой клиент будет запускать макросы для данных отчета после экспорта (или открытия) в Excel.

Я надеюсь использовать XML для решения этой проблемы.Можно ли сохранить тип данных с XML, поскольку он предлагает форматирование и схему?Можете ли вы дать мне какие-либо ссылки или указатели, которые позволили бы пользовательскому приложению использовать XML для сохранения данных, которые будут открыты в Excel, при сохранении типа данных?

заранее спасибо.

1 Ответ

0 голосов
/ 21 марта 2012

Если вы создадите и откроете в Excel файл XML, подобный следующему:

<rows>
  <row>
    <name>Name 1</name>
    <number>123.45</number>
    <date>2012-03-21</date>
  </row>
  <row>
    <name>Name 2</name>
    <number>678.01</number>
    <date>2012-03-22</date>
  </row>
</rows>

Excel выполнит довольно хорошую работу по автоматическому распознаванию типов данных - однако он будет жаловаться, что у XML нетсвязанная схема.

Чтобы связать схему с XML, вы создаете файл схемы XML (rows.xsd):

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="rows">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="row" minOccurs="0" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="name" type="xs:string"/>
              <xs:element name="number" type="xs:float"/>
              <xs:element name="date" type="xs:date"/>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

и затем ссылаетесь на него в своем XML:

<rows xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="rows.xsd">
  <row>
    <name>Name 1</name>
    <number>123.45</number>
    <date>2012-03-21</date>
  </row>
  <row>
    <name>Name 2</name>
    <number>678.01</number>
    <date>2012-03-22</date>
  </row>
</rows>

В файле схемы вы можете указать тип данных и описать свою структуру - но вы должны знать не всегда тривиальный синтаксис XSD.

См. Также это: http://support.microsoft.com/kb/827294 (примечаниехотя это говорит о «XSL», где вместо него следует сказать «XSD»)

...