скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

Передача в Word данных и формирование таблицы



Время теряется на переключение проццесов. Чем больше таблица тем хуже. Каждая клетка таблицы это переключение. Сформируйте стороку данных передайте Word (один процесс) затем конвертируйте текст в таблицу (второй процесс) Ниже приведе текст рабочей процедуры, написанны на Delphi 6.0 для компонентов Офиса 97. Успешно работает и с 2000


procedure Spisok_Sotrudnikov2(Name: String); 
var 
{Объявление переменных, для передачи их в качестве формальных параметров в} 
{ сервер автоматизации} 
  Shablon,FileName,Tempo,Separator,NumColumns:OleVariant; 
  i,k : Integer; 
  MyRange : Range;   {Область документа} 
  Tabl : Table;      {Одна таблица} 
  Pars : Paragraphs; {Массив параграфов} 
  Par  : Paragraph;  {Один параграф} 
  S : Array[1..9] of String; 
  Text : WideString; 
  Text1: String; 
begin 
  Screen.Cursor:=crHourGlass; 
{Оформление бегущей линейки} 
  Otchet_Spisok_Sotrudnikov.BitBtn1.Visible:=False; 
  Otchet_Spisok_Sotrudnikov.Gauge1.Visible:=True; 
{Определяем файл шаблона документа и файл для сохранения результата} 
  Shablon:=ExtractFilePath(Application.EXEName)+'Spisok.Doc'; 
  FileName:=ExtractFilePath(Application.EXEName)+'Spisok_Sotrudnikov1.DOC'; 
{Открываем шаблон документа} 
Otchet_Spisok_Sotrudnikov.WordApplication1.Documents.Open(Shablon,EmptyParam 
,EmptyParam,EmptyParam, 
EmptyParam,EmptyParam,EmptyParam,EmptyParam, 
                                  EmptyParam,EmptyParam); 
{Связываем компоненту с существующим интерфейсом} 
Otchet_Spisok_Sotrudnikov.WordDocument1.ConnectKind:=ckAttachToInterface; 
Otchet_Spisok_Sotrudnikov.WordDocument1.ConnectTo(Otchet_Spisok_Sotrudnikov. 
WordApplication1.ActiveDocument); 
{Обязательно отключить проверки орфографии и граматики в Word} 
Otchet_Spisok_Sotrudnikov.WordApplication1.Options.CheckSpellingAsYouType:=f
alse; 
Otchet_Spisok_Sotrudnikov.WordApplication1.Options.CheckGrammarAsYouType:=fa 
lse; 
{Опредеоляем область документа} 
MyRange:=Otchet_Spisok_Sotrudnikov.WordDocument1.Range(EmptyParam,EmptyParam 
); 
    Tempo:=MyRange; 
{Оформляем заголовок} 
    Pars:=Otchet_Spisok_Sotrudnikov.WordDocument1.Paragraphs; 
    Par:=Pars.Add(Tempo); 
    Par.Alignment:=wdAlignParagraphCenter;  {Выравнивание параграфа} 
    Par.Range.Font.Bold:=1;          {Шрифт жирный} 
    Par.Range.Font.Size:=14;         {Размер шрифта} 
    Par.Range.Font.ColorIndex:=1;    {Цвет шрифта зеленый} 
    Par.Range.InsertBefore(Name); 
    Tempo:=Par.Range.Get_End_; {Определяем конец области} 
    MyRange:=Otchet_Spisok_Sotrudnikov.WordDocument1.Range(Tempo); 
{Формирование данных} 
       DataModule1.IBQuery2.Open; 
       DataModule1.IBQuery2.FetchAll; 
       i:=DataModule1.IBQuery2.RecordCount; 
       Otchet_Spisok_Sotrudnikov.Gauge1.MaxValue:=i; 
       Text:='? п/п@Фамилия, Имя, Отчество@Должность@Табельный номер@'; 
       for k:=1 to i do begin 
         Text1:=''; 
         Text1:=Text1+IntToStr(k)+'@'; 
         Text:=Text+Text1; 
            if not DataModule1.IBQuery2.FieldByName('FML').IsNull then 
               S[1]:=DataModule1.IBQuery2.FieldByName('FML').Value;
            if not DataModule1.IBQuery2.FieldByName('IME').IsNull then 
               S[2]:=DataModule1.IBQuery2.FieldByName('IME').Value; 
            if not DataModule1.IBQuery2.FieldByName('OTC').IsNull then 
               S[3]:=DataModule1.IBQuery2.FieldByName('OTC').Value; 
            Text1:=S[1]+' '+S[2]+' '+S[3]+'@'; 
         Text:=Text+Text1; 
            S[1]:=' ';S[2]:=' ';S[3]:=' ';S[4]:=' ';S[5]:=' '; 
            S[6]:=' ';S[7]:=' ';S[8]:=' ';S[9]:=' '; 
            if not DataModule1.IBQuery2.FieldByName('NPZ').IsNull then 
               S[1]:=DataModule1.IBQuery2.FieldByName('NPZ').Value; 
            if not DataModule1.IBQuery2.FieldByName('NSP').IsNull then 
               S[2]:=DataModule1.IBQuery2.FieldByName('NSP').Value; 
            Text1:=S[1]+' '+S[2]+'@'; 
         Text:=Text+Text1; 
            S[1]:=' ';S[2]:=' ';S[3]:=' ';S[4]:=' ';S[5]:=' '; 
            S[6]:=' ';S[7]:=' ';S[8]:=' ';S[9]:=' '; 
            if not DataModule1.IBQuery2.FieldByName('NNN').IsNull then 
               S[1]:=DataModule1.IBQuery2.FieldByName('NNN').Value; 
            Text1:=S[1]+'@'; 
         Text:=Text+Text1; 
            S[1]:=' ';S[2]:=' ';S[3]:=' ';S[4]:=' ';S[5]:=' '; 
            S[6]:=' ';S[7]:=' ';S[8]:=' ';S[9]:=' '; 
         Otchet_Spisok_Sotrudnikov.Gauge1.Progress:=k; 
         DataModule1.IBQuery2.Next; 
                        end; 
{Передаем строку текста в Word} 
    Tempo:=MyRange; 
    Par:=Pars.Add(Tempo); 
    Par.Range.InsertBefore(Text); 
{Конвертируем текст в таблицу} 
    Separator:='@';
    NumColumns:=4; 
    MyRange.ConvertToTable(Separator,EmptyParam,NumColumns,EmptyParam, 
                           EmptyParam,EmptyParam,EmptyParam,EmptyParam, 
                           EmptyParam,EmptyParam,EmptyParam,EmptyParam, 
                           EmptyParam,EmptyParam); 
{Связываем переменную и таблицу, а затем меняем размер столбцов и 
выравнивание} 
    Tabl:=Otchet_Spisok_Sotrudnikov.WordDocument1.Range.Tables.Item(1); 
    Tabl.Columns.Item(1).SetWidth(30,wdAdjustNone); 
    Tabl.Columns.Item(2).SetWidth(250,wdAdjustNone); 
    Tabl.Columns.Item(3).SetWidth(250,wdAdjustNone); 
    Tabl.Columns.Item(4).SetWidth(200,wdAdjustNone); 
    Tabl.Range.Paragraphs.Format.Alignment:=wdAlignParagraphCenter; 
    Tabl.Range.Cells.VerticalAlignment:=wdAlignParagraphCenter; 
    Tempo:=Par.Range.Get_End_; {Определяем конец области} 
    MyRange:=Otchet_Spisok_Sotrudnikov.WordDocument1.Range(Tempo); 
{Сохранение документа и отображение его в OLE контейнере (предварительный 
просмотр)} 
  Otchet_Spisok_Sotrudnikov.WordDocument1.SaveAs(FileName); 
  Otchet_Spisok_Sotrudnikov.WordDocument1.Close; 
{Включить проверки в Word} 
Otchet_Spisok_Sotrudnikov.WordApplication1.Options.CheckSpellingAsYouType:=T 
rue; 
Otchet_Spisok_Sotrudnikov.WordApplication1.Options.CheckGrammarAsYouType:=Tr 
ue; 
  Screen.Cursor:=crDefault; 
  Otchet_Spisok_Sotrudnikov.Gauge1.Visible:=False; 
  Otchet_Spisok_Sotrudnikov.BitBtn1.Visible:=True; 
  Otchet_Spisok_Sotrudnikov.OleContainer1.CreateLinkToFile(FileName,false); 
  Otchet_Spisok_Sotrudnikov.OleContainer1.Refresh; 
end;






Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook