Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Автоматизация WORD.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
557.06 Кб
Скачать

2.6 Работа с диаграммами.

2.6.1 Копирование диаграммы из рабочей книги Excel.

Диаграмму возьмем из созданной в Ч 1. рабочей книге Excel (документ с диаграммой сохранен под именем amount.xls в текущей директории). Порядок работы с документом и диаграммой схож с описанным в Ч 1. - создаем объект "Excel.Application", и рабочую книгу. Но книгу не добавляем в объект, а открываем существующую.

AnsiString vAsCurDir1=vAsCurDir+"\\amount.xls";

Далее активируем текущую страницу книги (а их в книге одна) выбираем текущий объект диаграммы (диаграмма тоже одна) и выполняем копирование объекта в буфер обмена.

vVarSheet.OlePropertyGet("ChartObjects").

OlePropertyGet("Item",1).OleProcedure("Copy");

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

При заполнении таблицы последней была заполнена левая ячейка в нижнем ряду и курсор находится там - свойство "Selection". Получим положение курсора и сдвинем его на две строчки вниз (wdLine = 5).

Variant v = vVarApp.OlePropertyGet("Selection");

v.OleFunction("MoveDown",5,2);

Здесь константы определяющие тип сдвига:

  • wdCharacter = 1;

  • wdWord = 2;

  • wdSentence = 3;

  • wdParagraph = 4;

  • wdLine = 5;

  • wdStory = 6;

  • wdScreen = 7;

  • wdSection = 8;

  • wdColumn = 9;

  • wdRow = 10;

  • wdWindow = 11;

  • wdCell = 12;

  • wdCharacterFormatting = 13;

  • wdParagraphFormatting = 14;

  • wdTable = 15;

  • wdItem = 16.

Осталось вставить диаграмму в документ

v.OleProcedure("Paste");

Результат работы представлен на рисунке 2.1. Полный текст кода, реализующего вставку диаграммы, представлен ниже.

void __fastcall TForm1::Button2Click(TObject *Sender)

{

Variant vVarAppEx,vVarBooks,vVarBook,vVarSheet,vVarRange;

if(!fStart) return;

//Создаем объект Excel.Application

vVarAppEx=CreateOleObject("Excel.Application");

vVarAppEx.OlePropertySet("Visible",true);

vVarBooks=vVarAppEx.OlePropertyGet("Workbooks");

vVarAppEx.OlePropertySet("SheetsInNewWorkbook",1);

AnsiString vAsCurDir1=vAsCurDir+"\\amount.xls";

vVarBooks.OleProcedure("Open",vAsCurDir1.c_str());

vVarBook=vVarBooks.OlePropertyGet("Item",1);

vVarSheet=vVarBook.OlePropertyGet("Worksheets",1);

vVarSheet.OleProcedure("Activate");

//Копируем диаграмму в буфер обмена

vVarSheet.OlePropertyGet("ChartObjects").

OlePropertyGet("Item",1).OleProcedure("Copy");

//Перенесем диаграмму в документ Word

vVarParagraphs.OleProcedure("Add");

vVarParagraphs.OleProcedure("Add");

//Выбираем ряд в параграфе

vVarParagraph=vVarParagraphs.OleFunction("Item",11);

vVarParagraph.OlePropertySet("Alignment",1);

Variant v = vVarApp.OlePropertyGet("Selection");

v.OleFunction("MoveDown",5,2);

//Вставляем диаграмму

v.OleProcedure("Paste");

//Запоминаем результат

vAsCurDir1=vAsCurDir+"\\test.doc";

vVarDoc=vVarDocs.OleFunction("Item",1);

vVarDoc.OleProcedure("SaveAs",vAsCurDir1.c_str());

}

2.7 Некоторые другие возможности.

//Выведет Microsoft Word

Label1->Caption=vVarApp.OlePropertyGet("Caption");

//Добавит к имени документа слово Wlad - не к имени файла

vVarApp.OlePropertySet("Caption","Wlad");

//Откуда запущен Application(Word), можно и установить

Label1->Caption=vVarApp.OlePropertyGet("Path");

//Версия приложения, например 9.0

