Ole objects in word

OLE (Object Linking and Embedding) technology allows you to insert data (spreadsheets, images, presentations, charts, equations, etc.) from external applications into your document. Use the Word Processing Document API to load, add, extract, or remove OLE objects. You can print documents with OLE objects and export them to PDF.

Important

The Word Processing Document API does not support OLE objects in OpenDocument Text (.odt) and encrypted DOC files.

Access OLE Objects

OLE objects are stored in the SubDocument.Shapes collection. Use the ShapeCollection.Item property to return an OLE object from the collection. The Shape.Type property helps you distinguish between different drawing object types in the document.

The DrawingObject.OleFormat property returns the OLE object’s characteristics.

Property Description
OleFormat.InsertType Indicates whether the OLE object is embedded in the document or linked to an external file.
OleFormat.ObjectRepresentation Indicates how the OLE object is displayed in the document (as an image or an icon).
OleFormat.ProgId Returns the content type associated with the OLE object.
OleFormat.SourceFileName Returns a path to the source file associated with the linked OLE object.
OleFormat.AutoUpdate Specifies whether to automatically update the OLE object with data from the linked file.
OleFormat.IsLocked Specifies whether the linked OLE object can be updated.
OleFormat.OlePackage Returns properties for the OLE object of the Package type.

The following example retrieves all linked objects from the document:

  • C#
  • VB.NET
using System.Linq;
// ...

Document document = wordProcessor.Document;
List<DrawingObject> linkedObjects = document.Shapes.Flatten()
.Where(x => x.Type == ShapeType.OleObject && 
x.OleFormat.InsertType == OleInsertType.Linked)
.ToList();

Insert OLE Objects

Linked Objects

Use the ShapeCollection.InsertOleObject method overload with the fileName parameter to create an OLE object that stores a link to a specified file. You can use constant fields of the OleObjectType class to specify the file type. The OLE object is displayed in the document as an image.

  • C#
  • VB.NET
Document document = wordProcessor.Document;
// Insert an OLE object. Link it to an Excel worksheet.
Shape oleObject = document.Shapes.InsertOleObject(document.CreatePosition(1780), @"D:ExcelWorkbook.xlsx",
    OleObjectType.ExcelWorksheet, DocumentImageSource.FromFile(@"ImagesSpreadsheet.png"));
// Specify the object position on the page.
oleObject.RelativeHorizontalPosition = ShapeRelativeHorizontalPosition.Column;
oleObject.RelativeVerticalPosition = ShapeRelativeVerticalPosition.Paragraph;
oleObject.Offset = new PointF(0, 0);
// Specify how text wraps around the object. 
oleObject.TextWrapping = TextWrappingType.TopAndBottom;

Open the document in Microsoft® Word® and double-click the image to open the file associated with the OLE object.

Insert a Linked OLE Object

Embedded Objects

Use the ShapeCollection.InsertOleObject method overload with the stream parameter to embed data from an external file in the document. You can use constant fields of the OleObjectType class to specify the content type. The OLE object is displayed in the document as an image.

  • C#
  • VB.NET
Document document = wordProcessor.Document;
// Embed data from an Excel worksheet in the document.
using (Stream excelStream = File.Open(@"D:ExcelWorkbook.xlsx", FileMode.Open))
{
    Shape oleObject = document.Shapes.InsertOleObject(document.CreatePosition(1780), excelStream,
        OleObjectType.ExcelWorksheet, DocumentImageSource.FromFile(@"ImagesSpreadsheet.png"));
    // Specify the object position on the page.
    oleObject.RelativeHorizontalPosition = ShapeRelativeHorizontalPosition.Column;
    oleObject.RelativeVerticalPosition = ShapeRelativeVerticalPosition.Paragraph;
    oleObject.Offset = new PointF(0, 0);
    // Specify how text wraps around the object. 
    oleObject.TextWrapping = TextWrappingType.TopAndBottom;
}

Open the document in Microsoft® Word® and double-click the OLE object to modify the embedded data.

Insert an Embedded OLE Object

Display OLE Objects as Icons

Use the ShapeCollection.InsertOleObjectAsIcon method overloads to insert OLE objects as icons.

  • C#
  • VB.NET
Document document = wordProcessor.Document;
// Insert an OLE object. Link it to an Excel worksheet.
// The OLE object is displayed in the document as an icon.
Shape oleObject = document.Shapes.InsertOleObjectAsIcon(document.CreatePosition(1780), @"D:ExcelWorkbook.xlsx",
    OleObjectType.ExcelWorksheet, DocumentImageSource.FromFile(@"ImagesExcel.ico"));
// Specify the object position on the page.
oleObject.RelativeHorizontalPosition = ShapeRelativeHorizontalPosition.Column;
oleObject.RelativeVerticalPosition = ShapeRelativeVerticalPosition.Paragraph;
oleObject.Offset = new PointF(0, 0);
// Specify how text wraps around the object. 
oleObject.TextWrapping = TextWrappingType.TopAndBottom;

Open the document in Microsoft® Word® and double-click the icon to open the file associated with the OLE object.

Insert an OLE Object as an Icon

Group OLE Objects

Call the ShapeCollection.InsertGroup method to create a shape group. The Shape.GroupItems property returns a collection of group elements. Use the collection’s AddOleObject and AddOleObjectAsIcon methods to add OLE objects to the group.

The following example groups two OLE objects:

  • C#
  • VB.NET
Document document = wordProcessor.Document;
// Set measurement unit to inches.
document.Unit = DevExpress.Office.DocumentUnit.Inch;
// Insert a shape group.
Shape group = document.Shapes.InsertGroup(document.Range.Start);
// Specify the group position relative to the left and top edges of the page. 
group.Offset = new PointF(1f, 6f);
// Access the collection of group items. 
var groupItems = group.GroupItems;
// Add the first OLE object to the group.
groupItems.AddOleObjectAsIcon(@"D:ExcelWorkbook.xlsx", OleObjectType.ExcelWorksheet, 
    DocumentImageSource.FromFile(@"ImagesExcel.ico"), new PointF(0f, 0f));
// Add the second OLE object to the group.
groupItems.AddOleObjectAsIcon(@"D:PowerPointPresentation.pptx", OleObjectType.PowerPointPresentation,
    DocumentImageSource.FromFile(@"ImagesPowerPoint.ico"), new PointF(1.5f, 0f));

Group OLE Objects

Change OLE Object Display Style

Use the OleFormat.ChangeRepresentation method to change how an existing OLE object is displayed in the document.

  • C#
  • VB.NET
Document document = wordProcessor.Document;
// Insert an OLE object. Link it to an Excel worksheet.
// The OLE object is displayed in the document as an image.
Shape oleObject = document.Shapes.InsertOleObject(document.CreatePosition(1780), @"D:ExcelWorkbook.xlsx",
    OleObjectType.ExcelWorksheet, DocumentImageSource.FromFile(@"ImagesSpreadsheet.png"));

// Display the OLE object as an icon.
oleObject.OleFormat.ChangeRepresentation(OleObjectRepresentationType.Icon, 
    DocumentImageSource.FromFile(@"ImagesExcel.ico"));

Retrieve Embedded Data

Use the OleFormat.GetRawData method to retrieve an embedded OLE object’s data.

The following example loads spreadsheet data from a Word document into the Spreadsheet Document API component. You can modify and save this data to a file.

Important

You need a license to the DevExpress Office File API or DevExpress Universal Subscription to use this example in production code. Refer to the following page for pricing information: DevExpress Subscriptions.

  • C#
  • VB.NET
using System.Linq;
using DevExpress.XtraRichEdit.API.Native;
// Add references to DevExpress.Docs.dll 
// and DevExpress.Spreadsheet.Core.dll.
using DevExpress.Spreadsheet;
// ...

