Office XP та обмін XML-даними, Книги та статті, Різне, статті

Зміст



В нашому журналі ми вже писали про те, що нового з’явилося в додатках Microsoft Office XP. Ця стаття присвячена лише одному, але дуже корисному нововведенню – підтримки мови XML (Extensible Markup Language), що увійшов в останні роки до числа найпопулярніших індустріальних стандартів і широко застосовується для обміну даними між додатками.


При всій популярності XML на сьогоднішній день відомо не так вже й багато засобів підготовки XML-даних. В даний час XML в тому чи іншому вигляді підтримується переважною більшістю СУБД і засобів розробки, проте утиліти маніпуляції XML-даними з їхніх комплектів поставки – далеко не самий відповідний інструмент для кінцевих користувачів. Тому включення в Office XP (а саме – в Excel і Access) можливості збереження документів у форматі XML, так само як і читання XML-даних, представляється вельми своєчасним.


Обмін XML-даними з Excel 2002


Де і як можна застосовувати підтримку XML в Excel? Один з типових прикладів – аналіз за допомогою Excel (або за допомогою додатків – контролерів автоматизації Excel) даних, отриманих з декількох різнорідних джерел, наприклад з BizTalk Server або з додатків для інших операційних систем, або відправка даних з робочої книги Excel в такі програми. Перевага такого підходу в порівнянні із застосуванням XML-редакторів очевидно: Excel на відміну від XML-редакторів добре знайомий багатьом користувачам і розробникам.


Відкриття та збереження XML-документів


Спробуємо зберегти робочу книгу Excel (рис. 1) у вигляді XML-документа, вибравши відповідний його тип – XML ​​Spreadsheet – в діалозі збереження файлу. В цьому випадку робоча книга буде збережена в XML-файлі, структура якого заснована на схемі, розробленій Microsoft.

Рис. 1. Файл для перетворення в XML Spreadsheet


Цей файл містить всі відомості про дані, включаючи оформлення осередків і формули, за винятком діаграм, OLE-об’єктів, графічних зображень, а також проектів VBA. Природно, можна в подальшому знову відкрити цей XML-файл за допомогою Excel.


Незважаючи на чималий обсяг XML-файла, структура його досить проста. Кореневий його тег – :

<?xml version=”1.0″?>
<Workbook xmlns=”urn:schemas-microsoft-com:office:spreadsheet”
 xmlns:o=”urn:schemas-microsoft-com:office:office”
 xmlns:x=”urn:schemas-microsoft-com:office:excel”
 xmlns:ss=”urn:schemas-microsoft-com:office:spreadsheet”
 xmlns:html=”http://www.w3.org/TR/REC-html40″>

Теги наступного рівня містять відомості про документ (автор, дата створення і т.д.):

<DocumentProperties xmlns=”urn:schemas-microsoft-com:office:office”>
  <Author>Natalia Elmanova</Author>
  <LastAuthor>Natalia Elmanova</LastAuthor>
  <Created>2001-07-28T20:11:35Z</Created>
  <LastSaved>2001-07-28T20:27:04Z</LastSaved>
  <Company>ComputerPress Magazine</Company>
  <Version>10.2511</Version>
 </DocumentProperties>

Далі йдуть тег , що містить відомості про типи форматування комірок, і тег для іменованих діапазонів клітинок:

<Styles>
  <Style ss:ID=”Default” ss:Name=”Normal”>
   <Alignment ss:Vertical=”Bottom”/>
   <Borders/>
   <Font x:CharSet=”204″/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>

Для кожного з листів робочої книги є свій тег , що містить відомості про аркуші та його осередках:

<Worksheet ss:Name=”Sheet2″>
  <Table ss:ExpandedColumnCount=”4″ ss:ExpandedRowCount=”30″ x:FullColumns=”1″
   x:FullRows=”1″>
   <Column ss:AutoFitWidth=”0″ ss:Width=”198.75″/>
   <Column ss:AutoFitWidth=”0″ ss:Width=”72.75″/>
   <Column ss:AutoFitWidth=”0″ ss:Width=”57.75″/>
   <Column ss:AutoFitWidth=”0″ ss:Width=”27.75″/>
   <Row ss:Height=”18″> Спецвипуск “Програмне забезпечення”, N 9 “2000
    <Cell ss:StyleID=”s75″/>
   </Row>

</Table>

</Worksheet>

