Понедельник, 18.12.2017, 21:31
Приветствую Вас Гость | RSS

DELPHI Report

Каталог статей Delphi Report

Главная » Статьи » MS Office (MS Word, MS Excel ) » MS Word

Пример создания документа Word из Delphi
Пример создания документа Word из Delphi

Создадим простую форму с Button и DBGrid.




Поставим задачу – печатать в наш отчет содержимое DBGrid при нажатии на кнопку. Это бывает удобно, поскольку часто в DBGrid отправляется уже отработанная для пользователя информация, которая может подойти и для отчета. Т.о. возможно не будет возникать необходимость в предварительной подготовки данных и все сведется к простому коду. Для этого воспользуемся модулем MyWord. Код нажатия на клавишу «Печать отчета» выглядит следующим образом:

 

uses MyWord;

 

procedure TForm1.Button2Click(Sender: TObject);

var

table:integer;

begin

if CreateWord then begin

 VisibleWord(false);

 AddDoc;

 Table1.DisableControls;

 WordTableAddFromDBGrid(DBGrid1,true,table);

 VisibleWord(true);

 Table1.EnableControls;

 end;

end;

 

Сначала мы «создали» Word с помощью CreateWord, затем добавили документ AddDoc и добавили нашу таблицу. Обратите внимание, что видимым Word мы сделаем после добавления таблицы – это сократит и без того большое время работы. Особенно необходимо следить, что бы Word не оставался невидимым или не работал в фоновом режиме, когда нам это не нужно, это может занимать много памяти. Для завершения работы используйти CloseWord

 

С помощью того же модуля можно сохранить документ в файл

SaveDocAs('1.doc');


Аналогично делается, когда исходная информация содержится в StringGrid, для этого используйте procedure GetStringGridInTable


Категория: MS Word | Добавил: delphi (31.01.2009)
Просмотров: 24107 | Комментарии: 12 | Рейтинг: 3.8/12
Всего комментариев: 12
0
12  
Помогите пожалуйста

0
11  
Все замечательно раюотает..Спасибо.А как что бы в начале таблицы был текст который мне нужен..

0
10  
подскажите, а как удалить столбцы из таблицы?

9  
у меня нету MyWord
где его взять?

8  
Скажите пожалуйста, что такое Table1? У меня ругается.
[Error] Unit1.pas(278): Undeclared identifier: 'table1'

5  
Воспользовалась Вашим примером. Все получилось. Только в конце таблицы он вставляет по средине страницы число "32". от куда оно и как его убрать? Метод FindAndPasteTextDoc не находит его.
Спасибо.

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

7  
Спасибо, что откликнулись.
Модуль скачала с сайта и ничего в нем не меняла. Текст используемый мною следующий:

procedure WordTableAddFromDBGrid(DBGrid: TDBGrid; CollSize: boolean;
var table: integer);
var
i, j, Col, Row, ColWidth: integer;
S: string;
begin

Col := DBGrid.Columns.Count;
Row := DBGrid.DataSource.DataSet.RecordCount + 1;
// SetTextToDoc(DBGrid.Columns.Items[0].Title.Caption,true);
CreateTable(Row, Col, table);

if CollSize then
ColWidth := DBGrid.Columns.Items[0].Width;
// W.Selection.Tables.Item(Table).Columns.Item(1).SetWidth(ColumnWidth:=ColWidth,Rul erStyle:=wdAdjustNone);
For j := 0 To Col - 1 Do
begin
S := DBGrid.Columns.Items[j].Title.Caption;
SetWordTablesCellValue(table, 1, j + 1, S);
if CollSize then
ColWidth := DBGrid.Columns.Items[j].Width;
// W.Selection.Tables.Item(Table).Columns.Item(j+1).
// SetWidth(ColumnWidth:=ColWidth,RulerStyle:=wdAdjustNone);
end;
DBGrid.DataSource.DataSet.First;
For i := 1 To Row - 1 Do
begin
For j := 0 To Col - 1 Do
SetWordTablesCellValue(table, i + 1, j + 1,
DBGrid.Columns.Items[j].Field.AsString);
DBGrid.DataSource.DataSet.Next;
end;
DBGrid.DataSource.DataSet.First;
W.ActiveDocument.Tables.Item(table).AutoFitBehavior(wdAutoFitContent);
end;

Ни в этой процедуре, ни в других, которые используются в этой, ничего не увидела.
Число 32 возникает прям сразу после таблицы.
Кстати, еще использую процедуру getstringgridintable для вставки таблицы с данными из stringgrid. Так при ее использовании после таблицы появляется 3232.
Единственное общее у этих процедур это CreateTable. Там вроде ничего нет. А еще там есть вставка нового абзаца. Может он пробел (' ') как то перешифровывает.
Ответ: Да, по всей видимости вы правы, возможно он так интерпретирует знак пробела или переноса или что-то. Попробуйте пойти по шагам и поймать момент, когда происходит вставка 3232 - тогда вы поймете в чем проблема!

3  
Слушай....А как сделать форматный текст??? Ну если мне отчет красивый надо сделать по определенному шаблону.....

4  
Используй например SetFont(wdStyleHeading3);

2  
огромное мега СПАСИБО!!!))))

1  
Спасибо за пример)))

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Меню сайта
Google
Форма входа
Категории раздела
MS Excel [22]MS Word [18]
Поиск
Друзья сайта
Статистика
Copyright MyCorp © 2017