Document document = wordProcessor.Document;
// Obtain an OLE object that stores spreadsheet data.
DevExpress.XtraRichEdit.API.Native.Shape embeddedObject = document.Shapes.FirstOrDefault(
    x => x.Type == DevExpress.XtraRichEdit.API.Native.ShapeType.OleObject &&
    x.OleFormat.InsertType == OleInsertType.Embedded &&
    x.OleFormat.ProgId == OleObjectType.ExcelWorksheet);

if (embeddedObject != null)
{
    // Retrieve data from the OLE object.
    byte[] spreadsheetData = embeddedObject.OleFormat.GetRawData();
    // Create a Workbook instance.
    using (Workbook workbook = new Workbook()) {
        // Load data into the workbook.
        workbook.LoadDocument(spreadsheetData);
        // Modify data.
        // ...

        // Save the document.
        workbook.SaveDocument("ExcelDocument.xlsx", DevExpress.Spreadsheet.DocumentFormat.Xlsx);
    }
}

Save Data to a File

Use the OleFormat.SaveAs method to save an embedded OLE object’s data to a file.

  • C#
  • VB.NET
using System.Linq;
using DevExpress.XtraRichEdit.API.Native;
// ...

Document document = wordProcessor.Document;
// Obtain an OLE object that stores spreadsheet data.
DevExpress.XtraRichEdit.API.Native.Shape embeddedObject = document.Shapes.FirstOrDefault(
    x => x.Type == DevExpress.XtraRichEdit.API.Native.ShapeType.OleObject &&
    x.OleFormat.InsertType == OleInsertType.Embedded &&
    x.OleFormat.ProgId == OleObjectType.ExcelWorksheet);

if (embeddedObject != null)
{
    // Save the OLE object's data as an XLSX document.
    embeddedObject.OleFormat.SaveAs("ExcelDocument.xlsx");
}

Remove OLE Objects

Use one of the following methods to remove an OLE object from the document:

  • ShapeCollection.Remove — removes a specific object from the collection;

  • ShapeCollection.RemoveAt — removes an object with the specified index from the collection;

  • ShapeCollection.Clear — clears the shape collection.

The following example removes all OLE objects from the collection:

  • C#
  • VB.NET
Document document = wordProcessor.Document;
ShapeCollection shapes = document.Shapes;
for (int i = shapes.Count - 1; i >= 0; i--)
{
    if (shapes[i].Type == ShapeType.OleObject)
        shapes.Remove(shapes[i]);
}

See Also

Библиографическое описание:


Рудниченко, А. К. Использование OLE-объектов в документах Microsoft Word как средство распространения вредоносных программ. Методы защиты от них / А. К. Рудниченко, С. О. Кошелев. — Текст : непосредственный // Молодой ученый. — 2016. — № 29 (133). — С. 36-38. — URL: https://moluch.ru/archive/133/37122/ (дата обращения: 14.04.2023).



В данной статье рассказывается, что такое OLE интерфейс, его простейшее применение. Также рассматривается, как с помощью него распространяются вредоносные программы в виде документов Microsoft Word на различные предприятия. Предлагается список мер, которые помогут уменьшить риск получения заражённого файла на компьютеры организации.

Ключевые слова: Microsoft Office, Word, OLE интерфейс, OLE объекты, информационная безопасность, вредоносные программы

В настоящее время в мире существует множество программ, разработчики которых относят свои продукты к разряду офисных. Наибольшую популярность набрал Microsoft Office. Самым массовым продуктом из этого набора является Microsoft Word. Им пользуются практически все как на домашних компьютерах, так и на компьютерах на предприятиях.

Microsoft Word (MS Word) — многофункциональная система обработки текстов, обладающая полным набором средств, необходимых для быстрого создания и эффективной обработки документов практически любой степени сложности. Но на редактировании текста его функционал не ограничивается. Расширяются возможности офисных программ семейства Microsoft с помощью различных дополнений, таких как Visual Basic для приложений, OLE объекты, ActiveX объекты и другие. Таким образом, MS Word — не только текстовый редактор, а ещё средство для выполнения самых разных алгоритмов, написанных на Visual Basic или запуска и связывания с документом различных программ.

Интерфейс OLE (Object Linking and Embedding — связывание и внедрение объектов) поддерживается множеством различных программ и используется для помещения документа, созданного в одной программе, в другую программу. Например, можно вставить документ MS Word в книгу MS Excel. Задача интерфейса OLE проста — создание промежуточного звена между программами для упрощения работы с различным программным обеспечением, поэтому OLE чаще всего используется тогда, когда обрабатываются составные документы с различными между собой системами. В данный момент OLE интерфейс используется в виде OLE объектов, которые зачастую представляют собой различные мультимедийные данные.

Алгоритм вставки объекта, который содержит ссылку на содержимое из другой программы очень прост:

  1. Открыть MS Word и определить место, где будет помещён OLE объект;
  2. На вкладке «Вставка» в группе «Текст» щёлкнуть «Объект»;
  3. Открыть вкладку «Создание из файла»;
  4. В поле «Имя файла» ввести имя файла или нажать кнопку «Обзор» для выбора файла из списка.

Существует два режима вставки объектов:

– Без связи с исходным файлом. Вставка содержимого указанного файла в документ происходит так, чтобы его можно было редактировать, используя приложение, в котором он был создан. Изменения в исходном файле не отображаются в OLE объекте, который вставлен в документ. Для этого имеется функция редактирования OLE объекта.

– Со связью с исходным файлом. Вставка содержимого файла в документ и создание связи с источником. Изменения в исходном файле будут автоматически отображаться в документе. Редактирование происходит в исходном документе.

В качестве OLE объекта может быть вставлен не только документ из линейки продукта Microsoft Office. Например, возможно вставить ссылку на простейший текстовый документ, изображение или PDF-документ. Особое внимание стоит уделить тому, что функционал OLE интерфейса позволяет вставлять таким же образом и исполняемые файлы, которые могут нанести вред операционной системе или отдельным файлам.

Таким образом, OLE объект и сам документ, созданный в Microsoft Word, может содержать в себе вредоносный код, который не будет детектироваться антивирусным программным обеспечением. Отсутствие каких-либо замечаний со стороны защищающих программ обуславливается тем, что вредоносный код создан полностью легальными средствами, а также потому что конечным результатом является документ формата «*.doс» или «*.docx» соответственно.

Вредоносный код, содержащийся в OLE объекте, выполняется не сразу. Для запуска исполняемого файла из документа MS Word необходимо кликнуть два раза по вставленному объекту. На данном этапе злоумышленники пытаются доказать жертве отсутствие подозрительного контента: рисунок стандартного объекта заменяется на изображение какой-либо таблицы, а над ней пишется просьба о том, что необходимо кликнуть на таблицу дважды (например, «Для просмотра таблицы кликните дважды на таблицу»). Для запуска исполняемого файла пользователь должен согласиться с запуском в вполне стандартном окне запуска. Пример вредоносного документа с OLE объектом представлен на рисунке 1.

Рис. 1. Демонстрация вредоносного документа с OLE объектом

Для убедительности такие документы с вредоносным кодом посылаются по электронной почте под видом письма от государственных органов (например, налоговой службы) с помощью замены заголовка письма. Таким образом, сотрудник, открывающий письмо, не видит настоящего адреса отправителя. Он замаскирован (например, под noreply@nalog.ru), и визуально определить, настоящий это адрес или изменённый заголовок, зачастую невозможно.

В рамках любого предприятия неосведомлённые сотрудники могут пропустить предупреждение об открытии исполнительного файла, так как оно выглядит стандартно и пользователем нарочно пропускается в силу привычного интерфейса окна. Формату Microsoft Word чаще всего доверяют и не подозревают от него никакой вредоносной активности, что «играет на руку» злоумышленникам. Исходя из этого, шанс того, что сотрудник организации откроет документ и осуществит запуск вредоносного программного обеспечения, достаточно велик.

Безусловно, в интересах организации обезопасить компьютеры сотрудников. Для того, чтобы уменьшить (или вовсе исключить) риск заражения от данного способа распространения вредоносных программ предлагаются следующие меры:

