Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DBGrid в Word [D7]


tigrenok_o ©   (2006-12-24 18:00:00) 

Я делаю SQL запрос на выборку данных, через TQuery заношу их в DBGrid, а от туда надо в Word. Каким образом это сделать? Учитывая что данные могут изменяться постоянно и размеры таблицы соответственно тоже.


s_t_d   (2007-01-16 17:44:00) [1]

Уважаемый YurikGL, большое спасибо за помощь.


YurikGL   (2007-01-13 12:49:00) [2]

http://www.delphimaster.ru/articles/dbtoword/index.html


s_t_d   (2007-01-12 19:36:00) [3]

Уважаемый "rar" можно попросить Вас выложить представленный текст еще раз. Невозможно прочесть комментарии, а хотелось бы...


rar   (2006-12-24 20:23:00) [4]

Можно и так
unit UnitExport;

interface
Uses
 Windows, Messages, DB, Forms, Controls, DBGrids, StdCtrls, COMObj, ExcelXP,
 Word97, SysUtils, ClipBrd;

procedure ExportDBGrid(toApp: integer; MainDBGrid:TDBGrid; MainForm:TForm );

implementation

uses UnitMain;

procedure LanguageKeyboard();//Ïåðåêëþ÷àåì êëàâèàòóðó â Êèðèëèöó
var
Layout: array[0.. KL_NAMELENGTH] of char;
begin
LoadKeyboardLayout( StrCopy(Layout,'00000419'),KLF_ACTIVATE)
end;

procedure CreateExcel();//Ïðîöåäóðà ýêñïîðòèðóåò DBGrid â Excel
var
 ExcelApp: Variant;
begin
 try
   ExcelApp := GetActiveOleObject('Excel.Application');
 except
   try
     ExcelApp := CreateOleObject('Excel.Application');
   except
     Exception.Create('Íå ìîãó çàïóñòèòü Excel');
   end;
 end;
 ExcelApp.WorkBooks.Add(xlWBatWorkSheet);
 ExcelApp.Cells.Select;//âûäåëèëè âñå Ctrl+A
 ExcelApp.Selection.NumberFormat:='@';//Óñòàíîâèëè ôîðìàò ÿ÷ååê òåêñòâûé
 ExcelApp.Range['A1'].Select;//ïåðåøëè â ïåðâóþ ÿ÷åéêó
 ExcelApp.ActiveSheet.Paste;//Âñòàâèëè äàííûå èç Clil
 ExcelApp.Visible := true;//Ñäåëàëè âèäèìûì ïðèëîæåíèå
 ExcelApp.WindowState:=xlNormal;
end;

procedure CreateWord(Col:integer);//Ïðîöåäóðà ýêñïîðòèðóåò DBGrid â Word
var
 AppWord:variant;
begin
 try
   AppWord := GetActiveOleObject('Word.Application');
   //AppWord.Visible:=false;
 except
   try
     AppWord := CreateOleObject('Word.Application');
     //AppWord.Visible:=false;
   except
     Exception.Create('Error');
   end;
 end;
 AppWord.Documents.Add;//Ñîçäàåì ÷èñòûé ëèñò
 AppWord.ActiveDocument.PageSetup.Orientation:=wdOrientLandscape;//Äåëàåì îðèåíòàöèþ Àëüáîìíóþ
 AppWord.Selection.Paste;//Âñòàâëÿåì èç Clip
 AppWord.Selection.WholeStory;//âûäåëèòü âñå CTR+A
 //Ïðåâðàùàåì òåêñò â Òàáëèöó
 AppWord.Selection.ConvertToTable(Separator:=#9, NumColumns:=Col);
 AppWord.Selection.HomeKey(Unit:=wdLine);
 AppWord.ActiveWindow.ActivePane.View.Zoom.Percentage:=75;//Óñòàíàâëèâàåì ìàñøòàá
 AppWord.Visible:=true;//äåëàåì ïðèëîæåíèå âèäèìûì
 AppWord.Activate;
 AppWord.WindowState:=wdWindowStateNormal;
end;

function DataSetToString(MainDBGrid:TDBGrid):string;
var
 s:string;
 col, row:integer;
begin
  //Åñëè ìíîæåñòâåííûé âûáîð òî
 if (dgMultiSelect in MainDBGrid.Options) then
   begin
     for  row:=0  to MainDBGrid.SelectedRows.Count-1 do
     begin
       for col := 0 to MainDBGrid.Columns.Count - 1 do
       begin
         s := s + MainDBGrid.Columns.Items[col].Field.AsString + #9;
       end;
       s := s + #13 + #10;
     end;
   end
   else
   begin
     //äîáàâëÿåì ñòðîêè èç DBGrid â ïåðåìåííóþ S
     MainDBGrid.DataSource.DataSet.First;
     while not MainDBGrid.DataSource.DataSet.EOF do
     begin
       for col := 0 to MainDBGrid.Columns.Count - 1 do
       begin
         s := s + MainDBGrid.Columns.Items[col].Field.AsString + #9;
       end;
       s := s + #13 + #10;
       MainDBGrid.DataSource.DataSet.Next;
     end;
   end;
   Result:=s;
end;

//toApp ðàâíî åñëè Excel òî 1, Word òî 2,
procedure ExportDBGrid(toApp: integer; MainDBGrid:TDBGrid; MainForm:TForm);
var
 bm: TBookmark;
 col: Integer;
 s:String;
begin

 Screen.Cursor := crHourglass;
 MainDBGrid.DataSource.DataSet.DisableControls;
 bm := MainDBGrid.DataSource.DataSet.GetBookmark;

 s := '';

 // äîáàâëÿåì èíôîðìàöèþ äëÿ èì¸í êîëîíîê
 for col := 0 to MainDBGrid.FieldCount-1 do
   s := s + MainDBGrid.Columns.Items[col].Title.Caption + #9;
 //s := s+#10+#13;
 s:=s+#10+#13+DataSetToString(MainDBGrid);

 LanguageKeyboard;
 Clipboard.AsText := s; //Äàííûå - â áóôåð!!!
 MainDBGrid.DataSource.DataSet.GotoBookmark(bm);
 MainDBGrid.DataSource.DataSet.FreeBookmark(bm);
 MainDBGrid.DataSource.DataSet.EnableControls;

 //Îïðåäåëÿì êóäà íàïðàâëÿòü
 case toApp of
   1: CreateExcel();
   2: CreateWord(MainDBGrid.FieldCount+1);
 end;
  Screen.Cursor := crDefault;
end;

end.


Prohodil Mimo   (2006-12-24 19:05:00) [5]

я бы сгенерил RTF, а после открыл его в Wordе


Наверх

Титульная страница Поиск, карта сайта Написать письмо