Як бачите, структура XML-файла, що створюється Excel, відносно проста. Це дозволяє вирішити багато проблем, такі, наприклад, як генерація документів для подальшої обробки в Excel на Web-серверах, звідки їх і отримує користувач. Генерувати такі документи особливо зручно, якщо Web-сервер працює не під управлінням Windows, адже в цьому випадку для генерації xls-файлів не можна використовувати ні Excel як сервер автоматизації, ні наявні на ринку готові ASP-компоненти для генерації xls-файлів (такі як ExcelWriter від Software Artisans).


Відзначимо, однак, що за допомогою Excel можна відкрити і XML-файл більш простого виду, наприклад:

<?xml version=”1.0″?>
<Articles>
  <Article> Не просто UNIX …
    <File>solaris.zip</File> Павло Анни
  </Article>
  <Article> В очікуванні Windows XP
    <File>winXP.zip</File> Наталія Єлманова
  </Article>
  <Article> Проектування інформаційних систем
    <File>isdev1.zip</File> Лілія Козленко
  </Article>
</Articles>

У цьому випадку Excel перетворить XML-файл в таблицю приблизно такого вигляду, як показано на рис. 2.

Рис. 2. Результат читання XML-даних


Яким вимогам повинен задовольняти XML-файл, щоб його можна було відкрити в Excel? У першу чергу він повинен бути коректним (Well-formed, тобто документ повинен містити один кореневий елемент, теги повинні бути парними і можуть бути вкладеними, елементи документа не повинні перекриватися), інакше його перетворення в робочу книгу Excel не буде виконано. Крім того, він повинен містити інструкцію , оскільки в іншому випадку XML-документ буде проінтерпретований як звичайний текстовий файл.


Слід звернути увагу на те, що елементи XML-документа в Excel виявилися розташовані не в порядку їх слідування, а за алфавітом. Причина цього очевидна: в XML-документі однакові елементи можуть мати різний набір піделементи наступного рівня, тому в загальному випадку немає гарантії, що на їх основі можна побудувати таблицю фіксованої структури. Саме з цієї причини елементи і розташовуються в алфавітному порядку. До речі, XML-документи з російськомовними тегами також відмінно сприймаються Excel 2002 …


Відкриття та збереження XML-документів за допомогою VBA


Відкриття XML-документів за допомогою VBA здійснюється точно так само, як і відкриття робочих книг Excel:

Applicatio.Workbooks.Open “Articles.xml” 

Якщо відкривається файл в точності відповідає формату XML Spreadsheet, він буде розпізнано відповідно з цим форматом. Якщо ж відкривається файл являє собою довільний (але, природно, коректний) XML-документ, він буде перетворений в таблицю на зразок зображеної на рис. 2.


Можна відкрити XML-документ за допомогою методу OpenXML колекції WorkBooks:

Application.Workbooks.OpenXML “Articles.xml”

Відзначимо, що використання цього методу дозволяє застосувати до документа, що відкривається кілька послідовних XSLT-перетворень – для цієї мети у нього є параметр Stylesheets.


Збереження документів у форматі XML виконується таким же чином, як і збереження документів в інших форматах:

ActiveWorkbook.SaveAs “Articles.xml”, xlXMLSpreadsheet

Тут xlXMLSpreadsheet – константа, що ідентифікує формат збереження файлу у вигляді XML Workbook.


Слід зазначити, що можна зберегти файл безпосередньо на Web-сервері, наприклад:

ActiveWorkbook.SaveAs “http://MAINDESK/Articles.xml”, xlXMLSpreadsheet

Нагадаємо, що можливість збереження файлів Microsoft Office на Web-серверах, що працюють під управлінням Internet Information Services і FrontPage Server Extensions, або на Web-серверах, які підтримують протокол WebDAV (Web Distributed Authoring and Versioning), з’явилася ще в Microsoft Office 2000.


На закінчення нашого короткого огляду підтримки XML в Excel VBA відзначимо, що Excel 2002 дозволяє отримувати XML-дані з діапазонів Excel у форматі XML Spreadsheet, наприклад:

Dim xmldata As String
Set rng = Range(“A3:D8”)
xmldata = rng.Value(xlRangeValueXMLSpreadsheet)

Крім цього можна отримати дані з діапазону комірок і у форматі XML Data Reduced (XDR), використовуваному для зберігання клієнтських наборів даних ADO (disconnected recordsets) в форматі XML:

xmldata = rng.Value(xlRangeValueMSPersistXML)

В цьому випадку можна здійснити обмін такими даними з додатками, що використовують завантаження збережених наборів даних ADO.