– Использование аппаратных или программных средств защиты для фильтрации трафика электронной почты. Таким образом, письма с изменёнными заголовками будут отсеиваться или помечаться статусом «Подозрительно»;

– Своевременное и регулярное обучение сотрудников организации, а также их информирование о сценариях заражения, так как распространение вредоносных документов допустимо и без использования электронной почты;

– Использование относительно новой версии пакета Microsoft Office (2010 и выше). Последние версии данного продукта имеют в своём функционале «Защищённый просмотр», что уменьшает шанс того, что сотрудник откроет OLE объект. «Безопасный режим» позволяет открывать файлы и просматривать их в более безопасной среде (без использования макросов и дополнительных объектов).

Таким образом, стандартные легитимные средства редактирования документов могут служить распространителями различных программ без ведома пользователей. OLE объекты — это относительно новая ветвь развития в сфере вредоносных программ для предприятий. В конце 2016 года в адрес некоторых организаций уже начинают поступать такие документы, так как они отлично подходят для «доставки» вирусов-шифровальщиков или других вредоносных программ на компьютер жертвы руками обычных пользователей. А отследить, откуда пришло письмо с загадочным документом, зачастую не предоставляется возможным.

Литература:

1. Object Linking and Embedding // Википедия — URL: https://ru.wikipedia.org/wiki/Object_Linking_and_Embedding

2. Создание и изменение объектов OLE и управление ими // MicrosoftSupport — URL: https://support.office.com/ru-ru/article/Создание-и-изменение-объектов-OLE-и-управление-ими-e73867b2–2988–4116–8d85-f5769ea435ba

3. ActiveX // Википедия — URL: https://ru.wikipedia.org/wiki/ActiveX

4. Технология MicrosoftOLE используется для внедрения вредоносного кода в документы // Журнал «Хакер» — URL: https://xakep.ru/2016/06/16/microsoft-ole-for-malware/

Основные термины (генерируются автоматически): OLE, вредоносный код, документ, исходный файл, программа, электронная почта, вредоносный документ, запуск, интерфейс, исполняемый файл.

Ключевые слова

Информационная безопасность,

вредоносные программы,

Microsoft Office,

слово,

OLE интерфейс,

OLE объекты,

Word

Microsoft Office, Word, OLE интерфейс, OLE объекты, информационная безопасность, вредоносные программы

Похожие статьи

Современные системы автоматизированного динамического…

Модель взаимодействия с системами автоматизированного динамического анализа вредоносных программ. Метод автоматизированного анализа электронных документов в формате XML. Современные технологии обнаружения и уничтожения вредоносных программ.

Методика исследования вредоносных программ

Далее, запускается образец вредоносной программы. По прошествии некоторого времени (приблизительно несколько минут) завершаем работу ProcessMonitor и сохраняем получившийся в результате файл.

Электронная почта.

Вредоносные программы, блокирующие работу с операционной…

– копирование файла вредоносной программы в системную папку

вредоносная программа, вирус, Windows, троянский, Уинлок, выкуп, Экран блокировки, винлокер.

Задать вопрос. ФИО. Электронная почта.

Актуальные способы внедрения компьютерных вирусов

Ключевые слова: вирус, вредоносная программа, информационная система, компьютер, юникод, RLO, джойнер.

Таким образом, в архив добавляются два исполняемых файла и запаковываются.

Использование криптографии с временным раскрытием для…

Если зашифровать вредоносный код, то метод сигнатурного анализа станет неприменим для его обнаружения.

Запускает записанный на шаге 3файл.

Использование OLE-объектов в документах Microsoft Word как средство распространения вредоносных программ.

Защита информации в сети | Статья в журнале «Молодой ученый»

Рассмотрим термин, вирус — это компьютерная программа или вредоносный код, отличительным

Такого рода вирус портит файлы, находящиеся на компьютере, но есть вирусы, которые меняют содержимое файлов таким образом, что эти файлы содержат вирус.

Выявление компонентов операционной системы, требующих…

Использование OLE-объектов в документах Microsoft Word как средство распространения вредоносных программ. Методы защиты от них. Анализ методов обнаружения вредоносных программ.

Автоматизированное добавление печатных штампов при помощи…

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

Основные термины (генерируются автоматически): PDF, API, IAC, документ, VBA, OLE, обработанный PDF-документа, нижний колонтитул

Электронная почта. Ваш вопрос.

Современные системы автоматизированного динамического…

Модель взаимодействия с системами автоматизированного динамического анализа вредоносных программ. Метод автоматизированного анализа электронных документов в формате XML. Современные технологии обнаружения и уничтожения вредоносных программ.

Методика исследования вредоносных программ

Далее, запускается образец вредоносной программы. По прошествии некоторого времени (приблизительно несколько минут) завершаем работу ProcessMonitor и сохраняем получившийся в результате файл.

Электронная почта.

Вредоносные программы, блокирующие работу с операционной…

– копирование файла вредоносной программы в системную папку

вредоносная программа, вирус, Windows, троянский, Уинлок, выкуп, Экран блокировки, винлокер.

Задать вопрос. ФИО. Электронная почта.

Актуальные способы внедрения компьютерных вирусов

Ключевые слова: вирус, вредоносная программа, информационная система, компьютер, юникод, RLO, джойнер.

Таким образом, в архив добавляются два исполняемых файла и запаковываются.

Использование криптографии с временным раскрытием для…

Если зашифровать вредоносный код, то метод сигнатурного анализа станет неприменим для его обнаружения.

Запускает записанный на шаге 3файл.

Использование OLE-объектов в документах Microsoft Word как средство распространения вредоносных программ.

Защита информации в сети | Статья в журнале «Молодой ученый»

Рассмотрим термин, вирус — это компьютерная программа или вредоносный код, отличительным

Такого рода вирус портит файлы, находящиеся на компьютере, но есть вирусы, которые меняют содержимое файлов таким образом, что эти файлы содержат вирус.

Выявление компонентов операционной системы, требующих…

Использование OLE-объектов в документах Microsoft Word как средство распространения вредоносных программ. Методы защиты от них. Анализ методов обнаружения вредоносных программ.

Автоматизированное добавление печатных штампов при помощи…

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

Основные термины (генерируются автоматически): PDF, API, IAC, документ, VBA, OLE, обработанный PDF-документа, нижний колонтитул

Электронная почта. Ваш вопрос.

Похожие статьи

Современные системы автоматизированного динамического…

Модель взаимодействия с системами автоматизированного динамического анализа вредоносных программ. Метод автоматизированного анализа электронных документов в формате XML. Современные технологии обнаружения и уничтожения вредоносных программ.

Методика исследования вредоносных программ

Далее, запускается образец вредоносной программы. По прошествии некоторого времени (приблизительно несколько минут) завершаем работу ProcessMonitor и сохраняем получившийся в результате файл.

Электронная почта.

Вредоносные программы, блокирующие работу с операционной…

– копирование файла вредоносной программы в системную папку

вредоносная программа, вирус, Windows, троянский, Уинлок, выкуп, Экран блокировки, винлокер.

Задать вопрос. ФИО. Электронная почта.

Актуальные способы внедрения компьютерных вирусов

Ключевые слова: вирус, вредоносная программа, информационная система, компьютер, юникод, RLO, джойнер.

Таким образом, в архив добавляются два исполняемых файла и запаковываются.

Использование криптографии с временным раскрытием для…

Если зашифровать вредоносный код, то метод сигнатурного анализа станет неприменим для его обнаружения.

Запускает записанный на шаге 3файл.

Использование OLE-объектов в документах Microsoft Word как средство распространения вредоносных программ.

Защита информации в сети | Статья в журнале «Молодой ученый»

Рассмотрим термин, вирус — это компьютерная программа или вредоносный код, отличительным

Такого рода вирус портит файлы, находящиеся на компьютере, но есть вирусы, которые меняют содержимое файлов таким образом, что эти файлы содержат вирус.

Выявление компонентов операционной системы, требующих…

