Модераторы: MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ADOQuery в WORD, ADOQuery в WORD 
V
    Опции темы
mr_tg
Дата 26.1.2011, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 29.3.2008

Репутация: нет
Всего: нет



[email protected]
Здраствуете знатаки. Помогите.
DELPHI, ADOQuery в WORD 
(помогите изменить 1-высоту документаб 2- сам шрифт к примеру «TIMESnew ROMAN» или «Calibri» 3-ниже увидете как я печатал таблицы, прочитал Работа с MS Word.doc от Albinos_Xa и хачу внедрит свою таблицу ниже показанаму. Неполучается.)

Код

procedure TForm1.BitBtn1Click(Sender: TObject);
var
       Rl,Tbl,Word, Doc : OLEVariant;
begin
Screen.Cursor:=crHourGlass;
  try
    Word := CreateOleObject('Word.Application');
  except
    ShowMessage('WORDni topomayamman');
    exit;
  end;
 Doc:=Word.Documents.Add;
  // Word.Selection.PageSetup.Orientation:=wdOrientLandscape; //ALBOMNIY  //Word.Selection.ActiveDocument.PageSetup.Orientation:=wdOrientLandscape;
  //Word.Selection.TypeParagraph; //ENTER paragraf
  // текст по ширине
  //WordParagraphFormat1.Alignment := wdAlignParagraphJustify;
  //  WordParagraphFormat1.ConnectTo(WordApplication1.Selection.ParagraphFormat);
  // интервал перед абзацем
  Word.Selection.ParagraphFormat.SpaceBefore:=6;
  // интервал после абзаца
  Word.Selection.ParagraphFormat.LineSpacing:=8;
  Word.Selection.PageSetup.LeftMargin:=50; //~2.5 см
word.Selection.Font.Bold:=true;
word.Selection.Font.size:=14;
//МОЯ  таблица
      i:=1;
      with ADOQuery2 do
       begin
       First;
       for i:=1 to ADOQuery2.RecordCount do
       begin
       Word.Selection.TypeText(inttostr(i)+'  ');
       Word.Selection.TypeText('   |   ');
       Word.Selection.TypeText(ADOQuery2.FieldByName('date').AsString);
       Word.Selection.TypeText('   |   ');
       Word.Selection.TypeText(ADOQuery2.FieldByName('Kolichestvo').AsString);
       Word.Selection.TypeText('   |   ');
       Word.Selection.TypeText(ADOQuery2.FieldByName('Summa').AsString);
       Word.Selection.TypeText('   |   ');
       Word.Selection.TypeText(ADOQuery2.FieldByName('Naprav').AsString);
       Word.Selection.TypeText('     |    ');
       Word.Selection.TypeText(ADOQuery2.FieldByName('Gb').AsString);
       Word.Selection.TypeParagraph;
       Next;
       end;
     end;

      
word.Selection.Font.Bold:=true;

 // вставляем таблицу___________
Rl:=Word.Selection.Range;

Tbl :=Rl.Tables.Add(Rl,6,5,EmptyParam,EmptyParam);
// устанавливаем стиль внутренних границ
Tbl.Borders.InsideLineStyle:=wdLineStyleSingle;
// устанавливаем стиль внешних границ
Tbl.Borders.OutsideLineStyle:=wdLineStyleSingle;
// форматируем таблицу
// первый столбец
// СУДА хочу внедрит мою таблицу
Tbl.Columns.Item(1).SetWidth(22,wdAdjustNone);
//Тbl.Rows.Item(1).HeadingFormat:=-1;
// второй и т.д.
Tbl.Columns.Item(2).SetWidth(99,wdAdjustNone);
//S:=Tbl.Cell(1, 1).Range.Text;
Word.Selection.TypeText('ПРин:');
//Tbl.Cell(3, 4):='444444444';
Tbl.Columns.Item(3).SetWidth(112,wdAdjustNone);
Word.Selection.TypeText('zzzzzzzzzzzzzzz');
Tbl.Columns.Item(4).SetWidth(112,wdAdjustNone);
Tbl.Columns.Item(5).SetWidth(112,wdAdjustNone);
 Tbl.Cell(1,1).Merge(Tbl.Cell(1,5));
