Создание таблицы в Word с помощью C++Builder

  Создание в Word листа, по типу конверта:
Variant World = CreateOleObject("Word.Application");
World.OlePropertyGet("Documents").OleFunction("Add");
World.OlePropertySet("Visible", true);
Variant Dialog = World.OlePropertyGet("Dialogs").OleFunction("Item", 173);
String remindex="111",remstreet="222";
Dialog.OlePropertySet("AddrText", OleVariant(remindex+'\n'+remstreet));
Dialog.OleProcedure("Show");
  В общем, как работать с Word при помощи OLE-интерфейсов?
  К Word’у, как и к другим OLE-ориентированным приложениям, в основном, прилагаются VBA справки, в которых изложена иерархия объектов Word, их методы и свойства, с помощью которых и осуществляется управление распределёнными приложениями.
  Давайте рассмотрим на каком-нибудь простом примере, как сформировать в Worde, скажем, таблицу.

  Для начала откроем Word, и включим запись макроса. (Сервис–>макрос->начать запись)
НИЧЕГО ЛИШНЕГО НЕ РИСУЕМ И НИГДЕ НЕ КЛАЦАЕМ!!!
  И рисуем только таблицу. Затем останавливаем запись макроса (Сервис–>макрос->остановить запись). Далее входим в режим VBA (ALT+F11), и смотрим записанный макрос. Что у нас примерно должно получится:
    ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=2, NumColumns:= _

        2, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _

        wdAutoFitFixed

    With Selection.Tables(1)

        If .Style <> "Сетка таблицы" Then

            .Style = "Сетка таблицы"

        End If

        .ApplyStyleHeadingRows = True

        .ApplyStyleLastRow = True

        .ApplyStyleFirstColumn = True

        .ApplyStyleLastColumn = True

    End With
Здесь мы видим иерархию объектов ActiveDocument - Tables иерархию любых объектов в Word и их свойства можно увидеть во встроенной справке VBA, которая находится примерно в Microsoft Word VB Reference -> Objects, где в алфавитном порядке будут находиться описания всех Word объектов.
  В общем, тот, кто хочет научиться управлять Word’ом (или любым другим офисным приложением(или не офисным), поддерживающим работу через OLE) с помощью интерфейсов, должен сначала научиться пользоваться справкой VBA(или ежели справки нет – знать основные интерфейсы и их методы), соответствующей данному приложению.
  Итак, пробуем создать это приложение.
  Для начала подключим необходимые библиотеки:
#include sysvari.h
#include ComObj.hpp
  Эти библиотеки необходимы для работы с OLE.
  Далее создаём главный интерфейс:
  Variant Word = CreateOleObject("Word.Application");
  Как видите - здесь присутствует переменная Word типа Variant.
  Переменная типа Variant – это переменная, которая может быть различных типов и тип её может изменяться динамически.
  Чтобы это понять рассмотрим простоё пример:
int i =7;
AnsiString S = "Prewed !!!";

app = i;

ShowMessage(app);

app=S;

ShowMessage(app);

//Сам тип вариант мы подробно рассматривать не будем. Кому интересно пусть читают книжки по С++ Builder.
  Как видно из примера, когда к переменной app присвоили значение i , она, как и ожидалось приняла значение int, а после второго присваивания тип AnsiString.
  В нашем же примере ей присвоен тип ОЛЕ Объекта.
  Далее – вводим переменную типа Variant, которая будет объектом типа Table. Итак, добираемся до объекта типа Table:
Variant Table = Word.OlePropertyGet("Documents").OlePropertyGet("Tables");
  Функция OlePropertyGet предназначена для возвращения значений из ОЛЕ-приложений (объектов, параметров….).
В этой строке переменная Table присваивается к объекту типа "Tables". Далее у нас описана функция добавления таблицы:
 
Add Range:=Selection.Range, NumRows:=2, NumColumns:= _

        1, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _

        wdAutoFitFixed
  Откроем функцию Add элемента «Tables» в справке VB.
  Мы видим:
expression.Add(Range, NumRows, NumColumns, DefaultTableBehavior, AutoFitBehavior)
Примерный перевод:
  Range - Требует объекта типа «Range». Диапазон, где Вы хотите, чтобы появилась таблица. Таблица заменяет диапазон, если диапазон не сокращен.
  NumRows - Требует тип Long. Количество строк в таблице.
  NumColumns - Требует тип Long. Количество столбцов в таблице.
  DefaultTableBehavior - Устанавливает значение, которое определяет, изменяет ли Microsoft Word автоматически размеры ячеек в таблицах, чтобы соответствовать содержанию ячеек.
Может быть любой следующих констант: wdWord8TableBehavior (заблокированный) или wdWord9TableBehavior (допускаемый). Заданная по умолчанию константа - wdWord8TableBehavior.
AutoFitBehavior - Устанавливает правила для того, как Word устанавливает размеры таблиц. Может являться одной из следующих WdAutoFitBehavior констант:
wdAutoFitContent, wdAutoFitFixed, или wdAutoFitWindow. Если DefaultTableBehavior установлен в wdWord8TableBehavior, этот параметр игнорируется.

  В C++Builder это будет так:
 
Variant Word = CreateOleObject("Word.Application");

Word.OlePropertySet("Visible", true);

//Делаем наш документ видимым.

Variant Doc = Word.OlePropertyGet("Documents").OleFunction("Add");

//Создаём пустой документ.

Variant Range =Word.OlePropertyGet("Selection").OlePropertyGet("Range");

//Диапазон, где будет находится наша таблица.

Variant Tables=Doc.OlePropertyGet("Tables").OleFunction("Add",Range,2,2,1,0);

//Собственно создание таблицы.

Word.OleProcedure("Quit");

//Диалог закрытия документа.
  Значения констант wdWord9TableBehavior и wdAutoFitFixed я взял из Борландского файла "word_xp.h", который находится в каталоге C++Builder по адресу: "Borland\CBuilder6\Include\Vcl".
Откройте этот файл в блокноте и пользуйтесь поиском необходимой константы.
Параметры таблицы
 
      .ApplyStyleHeadingRows = True
      .ApplyStyleLastRow = True
      .ApplyStyleFirstColumn = True
      .ApplyStyleLastColumn = True
  Можно опустить. Здесь мы не будем изменять свойства таблицы. В этом примере мы только пытаемся её создать.

Информация о статье "Создание таблицы в Word с помощью C++Builder"

Автор Koss | Сайт http://devoid.com.ua | Добавлена 2 Сентября 2007 | Просмотрели 8790 раз

  • Digg it!
  • Delicious
  • +МоёМесто.ru
  • Добавить страницу к Мистеру Вонгу
  • Добавить страницу к Мистеру Вонгу

Комментарии КОММЕНТАРИИ

Комментариев еще нет.

Зарегистрируйтесь или выполните Вход для того чтобы оставлять комментарии