Использование OLE-объектов в документах Microsoft Word как средство распространения вредоносных программ. Методы защиты от них. Анализ методов обнаружения вредоносных программ.

Автоматизированное добавление печатных штампов при помощи…

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

Основные термины (генерируются автоматически): PDF, API, IAC, документ, VBA, OLE, обработанный PDF-документа, нижний колонтитул

Электронная почта. Ваш вопрос.

Современные системы автоматизированного динамического…

Модель взаимодействия с системами автоматизированного динамического анализа вредоносных программ. Метод автоматизированного анализа электронных документов в формате XML. Современные технологии обнаружения и уничтожения вредоносных программ.

Методика исследования вредоносных программ

Далее, запускается образец вредоносной программы. По прошествии некоторого времени (приблизительно несколько минут) завершаем работу ProcessMonitor и сохраняем получившийся в результате файл.

Электронная почта.

Вредоносные программы, блокирующие работу с операционной…

– копирование файла вредоносной программы в системную папку

вредоносная программа, вирус, Windows, троянский, Уинлок, выкуп, Экран блокировки, винлокер.

Задать вопрос. ФИО. Электронная почта.

Актуальные способы внедрения компьютерных вирусов

Ключевые слова: вирус, вредоносная программа, информационная система, компьютер, юникод, RLO, джойнер.

Таким образом, в архив добавляются два исполняемых файла и запаковываются.

Использование криптографии с временным раскрытием для…

Если зашифровать вредоносный код, то метод сигнатурного анализа станет неприменим для его обнаружения.

Запускает записанный на шаге 3файл.

Использование OLE-объектов в документах Microsoft Word как средство распространения вредоносных программ.

Защита информации в сети | Статья в журнале «Молодой ученый»

Рассмотрим термин, вирус — это компьютерная программа или вредоносный код, отличительным

Такого рода вирус портит файлы, находящиеся на компьютере, но есть вирусы, которые меняют содержимое файлов таким образом, что эти файлы содержат вирус.

Выявление компонентов операционной системы, требующих…

Использование OLE-объектов в документах Microsoft Word как средство распространения вредоносных программ. Методы защиты от них. Анализ методов обнаружения вредоносных программ.

Автоматизированное добавление печатных штампов при помощи…

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

Основные термины (генерируются автоматически): PDF, API, IAC, документ, VBA, OLE, обработанный PDF-документа, нижний колонтитул

Электронная почта. Ваш вопрос.

To insert an object, click Object on the Insert tab.

Contents

  • 1 Where is the Insert Object tool in Word?
  • 2 How do you insert an object in Word?
  • 3 Where is the insert object in Word o365?
  • 4 What is insert in MS Word?
  • 5 How do I open an OLE file in Word?
  • 6 How do you insert an object?
  • 7 How do I insert multiple objects in Word?
  • 8 What are objects in MS Word?
  • 9 Which tab is used to insert action button?
  • 10 What are the 2 options when inserting an object?
  • 11 Why can’t I see insert object in Powerpoint?
  • 12 How do I insert an object in Word 2016?
  • 13 What object Cannot be insert in a Word document from Insert tab?
  • 14 How do I insert an attachment into an icon in Word?
  • 15 Where is the Insert tab on the ribbon bar?
  • 16 Where on the Insert tab could you add a symbol?
  • 17 Where can I find OLE objects in Word?
  • 18 How do I fix Ole action in Word?
  • 19 Which of the following object can be inserted in your document?
  • 20 How do I insert multiple boxes in Word?

You can insert an existing file into a Word document and insert text in Word around it.

  • Open Document and Click “Insert”
  • Open the Word document and click the “Insert” tab on the ribbon menu at the top of the screen.
  • Click the “Object” Button.
  • Click the “Object” button in the Text group to open the Object dialog box.

How do you insert an object in Word?

Link or Embed a file

  1. Go to Insert > Object.
  2. Select Create from File.
  3. Select Browse and choose the file you want to use.
  4. Select Insert.
  5. Choose Display as icon to embed, or Link to file for a link.
  6. Select OK.

Where is the insert object in Word o365?

Make sure you have the file you want to attach present on your system. Once the document is open, go to the Insert tab on the ribbon and on the Text toolbox, select the Object button. From the menu that opens, select ‘Object’. A new window will open.

What is insert in MS Word?

Insert is a file menu and Ribbon section in software that allows the user to add something (e.g., picture) into a document or file. For example, in Microsoft Word, the user may use the Insert tab in the Ribbon to insert a picture of themselves into their document. Tip.

How do I open an OLE file in Word?

You have an Excel embedded OLE object inserted into a formal module as an icon.

  1. Then, export the module to Word using File -> Export -> Microsoft Office -> Word.
  2. Then, open the Excel OLE.
  3. It opens on the same Microsoft Word document instead of opening into a ‘new’ window.

How do you insert an object?

Embed an object in a worksheet

  1. Click inside the cell of the spreadsheet where you want to insert the object.
  2. On the Insert tab, in the Text group, click Object .
  3. In the Object dialog box, click the Create from File tab.
  4. Click Browse, and select the file you want to insert.

How do I insert multiple objects in Word?

2 Answers

  1. Copy all your files to clipboard (Ctrl + C)
  2. Open the word document you would like to embed your files and click the keyboard combinatin Ctrl + Alt + V [Paste Special] and choose files option and click OK.

What are objects in MS Word?

An object is a combination of data and the application needed to modify that data. You can thus embed objects in or link them to documents created with a different application. For instance, an Excel spreadsheet can be embedded within a Microsoft Word document using OLE.

Which tab is used to insert action button?

Put an action button on your slide
On the Insert tab, click Shapes, and then under Action Buttons at the bottom of the menu, click the button shape that you want to add.

What are the 2 options when inserting an object?

There are two options to insert objects: Create New: Insert object directly. Select the type of the object you want to insert in the Object type roll-down list. WPS Spreadsheets supports a variety of object types, such as WPS Spreadsheets Workbook, WordPad document, and Microsoft Excel among others.

Why can’t I see insert object in Powerpoint?

When you see only the frames of the object but not the icon, it’s probably because you have turned on the “Show picture placeholders” option. Click “File” tab then “Options” to open the “Word Options” dialog box. Then click “Advanced” on the left pane.

How do I insert an object in Word 2016?

Microsoft Word 2016

  1. Open the first document.
  2. Place the cursor where you want the second document to be inserted.
  3. From the Insert tab, Text group, click on the down arrow next to Object and choose Text from file.
  4. Select the file to be inserted.
  5. Click on Insert.

What object Cannot be insert in a Word document from Insert tab?

Discussion Forum

Que. Which type of file cannot be inserted in a word document via Insert Object option
b. Bitmap Image
c. MP3 file
d. Video Clip
Answer:MP3 file

How do I insert an attachment into an icon in Word?

On the Insert tab, click the Object button near the right end. In the dialog that opens, click the Create From File tab. Click the Browse button and locate the document file to insert. Check the box for Display As Icon, and click OK.

Where is the Insert tab on the ribbon bar?

second tab
Insert tab:
Insert Tab is the second tab in the Ribbon.

Where on the Insert tab could you add a symbol?

From the Insert command tab, in the Symbols group, click SYMBOL » select More Symbols… The Symbol dialog box appears. The special character appears in your document.

Where can I find OLE objects in Word?

The Document Inspector detects OLE Objects or packages that have been inserted from the Object dialog box (click Insert > Object in your Office application), or by using copy and paste commands.

How do I fix Ole action in Word?

Solution. The solution is generally simple — switch to MathType and close the dialog box. Sometimes it’s not that simple though. What if you see MathType’s icon in the Windows Taskbar, but clicking it doesn’t bring the window up so you can close the dialog?

Which of the following object can be inserted in your document?

The Insert tab contains various items that you may want to insert into a document. These items include such things as tables, word art, hyperlinks, symbols, charts, signature line, date & time, shapes, header, footer, text boxes, links, boxes, equations and so on.

