Аннотация
Познакомьтесь с примером Web-приложения, разработанным с помощью
ASP.NET и демонстрирующим, как обрабатывать и использовать документы
Microsoft Office вне приложения, в котором их создали.
Содержание
Введение
О приложении
Технический подход
Подготовка решения
Создание документов во время выполнения
Маскировка расширения
Просмотр документов
Замечания по решению
Демонстрационные данные
Приложение А: установка решения
Приложение Б: обзор решения
Примечание Файлы, рассматриваемые в этой статье, доступны в
Word XML Content Development Kit (CDK), который можно скачать со
страницы
Office Developer Center, помогающей разработчикам быстро научиться
создавать XML-решения на платформе Word 2003.
Введение
В документе дан технический обзор примера решения Unlocking
Information, поставляемого в составе Microsoft Office 2003 Beta 2
Content Development Kit (CDK). Unlocking Information - это
Web-приложение, разработанное с помощью ASP.NET, чтобы показать, как
обрабатывать документы Microsoft® Office 2003 (документы
Microsoft Office Word 2003 и электронные таблицы Microsoft Office Excel
2003) вне этих приложений. Кроме того, пример демонстрирует, как
обращаться к документам Office и адаптировать их к использованию вне
Microsoft Office.
О приложении
Пример приложения Unlocking Information основан на том, что
организациям часто приходится создавать документы в большом количестве.
Часто эти документы используются в непрерывном производственном процессе
и готовятся разными членами группы. В этих документах конкретные
бизнес-данные объединяются со стереотипными шаблонами. Такими
документами надо управлять как группой или "проектом".
В качестве примера можно привести компанию, оформляющую клиентам
страховые полисы. Когда для клиента готовят новый полис или изменяют
существующий, формируют пакет документов, описывающий условия
страхования. Скорее всего потребуется создать следующие документы:
сопроводительное письмо с вводной информацией, где указываются срок
действия полиса и сведения об остальных документах; документ,
разъясняющий условия страхования: выплаты, цены, скидки и исключения; в
соответствии с законодательством могут потребоваться какие-либо
документы по соглашению или отказу от обязательств. Кроме того, в пакет
могут входить электронные таблицы, которые показывают стоимость полиса
при различных вариантах страхования или содержат актуарные (страховые)
данные в ячейках и формулы, поясняющие, как рассчитываются тарифы.
Конечным результатом является группа документов, составляющих полис (в
дальнейшем мы будем называть такую группу "проектом").
Так как многие компании используют документы Word и Excel совместно
со своими клиентами, Office - наиболее подходящее универсальное средство
подготовки документов. Кроме того, многим сотрудникам требуется
применять эти документы для генерации своих документов и совместной
работы над ними, поэтому разумнее всего разместить это приложение на
Web-сервере. Раньше тоже можно было работать с Word и Excel на сервере,
но по многим причинам это было не оптимально.
Теперь, когда в Office 2003 появились поддержка XML и "родные"
XML-форматы файлов, разработчики могут обеспечить доступ к данным Office
различными методами. В примере Unlocking Information документы,
создаваемые в Office 2003, сохраняются в XML-формате и загружаются на
Web-сервер, где ожидают дальнейшей обработки. Когда пользователь
запрашивает документы, приложение загружает файлы как XML-данные,
подготавливает их на сервере, вставляя бизнес-данные и информацию,
вводимую пользователем, а затем сохраняет документы как XML-файлы в
соответствии с определениями XML Schema, определенными в Word и Excel.
По завершении этих операций пользователь может запросить просмотр и
напрямую работать в Word и Excel с документами, находящимися на сервере,
хотя они и являются XML-файлами.
Более того, поскольку документы Office просто хранятся на сервере в
файлах открытого стандарта XML, при просмотре или редактировании
содержимого пользователь может вообще обойтись без Office.
Приложение-пример Unlocking Information дает пользователю возможность
просматривать вне Office представления документа, отличные от
показываемого в Office, и даже просматривать несколько документов в
представлении, объединяющем документы проекта. Кроме того, пользователи
могут редактировать документы вне Office, например добавлять или
изменять примечания документа.
Заметьте: все это не требует, чтобы на сервере присутствовали
исполняемые файлы Word или Excel, так как благодаря поддержке XML в
Office 2003 способ формирования документов изменился.
Технический подход
Пример Unlocking Information полностью разработан на основе
Web-технологий; серверная логика, написанная на Visual Basic .NET,
обеспечивает эффективную обработку, а для отображения на стороне клиента
применяются HTML и Java Script. С точки зрения разработчика,
используется единственная возможность Office - способность читать и
записывать XML. Имейте в виду: в этом документе предполагается, что вы
хорошо знаете Web-программирование, а сам документ предназначен для
того, чтобы показать, как применять поддержку XML в Office для
разработки приложений, подобных Unlocking Information.
Подготовка решения
При создании таких приложений, как Unlocking Information, сначала
приходится много заниматься Web-разработкой. Зато потом добавить
содержимое Office очень легко и просто. Приложение может использовать
любой документ, сохраненный Word или Excel в XML-формате. Оно просто
ищет в подкаталоге OfficeML, создаваемом в корневой папке приложения,
документы, которые будет обрабатывать.
В примере приложения используются некоторые метаданные, хранящиеся в
базе данных Microsoft Access и применяемые при управлении документами, с
которыми работает приложение. К этим метаданным относятся дружественное
имя и описание файла, несколько улучшающие пользовательский интерфейс.
Но вы можете, чтобы избавиться от этого несложного уровня
администрирования, не указывать эти данные и просто работать с
приложением, напрямую загружающим все документы. Поддержка метаданных -
просто дополнительная функциональность примера.
Сами документы могут быть простыми или составными и даже создаваемыми
пользователем. В действительности при использовании и создании данных
Office XML нет никаких правил за исключением того, что необходимо
придерживаться одной или нескольких схем. Имеется несколько методик
вставки данных в документы: закладки, свойства документа, коды полей и
XML-узлы в Word и свойства документа и имена диапазонов в Excel. Эти
элементы используются, чтобы автор на этапе разработки задавал поля
подстановки в документе. Это единственное место, где применяются
встроенные средства Office. В дальнейшем приложение просто анализирует
XML-данные, чтобы обнаружить эти объекты документа и работать с ними.
Создание документов во время выполнения
Когда пользователь приложения запрашивает новый проект пакета
документов, предлагается ввести несколько элементов данных и выбрать,
какие именно документы будет содержать проект.
При этом приложение начинает загружать каждый из созданных в Office
XML-файлов в хранящийся в памяти объект XMLDocument. В свою очередь
каждый XMLDocument обрабатывается отдельно: в него вставляются данные,
введенные пользователем. Для запроса соответствующих узлов объекта
XMLDocument используется XPath.
Приложение содержит несколько процедур, разработанных с
использованием специфичных XPath-запросов, которые обращаются к заданным
элементам документов Office XML. В этих процедурах реализована логика
заполнения таких элементов XML-документа, как Document Properties,
Defined Ranges, Bookmarks и Mapped XML Ranges. Ниже показан код
процедуры, вставляющей свойства документа в XML-документ Word:
Процедура вставки свойств документа в WordML, использующая XPath
Sub WordBuiltInDocProp(ByVal sElement As String, _
ByVal sValue As String, ByVal xdd As XmlDocument, _
ByVal nsm As XmlNamespaceManager)
Dim xddNode As XmlNode = xdd.DocumentElement.SelectSingleNode("/w:wordDocument/ _
o:DocumentProperties/o:" & _
sElement, nsm)
If xddNode Is Nothing Then
Dim xddElement As XmlElement = xdd.CreateElement("o", _
sElement, _
nsm.LookupNamespace(nsm.NameTable.Get("o")))
Dim xddNodeParent As XmlNode = xdd.DocumentElement.SelectSingleNode("/w:wordDocument/ _
o:DocumentProperties", nsm)
xddElement.InnerText = sValue
xddNodeParent.AppendChild(xddElement)
Else
xddNode.InnerText = sValue
End If
End Sub
Надеемся, что вы сочтете все эти процедуры достаточно простыми для
любого разработчика, знакомого с XML и XPath, и, как только разберетесь
в XML-данных, генерируемых при сохранении документов Word 2003 и Excel
2003, вам будет легко расширить эти процедуры и добавить собственные.
Весь код создания документа содержится в Create.aspx.vb - модуле
отделенного кода для Web-формы Create.aspx проекта DocLibrary Visual
Studio .NET. (Чтобы посмотреть код, можно просто открыть файл в
текстовом редакторе, например в Notepad.)
Маскировка расширения
Когда на локальном компьютере установлен Word или Excel, Office может
определить, что XML-файл сопоставлен с каким-либо из этих приложений и
при открытии документа запускает соответствующее приложение. Однако,
когда файл Office XML с расширением .xml берется с Web-сервера,
сопоставление нельзя уникально идентифицировать, поэтому браузер
показывает страницу как XML-документ. Вряд ли такое поведение удобно для
типичного пользователя - на самом деле даже необязательно, чтобы
пользователь знал о том, что в приложении применяется XML.
Чтобы обойти эту проблему, при разработке приложения пришлось пойти
на небольшую хитрость: маскировать расширение файлов документов Office
XML, генерируемых приложением. Просто в конец имени файла XML-документа
добавляется ".doc" или ".xls" (например Contract.xml становится
Contract.xml.doc), что позволяет открывать файл соответствующим
приложением Office. Файл на 100% состоит из XML-данных, но его можно
загружать и напрямую использовать в Office.
Просмотр документов
Ранее было сказано: все, что вам потребуется при разработке
приложений такого рода, - навыки Web-программирования. Вы можете
оспорить это утверждение, если, как и некоторые другие разработчики, не
считаете разбор XML и написание XSLT Web-программированием. В приложении
Unlocking Information широко применяются технологии анализа (разбора) и
преобразования, такие как XPath и XSLT. Это становится совершенно
очевидным, если посмотреть, как приложение адаптирует документ Office
XML к использованию в браузере.
При разработке приложения преследовалась цель для большей
управляемости и расширяемости вынести из кода всю логику форматирования,
управляющую показом документов Word и Excel. Поэтому всякий раз, когда
вы видите документ Office, выводимый приложением, для этого используются
XSLT (Extensible Stylesheet Language Transformations), которые изменяют
и преобразовывают содержимое.
Хороший пример такого подхода - DetailDocumentTransform.ascx.vb, файл
отделенного кода для пользовательского элемента
DetailDocumentTransform.ascx проекта DocLibrary. Этот элемент выводит
каждое отдельно взятое представление (например предварительный просмотр,
сводку, стили, примечания и т. д.) документа Office, когда пользователь
щелкает имя документа на странице Projects
(http://<имя_компьютера>/DocLibrary/Projects.aspx). Благодаря серверному
элементу XML в ASP.NET требуется невероятно мало кода, который
фактически сводится к двум основным строкам. Одна строка присваивает
документ Office XML свойству элемента, задающему XML-документ, другая
присваивает свойству, задающему XSLT, требуемое XSLT-преобразование,
загружаемое во время выполнения из группы XSLT-файлов, которая находится
в подкаталоге XSLTforOffice корневого каталога. Отделенный код
пользовательского элемента DetailDocumentTransform.ascx имеет следующий
вид:
Код VB.NET, обрабатывающий XML/XSLT для отображения документов
Office
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
´ Готовим клиентские объекты элемента
hypClose.Attributes.Add("onclick", "div_Click(this)")
hypClose.ID = "hyp_" & nDivID
Try
´ Присваиваем объект XML-документа Office соответствующему свойству
xmlTransform.Document = xdd
´ Выполняем специальную обработку примечаний Word и ссылок Excel
Select Case nType
Case Detail.TransformType.Regular
´ Обычное преобразование
imgAdd.Visible = False
xmlTransform.TransformSource = sXsl
Case Detail.TransformType.wdComments
imgAdd.Visible = True
imgAdd.Attributes.Add("onclick", "NewNote(´" _
& sLink & "´,´" & sType & "´)")
ParameterizedTransform()
PageTitle = " " & PageTitle
Case Detail.TransformType.xlLinks
imgAdd.Visible = False
ParameterizedTransform()
End Select
lblError.Visible = False
Catch
Err.Clear()
lblError.Text = "Unable to process the XML " & _
"transformation for this view."
Finally
If lblError.Text <> "" Then
lblError.Visible = True
End If
End Try
End Sub
´ Обработка XSLT, принимающих параметры
Private Sub ParameterizedTransform()
Dim xslT As New XslTransform()
xslT.Load(MapPath(sXsl))
Dim xslArg As XsltArgumentList = New XsltArgumentList()
xslArg.AddParam("sLink", "", sLink)
xslArg.AddParam("sType", "", sType)
xmlTransform.TransformArgumentList = xslArg
xmlTransform.Transform = xslT
End Sub
Если вы хотите детальнее ознакомиться с преобразованием документов
Office, просмотрите файл Web-формы Detail.aspx и его модуль отделенного
кода, Detail.aspx.vb.
XSLT-преобразования документов Office
Для настоящей полнофункциональной обработки XML-документов,
формируемых Office, нужна возможность управлять документами в своих
целях. В этом отношении по гибкости и богатству возможностей ничто не
может сравниться с написанием XSLT. Пожалуй, написание XSLT для Word XML
и Excel XML - не самое простое дело, но оно позволяет изменить способ
отображения документов Office, что полезно во многих ситуациях. Ниже
показан пример XSLT-документа, используемого приложением Unlocking
Information для вывода представления, содержащего только встроенные
свойства документа Word:
XSLT, используемое для отображения встроенных свойств документа Word
XML
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:w="http://schemas.microsoft.com/office/word/2002/8/wordml"
xmlns:v="urn:schemas-microsoft-com:vml" _
xmlns:w10="urn:schemas-microsoft-com:office:word"
xmlns:SL="http://schemas.microsoft.com/schemaLibrary/2002/8/core"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aml="http://schemas.microsoft.com/aml/2001/core"
xmlns:wx="http://schemas.microsoft.com/office/word/2002/8/auxHint"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882">
<xsl:template match="/">
<html>
<head>
<STYLE type="text/css">
tblTitle { background-color: #CCCCCC; _
font-weight: bold; border=0 }
tblData { border-style:solid}
</STYLE>
</head>
<body>
<xsl:apply-templates select="w:wordDocument/o:DocumentProperties"/>
</body>
</html>
</xsl:template>
<xsl:template match="w:wordDocument/o:DocumentProperties">
<table border="1" width="100%">
<xsl:if test="position()=1">
<xsl:text disable-output-escaping="yes"><tbody></xsl:text>
</xsl:if>
<tr>
<td class="tblTitle" width="10%">Title</td>
<td class="tblData" width="23%">
xsl:value-of select="o:Title"/>
</td>
<td class="tblTitle">Author</td>
<td class="tblData">
<xsl:value-of select="o:Author"/>
</td>
<td class="tblTitle" width="10%">Category</td>
<td class="tblData" width="23%">
<xsl:value-of select="o:Category"/>
</td>
</tr>
<tr>
<td class="tblTitle">Subject</td>
<td class="tblData">
<xsl:value-of select="o:Subject"/>
</td>
<td class="tblTitle">Manager</td>
<td class="tblData">
<xsl:value-of select="o:Manager"/>
</td>
<td class="tblTitle">Keywords</td>
<td class="tblData">
<xsl:value-of select="o:Keywords"/>
</td>
</tr>
<tr>
<td/>
<td/>
<td class="tblTitle" width="10%">Company</td>
<td class="tblData" width="23%">
<xsl:value-of select="o:Company"/>
</td>
<td class="tblTitle">Comments</td>
<td class="tblData">
<xsl:value-of select="o:Description"/>
</td>
</tr>
<xsl:if test="position()=last()">
<xsl:text disable-output-escaping="yes"></tbody></xsl:text>
</xsl:if>
</table>
</xsl:template>
</xsl:stylesheet>
Замечания по решению
Документы Office XML, пространства имен, XPath и XSLT, используемые
при разработке этого приложения, предназначены для работы с Office 2003
Beta 2. Пожалуйста, имейте в виду, что запуск этого решения при
использовании более ранней или поздней версии Office может привести к
неожиданным результатам.
Демонстрационные данные
В примере приложения Unlocking Information содержатся конфигурируемые
данные, позволяющие в демонстрационных целях изменять контекст и вид
приложения. Редактируя OfficeML.mdb - файл базы данных Microsoft Office
Access 2003, - можно изменять такие параметры, как логотип, сценарий и
другие элементы данных.
Приложение А: установка решения
Файлы решения Unlocking Information позволяют запустить решение и
посмотреть любой модуль исходного кода решения.
Системные требования
Для запуска решения предъявляются следующие системные требования:
- Microsoft Windows® XP Professional или Microsoft
Windows 2000 Server с Service Pack 2, или Microsoft Windows 2000
Professional с Service Pack 2 или Microsoft .NET Framework 1.0;
- Internet Information Services 5.0;
- при необходимости: Microsoft Visual Studio .NET 2002, чтобы
редактировать или просматривать код Web-сервисов XML решения
Unlocking Information;
- Microsoft Office 2003 Beta 2 (чтобы на клиенте просматривать
документы в Office 2003).
Конфигурирование системы
Чтобы установить пример решения Unlocking Information, сначала
настройте Internet Information Services на выполнение решений ASP.NET.
- Убедитесь, что в IIS выполняется Web-сайт, используемый по
умолчанию. Для этого в Control Panel откройте Administrative
Tools, затем Internet Services Manager (в Windows 2000)
или Internet Information Services (в Windows XP
Professional). Вы увидите консоль Internet Information Services. На
панели слева раскройте узел с именем вашего Web-сервера (если вы
используете Windows XP Professional, раскройте узел Web Sites),
щелкните правой кнопкой мыши узел Default Web Site и выберите
Start, если этот пункт меню активен (если Start
неактивен, значит, IIS уже выполняется).
- В Internet Services Manager создайте виртуальный каталог
DocLibrary. Путем к этому виртуальному каталогу должен быть путем к
папке DocLibrary примера (который по умолчанию устанавливается в
C:\Program Files\Microsoft Office Beta Documentation\Microsoft Word
XML Content Development Kit Beta 2\DocLibrary). Кроме того, каталог
нужно сконфигурировать как IIS Application. Этот параметр задается в
диалоговом окне свойств виртуального каталога по щелчку кнопки
Create.
- Если .NET Framework не установлена, установите .NET Framework
Redistributable или Microsoft Visual Studio .NET. В Visual Studio
.NET входит .NET Framework, под управлением которой выполняется
ASP.NET-решение Unlocking Information.
В некоторых системах требуется зарегистрировать ASP.NET в IIS. Для
этого нужно запустить утилиту командной строки, устанавливаемую в
составе .NET Framework, - файл aspnet_regiis.exe, находящийся в
каталоге .NET. (Например
C:\WINDOWS\Microsoft.NET\Framework\v1.0.3705\aspnet_regiis.exe -i.)
Приложение Б: обзор решения
Запуск решения
Пример - это Web-решение, с помощью XML-технологий динамически
создающее наборы документов Office, которые можно просматривать и
изменять в приложениях Office.
- Запустите Internet Explorer.
- Перейдите на адрес http://<имя компьютера>/doclibrary/.
Откроется окно, показанное на рис. 1.
Рис. 1. Окно 1 решения Unlocking Information
- Введите любую строку в поле Password и щелкните Enter.
Откроется окно Projects Summary.
Рис. 2. Окно 2 решения Unlocking Information
В этом решении Project (проект) - набор документов, предназначенных
для определенного клиента. При создании нового проекта автоматически
создается один или несколько документов для заданного клиента.
- Щелкните New в меню Project, показываемом слева.
Откроется следующее окно.
Рис. 3. Окно 3 решения Unlocking Information
- Щелкните значок лупы, чтобы получить текущий список клиентов,
содержащий коды клиентов или наименования компаний.
- Выберите клиента в поле со списком Customer.
- Щелкните значок Filter и введите текст в поле Filter.
- Щелкните значок Apply Filter. Щелкните Next.
Рис. 4. Окно 4 решения Unlocking Information
- Выберите один или несколько документов, которые нужно создать.
- Щелкните Next.
Рис. 5. Окно 5 решения Unlocking Information
- Введите или выберите требуемые элементы данных.
- Щелкните Next.
Рис. 6. Окно 6 решения Unlocking Information
- Введите имя проекта.
- Щелкните Submit. Откроется следующее окно, информирующее,
что документы созданы.
Рис 7. Окно 7 решения Unlocking Information
По щелчку значка документ открывается соответствующим приложением
(Word или Excel). По щелчку имени документа документ откроется в
Microsoft Internet Explorer (рис. 8):
Рис. 8. Документ Cover Letter, показываемый в Internet
Explorer
Просмотр вывода в формате Office XML
Документы Office, создаваемые в проекте, формируются динамически:
приложение генерирует XML-файлы, соответствующие схеме документа Office
XML. Чтобы просмотреть этот XML-документ в приложении Office, просто
щелкните значок Word/Excel. При этом XML-документ загружается в
соответствующее приложение Office, окно которого встроено в Internet
Explorer. Кроме того, в ознакомительных целях можно посмотреть сами
XML-данные, чтобы убедиться, что документ действительно является
XML-файлом.
- Щелкните значок Word/Excel.
- Щелкните имя документа.
- По окончании просмотра щелкните Close.
Просмотр проекта
На уровне Project решения пользователь может просмотреть все
документы сразу - вместо того чтобы открывать их по одному в
соответствующих приложениях Office.
Например, не составляет труда просмотреть сводки всех документов
проекта. Для этого из XML-данных всех документов извлекается именованный
диапазон Summary.
- Щелкните имя проекта в навигационном меню во фрейме слева.
Добавление/удаление в проект замечаний и задач
Помимо простого просмотра информации одного или нескольких
документов, можно динамически добавлять замечания и задачи для
документов. Замечания и задачи хранятся не в самих документах, а в
XML-файлах, связанных с документами.
- Щелкните зеленую стрелку Go, чтобы добавить замечание или
задачу.
- Чтобы удалить замечание или задачу, щелкните красную кнопку X
рядом с узлом.
Просмотр документов проекта
Так как документы хранятся в XML-формате, можно считывать и
показывать отдельные разделы документов. При просмотре документа можно
выбирать различные разделы документа, например примечания.
- Щелкните имя документа в навигационном меню.
- Установите требуемые флажки в области View.
- Повторите операцию для различных типов документов (Word или
Excel).
Добавление/изменение примечаний к документу
Можно не только просматривать определенные элементы с разделами
документа, но и добавлять или изменять элементы. По щелчку стрелки Go
можно добавить примечание к документу. При добавлении примечания с
помощью стандартных технологий работы с XML изменяются "родные"
XML-данные файла. Когда документ открывается в приложении Office, можно
видеть примечания, добавленные непосредственно в документ.
- Щелкните имя проекта в навигационном меню во фрейме слева.
- Щелкните зеленую стрелку Go, чтобы добавить примечание.
- В окне Add Comment введите примечание и щелкните Go,
чтобы принять его.
- Щелкните значок Word.
Редактирование документа
Так как Word использует XML в качестве альтернативного "родного"
формата файлов, можно напрямую открыть документ в Word, изменить его и
сохранить в XML-формате.
Затем при просмотре документа в Web-решении можно сразу же увидеть
изменения, внесенные в документ.
- Откройте документ в Web-решении.
- Измените документ и сохраните его на сайте.
- Просмотрите документ в Web-решении.