Обмін XML-даними з Access 2002


Імпорт XML-документів


Access 2002 також дозволяє імпортувати XML-дані в свої бази даних, а також в бази даних SQL Server і MSDE. Розглянемо найпростіший спосіб імпорту XML-даних в Access на прикладі наступного XML-документа:

<?xml version=”1.0″?>
<Columns> Спецвипуск “Програмне забезпечення” Прохоров, Єлманова
   <Articles>
     <Article> Не просто UNIX …
      <File>solaris.zip</File> Павло Анни
     </Article>
     <Article> В очікуванні Windows XP
      <File>winXP.zip</File> Наталія Єлманова
     </Article>
    </Articles>
   </Column> Засоби розробки Єлманова
   <Articles>
     <Article> Проектування інформаційних систем
      <File>isdev1.zip</File> Лілія Козленко
     </Article>
     <Article> Введення в OLAP, частина 6
      <File>OLAP6.zip</File> Додаткові матеріали – 6 МБ Олексій Федоров, Наталія Єлманова
    </Article>
  </Articles>
 </Column>
</Columns>

Для імпорту цього XML-документа слід вибрати пункт меню Access File / Get External Data / Import, в діалозі відкриття файла вказати як тип даних XML Documents і вибрати ім’я відповідного файлу. Після цього відбуваються інтерпретація обраного файлу та пошук в ньому потенційних таблиць. В даному випадку Access розпізнає тег з вкладеними дочірніми тегами та інтерпретує їх як однойменну таблицю. Потім Access знаходить набір тегів

та інтерпретує їх як іншу таблицю. Далі користувачеві пропонується вибрати, імпортувати тільки структуру таблиць або дані разом зі структурою або просто додати дані з XML-файла у вже наявні таблиці (рис. 3).

Рис. 3. Імпорт XML-даних в Access


Якщо вибрати імпорт даних разом зі структурою, в поточній базі даних будуть створені дві таблиці – Column і Article (рис. 4).

Рис. 4. Результат імпорту XML-даних в Access


Зверніть увагу: при імпорті були проігноровані деякі атрибути (наприклад, атрибут Audience тега Column) і дочірні теги, відсутні у першому входженні батьківського тега (наприклад, дочірній тег , що з’явився лише в четвертому входження тега

). Іншими словами, структура майбутньої таблиці визначається тим, які дочірні теги присутні в тезі, що перетворюється в першу з її записів. Це – неминучі витрати відсутності строгих вимог до XML-документами (таких, як наявність «ідеальної» табличної структури), характерних для таблиць реляційних СУБД.


Зазначимо, що це не єдиний спосіб імпорту XML-даних в Access. При роботі з XML-даними нерідко використовуються XML-схеми, що містять опис структури даних, представлених в XML-документі, тобто правил, за якими XML-документ повинен бути перетворений при імпорті. Існує кілька стандартів XML-схем. Зокрема, до недавнього часу для цієї мети широко застосовувався стандарт DTD (Document Type Definition), що володів рядом недоліків, наприклад підтримкою лише обмеженого списку типів даних. Зараз все більшого поширення набуває стандарт XSD (XML Schema standard), вільний від зазначених недоліків. Саме він і підтримується в Access 2002.


Типове опис структури даних у вигляді XSD-схеми виглядає так:

<xs:schema xmlns:xs=”http://www.w3.org/2000/10/XMLSchema”>
  <xs:element name=”Column” type=”Column”/>
  <xs:complexType name=”Column”>
    <xs:sequence>
      <xs:element name=”Column_Name” type=”xs:string”  minOccurs=”1″ maxOccurs=”1″ />
      <xs:element name=”Column_Editor” type=”xs:string” minOccurs=”1″ maxOccurs=”1″/>
    </xs:sequence>
  </xs:complexType>
</xs:schema> XML-документ, який посилається на XSD-схему, звичайно має приблизно такий вигляд:
<?xml version=”1.0″?>
<dataroot xmlns:od=”urn:schemas-microsoft-com:officedata”
xmlns:xsi=”http://www.w3.org/2000/10/XMLSchema-instance” 
xsi:noNamespaceSchemaLocation=”xml_tables.xsd”> Спецвипуск “Програмне забезпечення” Прохоров, Єлманова Вересня 2001
   </Column> Засоби розробки Єлманова
  </Column>
</dataroot>