// по аналогии и со строчками
// Перемещаем курсор из таблицы
Word.Selection.MoveDown(EmptyParam, 7, EmptyParam);
// вставляем текст
Word.Selection.TypeParagraph;
Word.Selection.TypeParagraph;
Word.Selection.InsertAfter('текст '+#13);
// снимаем выделение
Word.Selection.Collapse(D);
 Tbl.Cell(Tbl.Rows.Count-1,1).Merge(Tbl.Cell(Tbl.Rows.Count-1,5));
Word.Selection.TypeParagraph;
Word.Selection.TypeText('Умумий сони: ');


Word.Visible:=true;
Screen.Cursor:=crDefault;


заране СПС

Это сообщение отредактировал(а) mr_tg - 26.1.2011, 18:14
PM MAIL   Вверх
Keeper89
Дата 26.1.2011, 19:19 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: нет
Всего: 58



Может стоит начать с учебника Розенталя, а не с "хачу внедрит свою таблицу ниже показанаму"? smile

Это сообщение отредактировал(а) Keeper89 - 26.1.2011, 19:20


--------------------
PM MAIL WWW   Вверх
mr_tg
Дата 26.1.2011, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 29.3.2008

Репутация: нет
Всего: нет



Keeper89 

я не понил насчот чего говорите.
если есть полезные сылки на учебники (на уровне наченающего) или ещо чего небуть дайте я с радостью посмотрю.
если закомментирована еще лудше.

Цитата

"хачу внедрит свою таблицу ниже показанаму"

Руский язык нерадной язык. по этому извеняюсь если смысл или грамматика грубая.

PM MAIL   Вверх
Albinos_x
Дата 2.2.2011, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



не совсем понятно что нужно

Цитата(mr_tg @  26.1.2011,  18:12 Найти цитируемый пост)
1-высоту документаб 

Имеешь ввиду размер листа? или ячейки?

Цитата(mr_tg @  26.1.2011,  18:12 Найти цитируемый пост)
2- сам шрифт к примеру «TIMESnew ROMAN» или «Calibri» 

Где именно нужно сменить? а сейчас какой шрифт?

Цитата(mr_tg @  26.1.2011,  18:12 Найти цитируемый пост)
Неполучается.)

более конкретно, что не получается?


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
mr_tg
Дата 5.2.2011, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 29.3.2008

Репутация: нет
Всего: нет



Здраствуйте Albinos_x.
СПС что откликнулис.
я в клике кнопки создаю и внедряю текст в Ворд.
там есть текст в начале я без проблем добавляю.
потом данные из ADOQuery2 надо прописать в нутри таблицы.
после таблицы добавить текст.
1)ПОМОГИТЕ нарисовать Таблицу в  WORDе. внутри которого данные из ADOQuery2 
2) А остольное я прочол заново в вашей учебной пособии "Работа с MS Word.doc". не то что всё получилось.  по чуть чут идёт прогресс.
ОЧЕНЬ помогает если есть дополнение дайте сылку. я сразу и с удовольствием просматрю. 
3) ниже показана что я хочу отразить на WORDе.


Код

по состаянию DD MMMMM YYYY 
нижеперечисленные данные 
в приложении №2....

__________________________________________
| OBSHAYA forma                          |
-----------------------------------------
| 1| 2     | 3    | 4    | 5    | 6      |
------------------------------------------
|1 |  ыыы  | ыыы  |  ввв  |  345|     123|
|2 |    ааа|   ааа|   пррп|  116|     764|
|3 |    ккп|  спмс|   ими |     |        |
...| ...   |   ...|   ....|   ..|     ...|
|n |       |      |       |     |        |
------------------------------------------
itogo po 5 i 6:           |     |        |
------------------------------------------ 
будут переданыы вввввв...



Это сообщение отредактировал(а) mr_tg - 5.2.2011, 15:56
PM MAIL   Вверх
Albinos_x
Дата 6.2.2011, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



для пункта 1 вот тебе пример:
Код

// выгрузка таблицы в word
Procedure LoadInDoc(Columns:TDBGridColumns; Query: TADOQuery);
var i    : Integer;
    Tabl : Table;
    WordDoc: TWordDocument;
    WordApp:TWordApplication;
    R1 : Range;
    Separat, Column : OleVariant;
    s:String;
    List:TStringList;
const
  separ = '@';
begin
// открываем новый документ
WordApp:=TWordApplication.Create(nil);
WordApp.ConnectKind:=ckNewInstance;
WordApp.AutoConnect:=False;
WordApp.AutoQuit:=False;
WordApp.Connect;
WordApp.Documents.Add(EmptyParam,EmptyParam,EmptyParam,EmptyParam);
WordDoc:=TWordDocument.Create(nil);
WordDoc.ConnectTo(WordApp.ActiveDocument);
WordDoc.PageSetup.Orientation:=wdOrientLandscape;
// добавляем новыю таблицу
R1:=WordApp.Selection.Range;
Tabl:=WordDoc.Tables.Add(R1,1,Columns.Count,EmptyParam,EmptyParam);
// заполняем шапку
for i:=0 to Columns.Count-1 do
   Tabl.Cell(1, i+1).Range.Text:=Columns.Items[i].Title.Caption;