How do I insert multiple boxes in Word?

Go to Insert > Text Box, and then select one of the pre-formatted text boxes from the list, select More Text Boxes from Office.com, or select Draw Text Box.

Word OLE (Object Linking and Embedding) object is used to make contents, created in one program, available in Word document. For example, users can insert an Excel worksheet in a Word document.

Both Linked object and Embedded object can be used between Word and other programs. The data of Embedded objects is saved in Word and should be updated manually, while data of Linked object remains as separate file and will be updated when source data is changed.

Spire.Doc for .NET , a professional component to manipulate Word documents with .NET, enables users to insert OLE objects in Word by using C#/VB.NET. This guide will show you how to insert one kind of OLE objects, Linked objects (an Excel Worksheet) in Word.

Users can invoke paragraph.AppendOleObject(string pathToFile, olePicture, OleObjectType) method to insert OLE objects in Word. The parameters, olePicture and OleObjectType are properties of DocOleObject class which is provided by Spire.Doc for .NET.

The following steps present details to insert OLE Objects in Word. The following demonstrate a document before insert the OLE Object into Word, and at the bottom, you can find the result screenshot after inserting. Before starting with the steps, download and install Spire.Doc for .NET on system.

Insert Word OLE Objects

Code Detail:

Step 1: Define a GetExcelImage(string ExcelFile) method to get olePicture. Actually, the olePicture is image of data information in original Excel worksheet. The image is generated from Excel through Spire.XLS for .NET that will be shown in documents after inserting OLE object in Word. Double click this picture and you can get the original worksheet.

