Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.01;
Скачать: CL | DM;

Вниз

DBGrid в Word   Найти похожие ветки 

 
tigrenok_o ©   (2006-12-24 18:00) [0]

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


 
Prohodil Mimo ©   (2006-12-24 19:05) [1]

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


 
rar ©   (2006-12-24 20:23) [2]

Можно и так
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.


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

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


 
YurikGL ©   (2007-01-13 12:49) [4]

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2007.04.01;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.055 c
2-1173855331
forward
2007-03-14 09:55
2007.04.01
Файл в расшареной папке


15-1173186772
Gorlum
2007-03-06 16:12
2007.04.01
Помогите, плз, найти электронный учебник...


15-1173621847
прог-ист
2007-03-11 17:04
2007.04.01
кодировка


1-1170933217
Kolan
2007-02-08 14:13
2007.04.01
ApdComPort можно ли установить триггер по маске?


2-1173121140
Riply
2007-03-05 21:59
2007.04.01
Сравнение строк.