2.5.5.7. Импорт данных в Microsoft Excel и Microsoft Word
Общеизвестно, что текстовый процессор MS Word и табличный процессор MS Excel имеют огромные возможности и постоянно совершенствуются. Они получили очень широкое распространение, и, самое главное, они ‑ очень удобный инструмент для создания текстовых документов любой сложности.
В качестве примеров ниже рассмотрены несколько функций, которые позволят запустить MS Word, создать документ, изменить документ (записать текст), сохранить документ и закрыть MS Word. Для создания объекта и его использования применяем переменную W типа Variant и библиотеку ComObj.
Рассмотрим следующий фрагмент кода:
uses ComObj;
var W:variant;
Function CreateWord:boolean;
begin
CreateWord:=true;
try
W:=CreateOleObject('Word.Application');
except
CreateWord:=false;
end;
End;
Для получения доступа к объекту Word.Application в функции CreateWord используем конструктор CreateOleObject ('Word. Application'). Если редактор MS Word не установлен в системе, то будет сгенерирована ошибка, и получится значение функции равное false, если MS Word установлен, и объект будет создан, то получится значение функции равное true.
Эта функция создает объект W, свойства и методы которого можно использовать в дальнейшем. Если выполнить функцию CreateWord, то MS Word будет запущен, но не появится на экране, потому что по умолчанию он запускается в фоновом режиме. Чтобы его активировать (сделать видимым) или деактивировать (сделать невидимым), необходимо использовать свойство Visible объекта W. Оформить это можно в виде функции VisibleWord.
Function VisibleWord (visible:boolean):boolean;
begin
VisibleWord:=true;
try
W.visible:= visible;
except
VisibleWord:=false;
end;
End;
Для создания документа используется объект Documents объекта W. Этот объект имеет метод Add, используя который, и создается новый документ. Пример приведен ниже.
Function AddDoc:boolean;
Var Doc_:variant;
begin
AddDoc:=true;
try
Doc_:=W.Documents;
Doc_.Add;
except
AddDoc:=false;
end;
End;
После создания документа необходимо записать какой-либо текст непосредственно в документ. Для этого используется функция SetTextToDoc:
Function SetTextToDoc(text_: string;InsertAfter_: boolean): boolean;
var Rng_:variant;
begin
SetTextToDoc:=true;
try
Rng_:=W.ActiveDocument.Range;
if InsertAfter_
then Rng_.InsertAfter(text_)
else Rng_.InsertBefore(text_);
except
SetTextToDoc:=false;
end;
End;
В этой функции используется объект Range и его методы InsertAfter и InsertBefore для того, чтобы вставить текст в документ с позиции курсора или до позиции курсора.
После того, как документ создан и в него записан текст, его необходимо сохранить. Для этого используется метод SaveAs объекта ActiveDocument. Функция SaveDocAs использует этот метод и сохраняет документ в заданный файл.
Function SaveDocAs(file_:string):boolean;
begin
SaveDocAs:=true;
try
W.ActiveDocument.SaveAs(file_);
except
SaveDocAs:=false;
end;
End;
Закрыть сохраненный документ можно, используя метод Close объекта ActiveDocument.
Function CloseDoc:boolean;
begin
CloseDoc:=true;
try
W.ActiveDocument.Close;
except
CloseDoc:=false;
end;
End;
Закрыть редактор MS Word можно, используя метод Quit объекта W.
Function CloseWord:boolean;
begin
CloseWord:=true;
try
W.Quit;
except
CloseWord:=false;
end;
End;
Таким образом, можно создать документ, записать в него текст, сохранить документ и отобразить его на экране монитора.
Работа с MS Excel осуществляется аналогичным образом. Самыми необходимыми функциями являются следующие: активизация MS Excel, создание новой книги, открытие ранее созданной книги, отображение книги (книг) и приложения MS Excel, запись информации в ячейку, запись книги на диск и выход (закрытие книги и приложения). Для создания объекта Excel.Application используя переменная E типа Variant и библиотека ComObj.
Доступ к объекту Excel.Application в функции CreateExcel получается с использованием процедуры CreateOleObject ('Excel.Application') стандартной библиотеки ComObj. Если MS Excel не установлен в системе, то будет сгенерирована ошибка и значение функции будет равно false; если MS Excel установлен и объект будет создан, то получится значение функции равное true. Эта функция создает объект E, свойства и методы которого можно использовать в дальнейшем.
uses ComObj, Classes;
var E:variant;
Function CreateExcel:boolean;
begin
CreateExcel:=true;
try
E:=CreateOleObject('Excel.Application');
except
CreateExcel:=false;
end;
end;
End;
Если выполнить функцию CreateExcel, то MS Excel будет запущен, но не будет отображен, потому что по умолчанию он запускается в фоновом режиме. Чтобы его активизировать (сделать видимым) или деактивировать (сделать невидимым), нужно использовать свойство Visible объекта E. Пример оформлен в виде функции VisibleExcel.
Function VisibleExcel(visible:boolean): boolean;
begin
VisibleExcel:=true;
try
E.visible:=visible;
except
VisibleExcel:=false;
end;
End;
Для создания рабочей книги используется метод Add, коллекции Workbooks объекта E. Ниже приведен пример, с помощью которого не только создается новая книга, но и получаеся на нее ссылка
Function AddWorkBook:boolean;
begin
AddWorkBook:=true;
try
E.Workbooks.Add;
except
AddWorkBook:=false;
end;
End;
Чтобы открыть ранее созданную рабочую книгу, используется та же коллекция Workbooks объекта E и метод Open. Пример представлен ниже.
Function OpenWorkBook(file_: string):boolean;
begin
OpenWorkBook:=true;
try
E.Workbooks.Open(file_);
except
OpenWorkBook:=false;
end;
End;
При работе с книгой, желательно иметь возможность добавлять или удалять в ней листы и присваивать им имена. Для работы с листами книги используется коллекция Sheets. Добавить новый лист можно, используя метод Add этой коллекции. Функция AddSheet реализует эту возможность и присваивает новому листу выбранное пользователем имя.
Function AddSheet(newsheet:string):boolean;
begin
AddSheet:=true;
try
E.Sheets.Add;
E.ActiveSheet.Name:=newsheet;
except
AddSheet:=false;
end;
End;
Метод Delete, коллекции Sheets дает возможность удалять созданные листы. При удалении возможно появление диалогового окна MS Excel, которое потребует подтверждения операции. Для отключения диалогового окна MS Excel используется оператор E.DisplayAlerts:=False.
Пример функции для удаления листов.
Function DeleteSheet(sheet:variant):boolean;
begin
DeleteSheet:=true;
try
E.DisplayAlerts:=False;
E.Sheets[sheet].Delete;
E.DisplayAlerts:=True;
except
DeleteSheet:=false;
end;
End;
Обычно книга MS Excel содержит более одного листа. Их количество содержится в свойстве Count коллекции Sheets. Для активации любого листа книги необходимо использовать процедуру Select. Например:
Sheets.Item(a_).Select
Все описанные выше возможности можно реализовать в Delphi как набор отдельных функций. Примеры приведены ниже:
Function CountSheets:integer; {получаем количество листов книги}
begin
try
CountSheets:=E.ActiveWorkbook.Sheets.Count;
except
CountSheets:=-1;
end;
End;
Function GetSheets(value:TStrings):boolean;
// записываем листы книги в value
var a_:integer;
begin
GetSheets:=true;
value.Clear;
try
for a_:=1 to E.ActiveWorkbook.Sheets.Count do
value.Add(E.ActiveWorkbook.Sheets.Item[a_].Name);
except
GetSheets:=false;
value.Clear;
end;
End;
Function SelectSheet (sheet:variant):boolean;
// выбираем лист
begin
SelectSheet:=true;
try
E.ActiveWorkbook.Sheets.Item[sheet].Select;
except
SelectSheet:=false;
end;
End;
После внесения изменений необходимо сохранить рабочую книгу. Для этого используется метод SaveAs коллекции Workbooks или объекта ActiveWorkbook. Функция SaveWorkBookAs реализует эту возможность на Delphi.
Function SaveWorkBookAs(file_:string): boolean;
begin
SaveWorkBookAs:=true;
try
E.DisplayAlerts:=False;
E.ActiveWorkbook.SaveAs(file_);
E.DisplayAlerts:=True;
except
SaveWorkBookAs:=false;
end;
End;
Одновременно может быть открыто несколько книг, в которые вносится или из которых получается информация. Их количество содержится в свойстве Count коллекции WorkBooks.
Активизируется любая книга из списка процедурой Activate:
Windows("Книга1").Activate;
Для закрытия книги используется метод Close коллекции Workbooks или объекта ActiveWorkbook. Функция CloseWorkBook закрывает активный документ.
Function CloseWorkBook:boolean;
begin
CloseWorkBook:=true;
try
E.ActiveWorkbook.Close;
except
CloseWorkBook:=false;
end;
End;
MS Excel закрывается методом Quit объекта Application.
Function CloseExcel:boolean;
begin
CloseExcel:=true;
try
E.Quit;
except
CloseExcel:=false;
end;
End;
Для более подробного изучения возможностей по работе с MS Word и MS Excel следует обратиться к источнику [7]. Здесь же в качестве примера представлены фрагменты процедур по импорту данных в MS Word и MS Excel.
Импорт в MS Word
procedure TFormRez.RzBitBtn6Click(Sender: TObject);
{в раздел uses надо вставить ComObj}
var
WordApp, NewDoc, WordTable: OLEVariant;
iRows, iCols, iGridRows, jGridCols: Integer;
begin
if Rzsavedialog3.Execute=false then exit; { Указываем имя файла Word}
try
WordApp := CreateOleObject('Word.Application'); {запускаем Word}
except
Exit;
end;
NewDoc := WordApp.Documents.Add; {Создаем новый документ в среде Word}
iCols := StringGrid1.ColCount;
iRows := StringGrid1.RowCount;
{Перемнные количества строк и столбцов импортируемой таблицы}
WordTable:=NewDoc.Tables.Add(WordApp.Selection.Range, iRows, iCols); {Формируем заготовку таблицы}
WordTable.Range.Font.Size :=8; {Размер текста символов в таблице 8}
for iGridRows := 1 to iRows do
for jGridCols := 1 to iCols do
WordTable.Cell(iGridRows, jGridCols).Range.Text:=
StringGrid1.Cells[jGridCols - 1, iGridRows - 1];
{заполняем таблицу в Word данными из StringGrid}
WordApp.ActiveDocument.SaveAs(RzSaveDialog3.FileName); {Сохраняем документ под указанным ранее именем}
WordApp.Quit; {Выход из Word}
WordApp := Unassigned;
NewDoc := Unassigned;
WordTable := Unassigned;
end;
Импорт в MS Excel
procedure TFormRez.RzBitBtn2Click(Sender: TObject);
{в раздел uses надо вставить ComObj}
Var XLApp,sheet,colum:variant;
i,j,m,n:integer;
begin
if Rzsavedialog2.Execute=false then exit;{указываем имя файла Excel}
try
XLApp:=CreateOleObject('Excel.Application'); {запускаем Excel}
except
Exit;
end;
XLApp.Workbooks.Add(-4167);{ Создаем рабочую книгу}
XLApp.Workbooks[1].WorkSheets[1].Name:='Результат'; {Создаем рабочий лист с именем Результат}
Colum:=XLApp.Workbooks[1].WorkSheets['Результат'].Columns;
n:=StrToInt(FormHaupt.LabeledEdit4.text);
m:=StrToInt(FormHaupt.LabeledEdit3.text);
{количество строк и столбцов импортируемой таблицы}
for i:=1 to m+1 do Colum:=XLApp.Workbooks[1].WorkSheets['Результат'].Rows;
Colum.columns[1].Font.Bold:=true; {шрифт первого столбца Excel полужирный}
Colum.Rows[1].Font.Bold:=true; {шрифт первой строки Excel полужирный}
Colum.Rows[1].Font.italic:=true; {шрифт первой строки Excel курсив}
Colum.Rows[2].Font.Bold:=true; {шрифт второй строки Excel полужирный}
Sheet:=XLApp.Workbooks[1].WorkSheets['Результат'];
for i:=0 to m do
for j:=0 to n do sheet.cells[j+2,i+1]:=StringGrid1.Cells[i,j]; {копирование данных из Stringgrid}
sheet.cells[1,2]:='Радиус поворота трактора'; {Заголовок таблицы}
{После внесения изменений необходимо сохранить рабочую книгу. Для этого используем метод SaveAs коллекции Workbooks или объекта ActiveWorkbook. Функция SaveWorkBookAs реализует эту возможность на Delphi. Используем E.DisplayAlerts:=False(True) для отключения (включения) диалогового окна подтверждения записи}
XLApp.ActiveWorkbook.SaveAs(RzSaveDialog2.FileName); {Сохраняем Excel под указанным выше именем}
XLApp.Quit; { Выход их Excel}
end;
При необходимости можно аналогичным образом импортировать и другие данные в MS Word и MS Excel.
- Информатика
- Информатика
- 1. Структура пояснительной записки
- 2. Оформление основных разделов
- 2.1. Титульный лист
- 2.2. Бланк заданий
- 2.3. Содержание
- 2.4. Введение
- 2.5. Основные разделы курсовой работы
- 2.5.1. Математическое решение задачи
- 2.5.2. Алгоритмизация вычислительных процессов
- 2.5.3. Таблица идентификаторов
- 2.5.4. Разработка интерфейса пользователя
- 2.5.5. Структура программного приложения
- 2.5.5.1. Падающее и контекстное меню
- 2.5.5.2. Статусная строка
- 2.5.5.3. Структурная обработка исключительных ситуаций
- 2.5.5.4. Динамически подключаемые библиотеки
- 2.5.5.5. Создание анимации
- 2.5.5.6. Вызов внешнего приложения
- 2.5.5.7. Импорт данных в Microsoft Excel и Microsoft Word
- 2.5.5.8. Построение графических зависимостей
- 2.5.5.9. Использование системных диалогов.
- 2.5.5.10. Ввод-вывод данных через внешний файл
- 2.5.5.11. Дополнительные элементы программы
- 2.6. Разработка справочной системы
- 2.6.1. Создание rtf-файла
- 2.6.1.1. Оформление разделов
- 2.6.1.2. Организация поиска по разделам
- 2.6.1.3. Оформление списка ключевых слов
- 2.6.2. Создание файла справочной системы
- 2.6.3. Создание содержания
- 2.6.4. Использование справочной системы в программе
- 2.7. Расчет контрольного примера
- 2.8. Заключение
- 2.9. Список использованных источников информации
- 3. Защита курсовой работы
- 4. Задания для выполнения курсовой работы
- 4.1. Специальность I-37 01 03 – «Тракторостроение»
- 4.2. Специальность I-37 01 04 – «Многоцелевые гусеничные и колесные машины»
- 4.3. Специальность I-37 01 05 – «Городской электрический транспорт»
- Курсовая работа
- «Информатика»
- Реферат
- 25 Стр., 7 рис., 6 табл., 8 источн., 1 прил.