Label1->Caption=vVarApp.OlePropertyGet("Version");

//Установить активный принтер

vVarApp.OlePropertySet("ActivePrinter","Epson LQ-100 ESC/P 2 on LPT1:");

//Имя активного принтера - будет выведено, если установлен в системе

Label1->Caption=vVarApp.OlePropertyGet("ActivePrinter");

//Имя активного рпинтера

Label1->Caption=vVarApp.OlePropertyGet("ActivePrinter");

//В режиме не свернутого окна и не развернутого

//во весь экран можно получить или установить

//Размер окна

vVarApp.OlePropertySet("WindowState",0);

Label1->Caption=vVarApp.OlePropertyGet("Height");

vVarApp.OlePropertySet("Left",100);

vVarApp.OlePropertySet("Width",400);

vVarApp.OlePropertySet("Top",100);

vVarApp.OlePropertySet("Height",400);

Label2->Caption=vVarApp.OlePropertyGet("Height");

//Имя пользователя запустившего процесс можно получит и учтановить

Label1->Caption=vVarApp.OlePropertyGet("UserName");

vVarApp.OlePropertySet("UserName","Petr");

Label2->Caption=vVarApp.OlePropertyGet("UserName");

//Аналогично UserAddress

Label1->Caption=vVarApp.OlePropertyGet("UserAddress");

vVarApp.OlePropertyGet("System");

vVarApp.OlePropertyGet("FontNames");

//Изменить ширину столбца таблицы

vVarTable=vVarDoc.OlePropertyGet("Tables").OleFunction("Item",1);

Variant v=vVarTable.OlePropertyGet("Columns");

//Устанавливаем ширину первого столбца

v.OleFunction("Item",1).OlePropertySet("Width",50);

//А так сразу всех

Variant v=vVarTable.OlePropertyGet("Columns");

v.OlePropertySet("Width",25);

//Добавляем строки и столбцы

vVarTable=vVarDoc.OlePropertyGet("Tables").

OleFunction("Item",1);

//Добавить столбец справа

Variant v=vVarTable.OlePropertyGet("Columns").

OleFunction("Item",1).OleFunction("Select");

vVarAppWord.OlePropertyGet("Selection").OleProcedure("InsertColumnsRight");

//Добавить столбец слева

v=vVarTable.OlePropertyGet("Columns").

OleFunction("Item",4).OleFunction("Select");

vVarAppWord.OlePropertyGet("Selection").OleProcedure("InsertColumns");

//Строку Выше

v=vVarTable.OlePropertyGet("Rows").

OleFunction("Item",2).OleFunction("Select");

vVarAppWord.OlePropertyGet("Selection").OleProcedure("InsertRowsAbove",1);

//Строку Ниже

v=vVarTable.OlePropertyGet("Rows").

OleFunction("Item",4).OleFunction("Select");

vVarAppWord.OlePropertyGet("Selection").OleProcedure("InsertRowsBelow",1);

//Выделить все

v=vVarTable.OlePropertyGet("Columns").OleFunction("Select");

//Обнулить

vVarAppWord.OlePropertyGet("Selection").OleProcedure("Delete");

//Вращаем лист

vVarDoc=vVarDocs.OleFunction("Item",1);

//И сделаем его Альбомным

vVarDoc.OlePropertyGet("PageSetup").

OlePropertySet("Orientation",1);

//Как Выйти из таблицы

//Зайдем в таблицу

vVarCell=vVarTable.OleFunction("Cell",1,1);

vVarParagraphs=vVarDoc.OlePropertyGet("Paragraphs");

vVarParagraphs.OleProcedure("Add");

vVarParagraphs.OleProcedure("Add");

vVarParagraphs.OleProcedure("Add");

//Выходим из таблицы

//Сдвинем курсор на 50 параграфов вниз

//Ячека таблицы считается как параграф.

//Четверка - сдвиг на параграфы.

vVarAppWord.OlePropertyGet("Selection").

OleProcedure("MoveDown",4,50);

//Или по линиям 5

vVarAppWord.OlePropertyGet("Selection").

OleProcedure("MoveDown",5,7);

//Как повернуть один лист в документе

AnsiString str;

vVarParagraphs=vVarDoc.OlePropertyGet("Paragraphs");

vVarParagraph=vVarParagraphs.OleFunction("Item",1);

vVarParagraphs.OleProcedure("Add");

str="Параграф 1";

vVarParagraph.OlePropertyGet("Range").

OlePropertySet("Text",str.c_str());

vVarParagraphs.OleProcedure("Add");

vVarParagraph=vVarParagraphs.OleFunction("Item",2);

str="Параграф 2";

vVarParagraph.OlePropertyGet("Range").

OlePropertySet("Text",str.c_str());

vVarParagraphs.OleProcedure("Add");

//Берем нужный параграф

vVarParagraph=vVarParagraphs.OleFunction("Item",3);

vVarRange = vVarParagraph.OlePropertyGet("Range");

vVarRange.OleFunction("Select");

//Selection.InsertBreak Type:=wdSectionBreakNextPage

vVarAppWord.OlePropertyGet("Selection").OleProcedure("InsertBreak",2);

vVarParagraphs.OleProcedure("Add");

//Берем нужный параграф

vVarParagraph=vVarParagraphs.OleFunction("Item",4);

vVarRange = vVarParagraph.OlePropertyGet("Range");

vVarRange.OleFunction("Select");

str="Параграф 4";

vVarParagraph.OlePropertyGet("Range").

OlePropertySet("Text",str.c_str());

vVarParagraphs.OleProcedure("Add");

vVarParagraphs.OleProcedure("Add");

vVarParagraph=vVarParagraphs.OleFunction("Item",6);

vVarRange = vVarParagraph.OlePropertyGet("Range");

vVarRange.OleFunction("Select");

vVarParagraph.OlePropertySet("Alignment",1);

vVarDoc.OlePropertyGet("Tables").

OleProcedure("Add", vVarRange, 2, 9,1,1);

vVarParagraphs.OleProcedure("Add");

vVarRange = vVarParagraph.OlePropertyGet("Range");

vVarRange.OleFunction("Select");

//Вращаем лист

//И сделаем его Альбомным

vVarRange.OlePropertyGet("PageSetup").OlePropertySet("Orientation",1);

//Изменяем межстрочный интервал абзаца по отношению к следующему за ним

vVarParagraph=vVarParagraphs.OleFunction("Item",2);

vVarParagraph.OlePropertyGet("Range").OleFunction("Select");

vVarApp.OlePropertyGet("Selection").OlePropertyGet("ParagraphFormat").

OlePropertySet("LineSpacing", 25);

//Изменить формат листа, например сделать его A3

vVarDoc.OlePropertyGet("PageSetup").OlePropertySet("PageWidth",29.7*28.35);

vVarDoc.OlePropertyGet("PageSetup").OlePropertySet("PageHeight",42*28.35);

//Работа с закладками

//Этот материал прислал специально для сайта Москальченко В.А. (moskalchenko@kubkredit.com.ru).

//Он же сообщил, что решение взято на форуме ProgZ.ru и принадлежит участнику форума Rius.

AnsiString BoolMarkName = "www";

Variant Selection = vVarApp..OlePropertyGet("Selection");

Selection.OleFunction("GoTo", 4294967295, 0, 0, BookmarkName.c_str());

//4294967295 значение wdGoToBookmark из MSWORD.IDL

//Станем документа

AnsiString BookmarkName ="\\StartOfDoc";

Variant Selection = vVarAppWord.OlePropertyGet("Selection");

Selection.OleFunction("GoTo", 4294967295, 0, 0, BookmarkName.c_str());

//В продолжение "Станем документа" замена текста в документе "Дмитрий" на "Иван"

Variant Find = Selection.OlePropertyGet("Find");

Find.OleProcedure ("Execute","Дмитрий"/*Текст, который будем менять*/,false/*учитывать регистрe*/,

false/*Только полное слово*/,false/*Учитывать универсальные символы*/,false/*Флажок Произносится как*/,

false/*Флажок Все словоформы*/,true/*искать вперед*/,1/*Активация кнопки Найти далее*/,

false/* Задание формата */,"Иван"/*На что заменить*/,2/*Заменить все*/);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]