// делаем повтор на каждой странице
Tabl.Rows.Item(1).HeadingFormat:=-1;
// добавляем новый параграф
R1:=WordDoc.Range.Paragraphs.Add(EmptyParam).Range;
// инициализируем нужные переменные
Separat:=separ;
Column:=Columns.Count;
List:=TStringList.Create;
Query.First;
repeat
   s:='';
   // формируем строку
   for i:=0 to Query.FieldCount-1 do
      s:=s+Query.Fields.Fields[i].AsString+separ;
   // добаляем в лист
   List.Append(s);
   // чтоб не перегружать word большими таблицами добавляем кусками
   if List.Count>=25 then
     begin
     // преобразуем в таблицу
     s:=StringReplace(List.Text,#13#10,'',[rfReplaceAll]);
     R1.InsertAfter(s);
     R1.ConvertToTable(Separat, EmptyParam, Column,
                       EmptyParam, EmptyParam,
                       EmptyParam, EmptyParam, EmptyParam,
                       EmptyParam, EmptyParam, EmptyParam,
                       EmptyParam, EmptyParam, EmptyParam,
                       EmptyParam, EmptyParam);
     R1:=WordDoc.Range.Paragraphs.Add(EmptyParam).Range;
     List.Clear;
     end;
   Query.Next;
   until (Query.Eof);
// добиваем остатки
if List.Count>0 then
   begin
   // преобразуем в таблицу
   s:=StringReplace(List.Text,#13#10,'',[rfReplaceAll]);
   R1.InsertAfter(s);
   R1.ConvertToTable(Separat, EmptyParam, Column,
                     EmptyParam, EmptyParam,
                     EmptyParam, EmptyParam, EmptyParam,
                     EmptyParam, EmptyParam, EmptyParam,
                     EmptyParam, EmptyParam, EmptyParam,
                     EmptyParam, EmptyParam);

   List.Clear;
   end;
Tabl.Borders.InsideLineStyle:=wdLineStyleSingle;
Tabl.Borders.OutsideLineStyle:=wdLineStyleSingle;
// освобождаем память
List.Free;
WordApp.Visible:=True;
WordDoc.Disconnect;
WordApp.Disconnect;
WordDoc.Destroy;
WordApp.Destroy;
end;


Columns:TDBGridColumns - используется только для формирования шапки таблицы.
функция работает по следующему алгоритму:
1) Инициалзируется сервер ворд, добавляется новый документ
2) Добавляем таблицу по числу колонок в Columns
3) заполняем первую строчку, т.е. формируем шапку исходя из названий Columns
4) открываем цикл по содержимому квери
5) пишем содержимое квери в переменную List (это сделано с целью  чтобы не перегружать сервер и комп обращениями к серверу)
4) когда число строчек в List достигает 25, добавляем их в документ пачкой и преобразовываем в таблицу. (т.е. пишем в документ пачкой по 25 строчек)
5) далее при достижении конца таблицы у нас могут остаться не занесенные строчки (т.е. List содержит менее 25 строчек но больше 0), поэтому проверяем данный факт и если это так сбрасываем остатки

функция работает по office Xp, 2003, 2007 (проверено)

Добавлено через 3 минуты и 11 секунд
если хочешь добавить текст после таблицы,то можно дать, к примеру, сначала команду:
Код

R1:=WordDoc.Range.Paragraphs.Add(EmptyParam).Range;

и потом работать с R1 как с Range.

Добавлено через 5 минут и 31 секунду
последняя опубликованная версия здесь: http://zando.org.ru/content/blogcategory/19/31/7/7/
еще кому то давал для скачивания более обновленную в вордовском файле... а так пока некогда обновить содержимое)


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
mr_tg
Дата 15.2.2011, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 79
Регистрация: 29.3.2008

Репутация: нет
Всего: нет



СПАСИБО Albinos_x
Ваш пример помог, очень помог.

 smile  smile  smile  smile 


 ещёраз спс тем кто прочитал и попыталса помочь.


тепер могу закыть тему.
PM MAIL   Вверх
Albinos_x
Дата 19.2.2011, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 15
Всего: 108



 smile 
был рад помочь)


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: ActiveX/СОМ/CORBA"

Rrader
Girder

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Delphi
  • Вопросы по SQL и вопросы по базам данных, не связанные с Delphi, задавать здесь

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Rrader, Girder.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: ActiveX/СОМ/CORBA | Следующая тема »


 




[ Время генерации скрипта: 0.1281 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.