Для работы с документами, сохраненными в формате Office 2007 Open XML Format, следует использовать классы, реализованные в пространстве имен System.IO.Packaging (библиотека WinFX, сборка windowsbase.dll). Подробное описание данного пространства имен можно получить в онлайновой версии документации к библиотеке WinFX, расположенной по адресу:.
Рассмотрим несколько примеров. Мы уже отмечали, что для успешной обработки документа в формате Office 2007 Open XML Format необходимо успешно найти главную часть документа, которая имеет тип http://schemas.microsoft.com/office/2006/relationships/officeDocument. Для документов, созданных средствами Word, главная часть хранится в файле document.xml. После того как главная часть документа найдена, мы получаем возможность обнаружить все остальные части документа. В приведенном примере показано, как найти главную часть (documentPart) офисного документа.
//
// Найти «главную часть» документа по заданному имени
файла
,,void FindStartPart(string fileName)
{officeDocRelType =
@”http://schemas.microsoft.com/office/2006//officeDocument”;documentPart = null;
Uri documentUri = null;
//Открыть контейнер только для чтения
using (Package officePackage = Package.(fileName,.Open, FileAccess.Read))
{
// Найти «главную часть»(PackageRelationship relationship in.GetRelationshipsByType(office-
DocRelType))
{
// В контейнере только одна «главная часть»
documentUri = PackUriHelper.ResolvePartUri
(new Uri(“/”, UriKind.Relative), relationship.);= officePackage.GetPart(documentUri);
break;
}
// Дальнейшая обработка
}
}
После того как извлекатьли главную часть документа, можно найти любую часть документа - для этого необходимо выполнить итерацию по описанию взаимоотношений частей. Ниже показано, как это сделать, на примере поиска комментариев в документе Word.
//
// Найти комментарии в документе
//commentsPartRelType =
@”http://schemas.microsoft.com/office/2006/
relationships/wordComments”;commentsPart = null;
Stream commentsXML = null;
//
//Итерация по всем взаимоотношениям в document.xml
//(PackageRelationship relationship in.GetRelationshipsByType(comments-))
{
//Комментарии = /word/comments.xmlcommentsUri = PackUriHelper.ResolvePartUri
(documentUri,.TargetUri);= officePackage.GetPart(commentsUri);
break;
}
В приведенном примере мы использовали URI для нахождения адреса определенного фрагмента документа - это необходимо для того, чтобы не зависеть от имени фрагмента, которое может меняться по мере работы с документом. Последний пример, который мы рассмотрим, относится к удалению определенного фрагмента документа. Предположим, что мы хотим удалить из файла VBA-проект.
public void DeleteVBAPart(string fileName)
{officeDocRelType =
@”http://schemas.microsoft.com/office/2006//”;string vbaRelationshipType =
“http://schemas.microsoft.com/office/2006//vbaProject”;documentPart = null;
Uri documentUri = null;
//
// Открыть контейнер на чтение
//(Package officePackage = Package.Open
(fileName, FileMode.Open, FileAccess.ReadWrite))
{
// Получить «главную часть»(PackageRelationship relationship in.GetRelationshipsByType
(officeDocRelType))
{= PackUriHelper.ResolvePartUri(new(“/”, UriKind.Relative), relationship.);= officePackage.GetPart(documentUri);;
}
// Найти VBA project(System.IO.Packaging.PackageRelation-relationshipdocumentPart.GetRelationshipsByType
(vbaRelationshipType))
{vbaUri = PackUriHelper.ResolvePartUri
(documentUri,.TargetUri);vbaPart = officePackage.GetPart
(vbaUri);
// Удалить VBA project.DeletePart(vbaUri);
// Удалить ссылку на VBA.DeleteRelationship
(relationship.Id);;
}
// Закрыть контейнер.Close();
}
}
Приведенные примеры помогут вам составить общее представление о том, как использовать классы System.IO.Packaging для работы с документами в формате Office 2007 Open XML Format. В ближайшее время Microsoft планирует опубликовать значительное число примеров использования этого программного интерфейса - следите за новинками на сайте MSDN ().
Do'stlaringiz bilan baham: |