Якщо імпортувати такий файл в Access, ми отримаємо порожню таблицю із структурою, яка відповідає опису, що міститься в XSD-схемі (в даному випадку має ім’я Column і складається з двох строкових полів – Column_Name і Column_Editor). Після цього можна імпортувати в готову таблицю XML-документ; при цьому теги, що відповідають полям таблиці, будуть розпізнані, а решта – проігноровані, незалежно від того, в який за рахунком запису вони зустрілися. До речі, і в цьому випадку можливий імпорт пов’язаних таблиць в одному документі.


Експорт XML-документів


Можливості експорту Access в XML досить різноманітні. Вибравши пункт меню File / Export і вказавши XML document як тип даних, можна експортувати таблицю Access в XML-документи як з описом у вигляді XSD-схеми, так і без нього; можна впровадити його в XML-документ або зберегти окремо; можна також експортувати кілька пов’язаних таблиць і згенерувати HTML-або ASP-файл для відображення даних в браузері (рис. 5).

Рис. 5. Діалог експорту об’єктів Access у документ XML


Крім таблиць у формат XML (з можливим одночасним створенням XSD-схеми) можна експортувати результати запитів, звіти, форми. При необхідності можна зберегти структуру таблиці, запиту, форми або звіту у файлі, що містить відомості не тільки про типи полів, але й про те, як здійснюється з’єднання з джерелом даних і яким чином ці дані повинні бути представлені. Для форм і звітів такий файл зберігається у вигляді коду мовою ReportML, спеціально розробленому Microsoft для XML-опису об’єктів баз даних Access. ReportML містить набір тегів для опису елементів форм, звітів і сторінок доступу до даних і застосовується для перетворення збережених звітів і форм в сторінки доступу до даних.


Імпорт та експорт XML-документів за допомогою VBA


Імпорт XML-документа в VBA може бути здійснено за допомогою методу ImportXML об’єкта Application:


Application.ImportXML “D:article.xml”, acStructureAndData


Другий параметр являє собою константу, що приймає такі значення: acStructureOnly – імпортувати тільки структуру даних; acStructureAndData – імпортувати і структуру, і дані; acAppendData – Додати дані до вже існуючої таблиці. Таким чином, список параметрів повністю відповідає опцій, вибираним при імпорті файлів (див. рис. 3).


Експорт XML-документа в VBA можна здійснювати за допомогою методу ExportXML об’єкта Application:

Application.ExportXML acExportTable, “Article”, “D:article.xml”, “D:article.xsd”    

Перший параметр цього методу вказує, який саме об’єкт експортується – форма, запит, таблиця або звіт. Якщо експорт здійснюється з проекту Access, для експорту також доступні подання та збережені процедури MSDE. Другий параметр вказує ім’я експортованого об’єкта, третій і четвертий – імена XML-і XSD-файлів (останній може бути опущений). Цей метод містить ще кілька необов’язкових параметрів, описують деталі експорту, про які було сказано в попередньому розділі.


Зверніть увагу, що експортувати таблиці і звіти в формат XDR (як уже говорилося вище, він нерідко застосовується для обміну даними з іншими ADO-додатками) за допомогою методу ExportXML, так само як і імпортувати такі дані за допомогою ImportXML, не вдасться. Однак для цієї мети можна створити об’єкт типу ADO Recordset, виконати запит, заповнює його даними, і потім зберегти XDR-файлі:

Set rs = New Recordset
rs.Open “SELECT * FROM Article”, CurrentProject.Connection
rs.Save “D:Article.xml”, adPersistXML

Прочитати XDR-файл можна за допомогою методу Open того ж об’єкта ADO Recordset – цей метод завантажує XDR-файл в буфер об’єкта Recordset:

Set rs = New Recordset
rs.Open “D:Article.xml”

Далі з об’єктом Recordset можна робити все що завгодно – додавати, видаляти, змінювати записи, додавати його дані в наявні таблиці.


Висновок


У цій статті ми розглянули підтримку обміну XML-даними в деяких додатках Office XP. Ми розповіли про можливості читання та збереження XML-документів в Excel 2002, а також про можливості та способи імпорту XML-даних в Access і експорту таблиць, запитів, форм і звітів Access в XML-документи. Ми також з’ясували, які об’єкти і методи дозволяють здійснювати ці дії в VBA-додатках.


Відзначимо, однак, що XML застосовується в самому Office XP не тільки для обміну даними з іншими додатками, а й для власних, «внутрішніх», цілей, зокрема для створення смарт-тегів. Але про це ми розповімо наступного разу.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*