[C#]

 
private static Image GetExcelImage(String ExcelFile)
 {
  //Load Excel File
  Workbook workbook = new Workbook();
  workbook.LoadFromFile(ExcelFile);
  Worksheet sheet = workbook.Worksheets[0];

  //Set Image Range
  int lastRow = sheet.LastRow;
  int lastColumn = sheet.LastColumn;
  return workbook.Worksheets[0].SaveToImage(1, 1, lastRow, lastColumn);
}

[VB.NET]

   
Private Shared Function GetExcelImage(ByVal ExcelFile As String) As Image
  'Load Excel File
  Dim workbook As New Workbook()
  workbook.LoadFromFile(ExcelFile)
  Dim sheet As Worksheet = workbook.Worksheets(0)

  'Set Image Range
  Dim lastRow As Integer = sheet.LastRow
  Dim lastColumn As Integer = sheet.LastColumn
  Return workbook.Worksheets(0).SaveToImage(1, 1, lastRow, lastColumn)
End Function
 

Step 2: Insert OLE object. After adding paragraph in Word document, declare a new DocPicture. Then, use GetExcelImage(string ExcelFile) method which is defined in step 1 to get image source and then use picture.LoadImage(Image) method to load this image. Finally, insert OLE objects.

[C#]

       
para = mysec.AddParagraph();
DocPicture picture = new DocPicture(mydoc);
Image image = GetExcelImage(@"E:workDocumentsExcelFilesCustomers.xlsx");//Get Image Source
picture.LoadImage(image);//Load Image
DocOleObject obj = para.AppendOleObject(@"E:workDocumentsExcelFilesCustomers.xlsx", picture, Spire.Doc.Documents.OleObjectType.ExcelWorksheet);

[VB.NET]

  
'Insert OLE Object
para = mysec.AddParagraph()
Dim picture As New DocPicture(mydoc)
Dim image As Image = GetExcelImage("E:workDocumentsExcelFilesCustomers.xlsx") 'Get Image Source
picture.LoadImage(image) 'Load Image
Dim obj As DocOleObject = para.AppendOleObject("E:workDocumentsExcelFilesCustomers.xlsx", picture, Spire.Doc.Documents.OleObjectType.ExcelWorksheet)

After this coding, you can run this application and a result will show up as below:

Insert Word OLE Objects

Spire.Doc is a Microsoft Word component, which enables users to perform a wide range of Word document processing tasks directly, such as generate, read, write and modify Word document in WPF, .NET and Silverlight.

I am trying to replicate the following method in C# Word interop (NetOffice)

    Selection.PasteSpecial Link:=True, DataType:=wdPasteMetafilePicture, _
        Placement:=wdInLine, DisplayAsIcon:=False

I am saying «replicate» since I don’t want to actually use the `PasteSpecial` method, since I need to update many `field`s of type `link` in one go, and don’t like to communicate with excel by relying on copy and paste.

I already have the following code that does mostly what I want but has some issues that I am not able to overcome.

    Selection.InlineShapes.AddOLEObject («Excel.Sheet.12″, fileName + $»!{label}», true)

This method fails with an error message

> Word is unable to create a link to the object you specified. Please insert the object directly into your file without creating a link

I am only getting this error message, if and only if I use a network drive or unc path with a label.
eg.

    T:TestFile.xlsx!Sheet1!TestRange
    T:TestFile.xlsx!Sheet1!R1C1:R2C2
    //notice that T is a network drive and not a local drive

    \TestShareTestFile.xlsx!Sheet1!TestRange
    \TestShareTestFile.xlsx!Sheet1!R1C1:R2C2

If I dont use the label
eg. 

    T:TestFile.xlsx
    T:TestFile.xlsx
    //notice that T is a network drive and not a local drive

    \TestShareTestFile.xlsx
    \TestShareTestFile.xlsx

or a local drive eg. C: (with or without label)

    C:TestFile.xlsx
    C:TestFile.xlsx

    C:TestFile.xlsx!Sheet1!TestRange
    C:TestFile.xlsx!Sheet1!R1C1:R2C2

everything works fine.

So, only the combination network drive or unc + a label produces that error message.

I thought, okay no problem I already know how to change the path and label of the produced `field` and wrote the following code to include the label in a second step.

    var inlineShape = Selection.InlineShapes.AddOLEObject(«Excel.Sheet.12», fileName, true);

    field = inlineShape.Field;

    if (!string.IsNullOrEmpty(label))
    {
        var fieldCode = field.Code.Text;

        //replace the produced empty label «» with the label I desire eg. «Sheet1!R1C1:R2C2»
        fieldCode = fieldCode.Replace(» «» «, $» «{label}»»);

        //write the updated fieldcode back to the field        
        field.Code.Text = fieldCode;

        //update the field
        field.Update();
    }

BUT this solution, changes the underlying format of the image from WMF (Windows Meta File) to EMF (Enhanced Meta File), but I need it to be stored in the WMF format, since `Office 2010` doesn’t render the correct.

To get the underlying file, I rename my `docx` to `zip` and extract it to look into the `wordmedia` directory.

`PasteSpecial` doesn’t throw that error, and produces that desired WMF format, but I can’t seem to 100% replicate the routine that happens while `PasteSpecial`.

As I side note, I don’t want to have `png` or `bmp` either, since those are generated with a blur around the font, so the best result delivers `wmf` for `Office 2010`.

For `Office 2013` and higher, I am using the following code to get `emf` right from the start and don’t face issue about network drive/unc + label error.

    var field = range.Fields.Add(range, WdEnums.WdFieldType.wdFieldLink);
    field.LinkFormat.SourceFullName = fileName + $»!{label}»;

You can also find the issue here:

https://stackoverflow.com/questions/60565712

Overview

OLE, Object Linking and Embedding, that is, object linking and embedding. When we are designing programs, OLE can be used to create compound documents, combining text, sound, images, tables, applications and other types of information together. In Word, we can use OLE to achieve the combination of the above element information. The following example will introduce how to operate OLE in Word through C#. The content of the example contains the following points:

  • Insert OLE into Word
  • Edit OLE in Word
  • Read OLE in Word

use tools

  •  Spire.Doc for .NET

Note: Download and install the library, when editing the code, pay attention to add a reference to Spire.Doc.dll in the program (the dll file can be obtained in the Bin folder under the installation path)

Sample code (for reference)

[Example 1】Insert OLETo Word

Step 1: Add the using directive

using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System.Drawing;

Step 2: Create a document

//Instantiate a Document class object
Document doc = new Document();
//Add a Section object to the document and add paragraphs
Section sec = doc.AddSection();
Paragraph p = sec.AddParagraph();

Step 3: Load the picture

//Instantiate a DocPicture class object and load the picture
DocPicture picture = new DocPicture(doc);
Image image = Image.FromFile(@"chart1.png");
picture.LoadImage(image);

Step 4: Insert OLE

//Insert a worksheet in the document, the OleLinkType enumeration value controls whether the OLE is linked or embedded
DocOleObject obj = p.AppendOleObject(@"testfile.xlsx", picture, OleLinkType.Link);
//DocOleObject obj = p.AppendOleObject(@"testfile.xlsx", picture, OleLinkType.Embed);

Step 5: Save the document

//Save and open the document
doc.SaveToFile("Add OLE.docx");
System.Diagnostics.Process.Start("Add OLE.docx");

After finishing the code, debug and run the program and generate the documentation.

The test result is as shown in the figure below:

All codes:


using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System.Drawing;

namespace InsertOLE_Doc
{
    class Program
    {
        static void Main(string[] args)
        {
            //Instantiate a Document class object
            Document doc = new Document();
            //Add a Section object to the document and add paragraphs
            Section sec = doc.AddSection();
            Paragraph p = sec.AddParagraph();

            //Instantiate a DocPicture class object and load the picture
            DocPicture picture = new DocPicture(doc);
            Image image = Image.FromFile(@"chart1.png");
            picture.LoadImage(image);

            //Insert a worksheet in the document, the OleLinkType enumeration value controls whether the OLE is linked or embedded         
            DocOleObject obj = p.AppendOleObject(@"testfile.xlsx", picture, OleLinkType.Link);
            //DocOleObject obj = p.AppendOleObject(@"testfile.xlsx", picture, OleLinkType.Embed);

            //Save and open the document
            doc.SaveToFile("Add OLE.docx");
            System.Diagnostics.Process.Start("Add OLE.docx");
        }
    }
}

View Code

[Example 2] Edit OLE in Word

(Here, the documents generated in the above text are test files)

Step 1: Add the using directive

using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System.Drawing;
using System.IO;

Step 2: Load the document

//Instantiate a Document object and load a Word document containing OLE
Document doc = new Document();
doc.LoadFromFile("test.docx");

Step 3: Get all the OLE in the section, and change the OLE type and link object as needed

//Get the first section
Section sec = doc.Sections[0];

//Traverse all the child elements in this Section and find the OLE object under the paragraph
foreach (DocumentObject obj in sec.Body.ChildObjects)
{
    if (obj is Paragraph)
    {
        Paragraph par = obj as Paragraph;
        foreach (DocumentObject paraObj in par.ChildObjects)
        {
            //Find the OLE object and change it according to the type
            if (paraObj.DocumentObjectType == DocumentObjectType.OleObject)
            {
                DocOleObject Ole = paraObj as DocOleObject;
                //If it is a link, modify the link path of the object
                if (Ole.LinkType == OleLinkType.Link)
                {
                    //At the same time, you need to manually change the OLE picture
                    DocPicture pic = Ole.OlePicture;
                    pic.LoadImage(Image.FromFile("Img.png"));
                    Ole.LinkPath = @"sample.docx";
                }
                //If it is embedded, just change the data
                byte[] bys = File.ReadAllBytes(@"sample.docx");
                if (Ole.LinkType == OleLinkType.Embed)
                {
                    DocPicture pic = new DocPicture(doc);
                    pic.LoadImage(Image.FromFile(@"Img.png"));
                    Ole.ObjectType = "Word.Document.12";
                    Ole.SetOlePicture(pic);
                    Ole.SetNativeData(bys);
                }
            }
        }
    }
}

Step 4: Save the document

 //Save the modified document and open
 doc.SaveToFile("Modify OLE.docx", Spire.Doc.FileFormat.Docx2010);
 System.Diagnostics.Process.Start("Modify OLE.docx");

After debugging and running the program, a document is generated. When opening the document, the original OLE pictures and linked documents in the generated document have been changed, as shown below:

 

All codes:


using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System.Drawing;
using System.IO;

namespace EditOLE_Doc
{
    class Program
    {
        static void Main(string[] args)
        {
            //Instantiate a Document object and load a Word document containing OLE
            Document doc = new Document();
            doc.LoadFromFile("test.docx");

            //Get the first section
            Section sec = doc.Sections[0];

            //Traverse all the child elements in this Section and find the OLE object under the paragraph
            foreach (DocumentObject obj in sec.Body.ChildObjects)
            {
                if (obj is Paragraph)
                {
                    Paragraph par = obj as Paragraph;
                    foreach (DocumentObject paraObj in par.ChildObjects)
                    {
                        //Find the OLE object and change it according to the type
                        if (paraObj.DocumentObjectType == DocumentObjectType.OleObject)
                        {
                            DocOleObject Ole = paraObj as DocOleObject;
                            //If it is a link, modify the link path of the object
                            if (Ole.LinkType == OleLinkType.Link)
                            {
                                //At the same time, you need to manually change the OLE picture
                                DocPicture pic = Ole.OlePicture;
                                pic.LoadImage(Image.FromFile("Img.png"));
                                Ole.LinkPath = @"sample.docx";
                            }
                            //If it is embedded, just change the data
                            byte[] bys = File.ReadAllBytes(@"sample.docx");
                            if (Ole.LinkType == OleLinkType.Embed)
                            {
                                DocPicture pic = new DocPicture(doc);
                                pic.LoadImage(Image.FromFile(@"Img.png"));
                                Ole.ObjectType = "Word.Document.12";
                                Ole.SetOlePicture(pic);
                                Ole.SetNativeData(bys);
                            }
                        }
                    }
                }
            }
            //Save the modified document and open
            doc.SaveToFile("Modify OLE.docx", Spire.Doc.FileFormat.Docx2010);
            System.Diagnostics.Process.Start("Modify OLE.docx");
        }
    }
}

View Code

[Example 3] Read OLE in Word

Step 1: Add the using instruction

using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System.IO;

Step 2: Load the file

//Instantiate a Document object, load a document with an OLE object
Document doc = new Document();          
doc.LoadFromFile(@"test.docx");

Step 3: Traverse the section and read OLE

//Traverse all sections of the document          
            foreach (Section sec in doc.Sections)
            {
                //Traverse all the child elements under Section
                foreach (DocumentObject obj in sec.Body.ChildObjects)
                {
                    if (obj is Paragraph)
                    {
                        Paragraph par = obj as Paragraph;
                        //Traverse the paragraphs below this section
                        foreach (DocumentObject o in par.ChildObjects)
                        {
                            //Find the OLE object and extract it according to the type
                            if (o.DocumentObjectType == DocumentObjectType.OleObject)
                            {
                                DocOleObject Ole = o as DocOleObject;
                                /*The ObjectType property can get the specific type of the ole object.
                                                                 Note that if you use Spire.Doc to add the ole object, you need to add it in AppendOleObject
                                                                 Declare OleObjectType first, otherwise you won’t get the specific type here, you will only get the Package*/
                                string s = Ole.ObjectType;
                                //"AcroExch.Document.11" refers to the ProgID corresponding to the PDF object
                                if (s == "AcroExch.Document.11")
                                {
                                    File.WriteAllBytes("Result.pdf", Ole.NativeData);
                                }
                                //"Excel.Sheet.12" refers to the ProgID corresponding to the worksheet after Excel03
                                else if (s == "Excel.Sheet.12")
                                {
                                    File.WriteAllBytes("Result.xlsx", Ole.NativeData);
                                }
                                //"Word.Document.12" refers to the ProgID corresponding to Word after 03
                                else if (s == "Word.Document.12")
                                {
                                    File.WriteAllBytes("Result.docx", Ole.NativeData);
                                }
                            }
                        }
                    }
                }
            }

Debug and run the program and generate documents as follows:

 

All codes:


using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using System.IO;

namespace ReadOLE_Doc
{
    class Program
    {
        static void Main(string[] args)
        {
            //Instantiate a Document object, load a document with an OLE object
            Document doc = new Document();          
            doc.LoadFromFile(@"test.docx");

            //Traverse all sections of the document          
            foreach (Section sec in doc.Sections)
            {
                //Traverse all the child elements under Section
                foreach (DocumentObject obj in sec.Body.ChildObjects)
                {
                    if (obj is Paragraph)
                    {
                        Paragraph par = obj as Paragraph;
                        //Traverse the paragraphs below this section
                        foreach (DocumentObject o in par.ChildObjects)
                        {
                            //Find the OLE object and extract it according to the type
                            if (o.DocumentObjectType == DocumentObjectType.OleObject)
                            {
                                DocOleObject Ole = o as DocOleObject;
                                /*The ObjectType property can get the specific type of the ole object.
                                                                 Note that if you use Spire.Doc to add the ole object, you need to add it in AppendOleObject
                                                                 Declare OleObjectType first, otherwise you won’t get the specific type here, you will only get the Package*/
                                string s = Ole.ObjectType;
                                //"AcroExch.Document.11" refers to the ProgID corresponding to the PDF object
                                if (s == "AcroExch.Document.11")
                                {
                                    File.WriteAllBytes("Result.pdf", Ole.NativeData);
                                }
                                //"Excel.Sheet.12" refers to the ProgID corresponding to the worksheet after Excel03
                                else if (s == "Excel.Sheet.12")
                                {
                                    File.WriteAllBytes("Result.xlsx", Ole.NativeData);
                                }
                                //"Word.Document.12" refers to the ProgID corresponding to Word after 03
                                else if (s == "Word.Document.12")
                                {
                                    File.WriteAllBytes("Result.docx", Ole.NativeData);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

View Code

The above is all about the OLE in the C# operation word. The example method is for reference.

End of this article.

For reprint, please indicate the source!

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

В одной из статей, посвященных работе с Excel в Delphi читатель с ником Kanti задал весьма не тривиальную задачку — как добраться до диаграммы Excel, внедренной в документ Word и работать с ней. За что Kanti большое человеческое спасибо — приятно, когда читатели интересуются жизнью блога и предлагают новые темы и идеи.
На первый взгляд задача довольно не простая. Однако решение для неё есть. Я пошел немного дальше в решении проблемы и сегодня расскажу вам:

  • как работать с объектом Excel, внедренном в документ Word
  • как работать с документом Word, внедренным в Excel.

План статьи:

  • Азы работы с MS Word в Delphi
  • Как работать с объектом Excel, внедренном в документ Word
  • Как работать с документом Word, внедренным в Excel

Прежде, чем начать изложение основного материала, следует упомянуть некоторые моменты работы с Word, т.к. в блоге я их не касался, но эти основы пригодятся для освоения основного материала статьи.

1. Азы работы с MS Word в Delphi

Запуск MS Word в принципе ни чем не отличается от запуска MS Excel за одним небольшим исключением — меняется параметр функции CreateOLEObject:

MyWord:=CreateOleObject('Word.Application');

Но, чтобы не повторяться дважды я расскажу ещё один дополнительный момент, который Вам пригодиться для дальнейшей работы: как подключиться к уже выполняющемуся приложению MS Office, чтобы не создавать лишних копий процессов.

Для того, чтобы подключиться к уже запущенному приложению достаточно использовать функцию GetActiveOleObject, единственным параметром которой является имя класса. Например, чтобы подключиться к запущенному приложению MS Word необходмо выполнить:

MyExcel:=GetActiveOleObject('Word.Application')

Соответственно, чтобы не гадать запущена или не запущена та или иная программа пакета MS Office достаточно воспользоваться связкой двух функций:

try
  MyWord:=GetActiveOleObject('WordApplication');
except
  MyWord:=CreateOleObject('Word.Application');
end;

Для того, чтобы открыть уже имеющийся документ Word необходимо воспользоваться методом Open объекта Documents, например так:

MyWord.Documents.Open('myword.doc');

После того как документ открыт, Вы можете его редактировать, изменять текст, параметры страницы и т.д., но сегодня нам это не важно. Главное сегодня — научиться работать с объектами. И с этого момента начинается решение первой задачи.

2. Как работать с объектом Excel, внедренном в документ Word

Каждый документ Word имеет коллекцию Shapes, которая позволяет добавлять в документ объекты, созданные и отображаемые с помощью программ-серверов OLE (OLE-серверов). OLE-объекты в документах Word могут отображаться также, как они отображаются в приложениях, предназначенных для их создания и редактирования. Все наверно пользовались редактором формул Math Type? Вот вам простой OLE-сервер. Добавляете OLE-объект формулы  в документ — открывается окно Math Type где вы вводите то, что хотите увидеть и потом формула отображается в документе Word.

Другое дело, когда Вы пробуете вставить в документ Word, например файл mp3. В этом случае объект будет отображен в документе в виде ярлыка, но, тем не менее будет внесен в коллекцию Shapes и до него можно будет добраться из Delphi.

insert_objectТеперь попробуем посмотреть как выглядит добавление OLE-объектов. В простейшем случае Вы открываете Word, создаете документ и выбираете «Правка — Вставить — Объект» и перед Вами открывается окно с перечнем всех OLE-объектов, которые Вы можете использовать в документе. Выбираете объект, вставляете в документ — работаете. Обратите внимание на рисунок — в окне на рисунке как раз отображены всевозможные объекты нашего с Вами исследования.

Для того, чтобы вставить OLE-объект в документ Word из Delphi необходимо воспользоваться методом AddOleObject коллекции Shapes, который имеет следующий вид:

Shapes.AddOleObject(ClassType, FileName, LinkToFile, DisplayAsIcon, IconFileName, IconIndex, IconLabel, Range)

ClassType — имя, используемое для включения указанного объекта OLE. Например, чтобы вставить в документ Word диаграмму Excel следует использовать

для добавления листа Excel, соответственно:

и так далее. В принципе ничего сложного нет — вставить можно, что угодно, хоть exe-файл :)

FileName — имя файла, из которого должен быть создан объект. Если этот аргумент опущен, то используется текущая папка. Вы должны указать либо ClassType либо  FileName, но никак не одновременно оба параметра.

LinkToFile True для того, чтобы связать OLE-объект с файлом, из которого он был создан. False, чтобы сделать объект OLE-объект независимым от копии файла, т.е. включить объект в документ Word. Если Вы определили значение для ClassType, аргумент LinkToFile должны быть ложными. Значение по умолчанию False.

DisplayAsIcon True для отображения объекта OLE в виде значка. Значение по умолчанию False.

IconFileName — Файл, который содержит значок для отображения объекта OLE.

IconIndex -индекс иконки отображения из IconFileName. Значение по умолчанию — ноль.

IconLabel — подпись к иконке объекта.

Range — диапазон,  где объект OLE будет размещен в тексте. Объект OLE заменяет выбранный диапазон. Если этот аргумент опущен, объект вставляется автоматически (в текущую позицию курсора в документе).

Давайте теперь продемонстрируем использование этого метода на практике и, заодно, приготовим плацдарм для дальнейшей работы. Рассмотрим как можно вставить чистый лист Excel в документ Word. Причем вставим лист в нужные нам координаты и зададим ему (листу) длину и ширину:

var MyWord: OLEVariant;
  begin
    MyWord:=CreateOleObject('Word.Application');  
    MyWord.Visible:=true;
    MyWord.Documents.Open(doc);
    MyWord.ActiveDocument.Shapes.AddOLEObject(ClassType:='Excel.Sheet',Left:=10, Top:=10, Width:=400, Height:=300);
  end;

Как видите, вместо того, чтобы указать объект Range мы просто расписали его параметры Left, Top, Width и Height. После выполнения этих операций в документе doc аккурат в верху страницы вставиться лист Excel.

Теперь, когда лист вставлен, можно приступать к дальнейшему изучению «глубин» OLE-серверов Microsoft.

Создадим новую переменную, в которой будем хранить ссылку на OLE-объект.

и сразу получим ссылку на наш лист Excel в Word’е:

MyOLE:=MyWord.ActiveDocument.Shapes.Item(1);

Так будет проще разбираться и избавит нас от лишней писанины.

Представим себе, что мы ничего абсолютно не знаем про то, что лежит в MyOLE. Знаем только то, что это элемент из коллекции Shapes и все. Как определить, что мы получили ссылку именно на объект Excel, а не на автофигуру или, ещё хуже, не на файл mp3?

Для того, чтобы получить всю необходимую информацию об OLE-объекте достаточно обратиться к объекту MS Word под названием OLEFormat.

OLEFormat имеет следующие свойства:

Свойство Описание
Application Возвращает имя приложения к которому относится объект. В нашем случае вернет «Microsoft Word»
ClassType Возвращает или устанавливает тип класса для указанного объекта OLE, фотографии или поля.
Creator Возвращает 32-битное целое число, которое указывает на приложение в котором был создан объект.
DisplayAsIcon True, если указанный объект отображается в виде значка. Свойство для чтения/записи
IconIndex Возвращает или устанавливает индекс иконки, используемой если DisplayAsIcon True.
IconLabel Возвращает или устанавливает подпись к иконке OLE-объекта.
IconName Возвращает или устанавливает файл программы, в которой хранится икона для объекта OLE.
IconPath Возвращает путь к файлу, в котором хранится иконка для объекта OLE
Label Возвращает строку, которая используется, чтобы определить часть исходного файла для связывания объектов
Object Возвращает объект, который представляет собой объект верхнего уровня интерфейса указанного объекта OLE
Parent Возвращает объект, который представляет собой родительский объект указанного объекта OLEFormat
ProgID Возвращает программный идентификатор (ProgID) для указанного объекта OLE.

Теперь, используя эти свойства, попробуем получить всю необходимую нам информацию об OLE-объекте.

Вызовем последовательно свойства ClassType и ProgID:

ShowMessage(MyOle.OLEFormat.ClassType);
ShowMessage(MyOle.OLEFormat.ProgID);

В моем случае, результатом выполнения операций были две одинаковых строки «Excel.Sheet.12» Так как у меня установлен Office 2007 то версия 12, что и отразилось в сообщениях. У Вас это могут быть 10, 11 или как у меня 12 версии. С помощью номера версии можно будет определять — возможно ли в принципе изменять такие объекты на машине пользователя или нет.

Идем дальше. Итак, мы определили, что объект представляет собой лист Excel. Как получить доступ к Excel? И причем сделать это так, чтобы можно было наш OLE-объект изменить?

Обратимся к свойству Object. Согласно описанию, свойство должно вернуть нам ссылку на объект верхнего уровня. Следовательно, применительно к нашей ситуации — это будет ссылка на объект Excel. Чтобы убедиться в сказанном, сделаем так:

ShowMessage(MyOle.OLEFormat.Object.Application.Name);

то есть получим имя приложения в котором был создан объект. В результате получим сообщение в виде строки «Microsoft Excel«.

Ну, а теперь развязка вопроса — используя ссылку на Excel попробуем написать что-нибудь на листе, например, избитую фразу «Hello World!»:

MyOle.OLEFormat.Object.Application.ActiveSheet.Range['A1'].Value:='Hello World!';

Можете проверить — в ячейку А1 запишется строка. Здесь следует обратить внимание на то, что при записи в Excel мы не использовали свойства ActiveWorkBook, которое обычно предшествует свойству ActiveSheet. Все дело в том, что среди объектов OLE Office нет такого OLE-объекта — вставляется только лист либо диаграмма. По сути диаграмма — это два листа Sheet где на одном находится сам график, а на втором — данные к нему.

Вот таким простым и достаточно понятным способом можно добавлять, изменять и удалять OLE-объекты. Кстати, на досуге можете потренироваться вставлять, активировать, редактировать сразу несколько различных OLE-объектов — принцип работы тот же. Получаете Object и используете его функции.

3. Как работать с документом Word, внедренным в Excel.

Надо сказать, что разработчики в Microsoft весьма неплохо потрудились, чтобы запутать бедных разработчиков :).  В начале все просто — как в Word. Есть Shapes у которого в свою очередь есть метод AddOLEObject, с практически теме же параметрами.

Далее, по логике вещей, у Shapes должно быть свойство-объект OLEFormat. Проверяем — действительно есть, но…свойства другие, точнее одно из свойств другое, а большинства вообще нет. Но, мы люди не гордые — будем управляться с тем, что есть:

Свойство Описание
Application При использовании без классификатора объектов, это свойство возвращает объект приложения, представляющий приложение Microsoft Excel.
При использовании с объектом Qualifier, это свойство возвращает объект приложения, которое использовалось для создания объекта
Object Возвращает OLE Automation объект ассоциированный с OLE объектом
Parent Возвращает объект, который представляет собой родительский объект указанного объекта OLEFormat
progID Возвращает программный идентификатор (ProgID) для указанного объекта OLE.

Как видите свойств не много. Главное, что осталось свойство Object — вот его мы и попробуем использовать в своих корыстных целях.

За что следует, наверное, сказать спасибо разработчикам Excel, так это за то, что они предусмотрели сразу объект OLEObjects предоставляющий нам в распоряжение все OLE-объекты листа. Используя этот объект мы минуем использование Shapes. Например так:

MyExcel.ActiveWorkBook.ActiveWorkSheet.OLEObjects.Count

Мы получаем число OLE-объектов документа.

MyExcel.ActiveWorkBook.ActiveWorkSheet.OLEObjects(1)

соответственно даст доступ к первому из OLE-объектов документа, а уж с ним-то нам и предстоит работать. Итак, рассмотрим следующую задачку: необходимо вставить в документ Excel пустой документ Word и написать в нем любую строку.

Чтобы не повторяться в применениях метода — вставим в Excel уже готовый документ Word из файла:

...
 
MyExcel.ActiveWorkBook.ActiveSheet.OLEObjects.Add(FileName:=doc, Left:=10, Top:=10, Width:=300, Height:=300);
MyOLE:=MyExcel.ActiveWorkBook.ActiveSheet.OLEObjects.item(1);
MyOLE.Activate;
ShowMessage(MyOle.ProgID); //убедимся, что объект относится к Word
ShowMessage(MyOle.Object.Application.Name); //запросим имя приложения
MyOle.Object.Application.ActiveDocument.Range.InsertAfter('Привет');
....

Обратите внимание, в данном случае мы использовали для работы с OLE-объектом не Shapes, а OLEObjects. Попробуйте воспроизвести те же самые действия как в случае работы с Excel из Word, т.е. воспользоваться свойством Object у объекта ObjectFormat. Думаю Вы будите «приятно» удивлены, т.к. в результате запроса имени приложения Вам вернется не Word как ожидалось, а Excel — следовательно работать с OLE-объектом становится невозможно.

Также следует отметить, что прежде, чем приступать к редактированию OLE-объекта, следует его предварительно активировать.

Вот так можно работать с Excel из Word и с Word из Excel и при этом не выходить из Delphi :). Ну, а для чего это использовать — решать Вам. Я только показал Вам возможности работы в Delphi с программами Word и Excel.

Книжная полка

Название:Разработка приложений Microsoft Office 2007 в Delphi

Описание Описаны общие подходы к программированию приложений MS Office. Даны программные методы реализации функций MS Excel, MS Word, MS Access и MS Outlook в среде Delphi.

купить книгу delphi на ЛитРес

0
0
голоса

Рейтинг статьи

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

Понравилась статья? Поделить с друзьями:
  • Ole objects in excel
  • Ole links in word
  • Ole link in word
  • Ole idispatch exception code 0 from microsoft excel
  • Ole excel что это такое