Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.037 c
2-1173033268
AMW
2007-03-04 21:34
2007.04.01
Как возвратить строку из dll без ShareMem?


2-1173470070
arturich
2007-03-09 22:54
2007.04.01
Как получить текст из поля веб страницы


2-1173433604
Ega23
2007-03-09 12:46
2007.04.01
Механизм цветопередачи картинок к TAction при Enabled/Disabled


15-1173308821
mr 666
2007-03-08 02:07
2007.04.01
Где в WinXP


15-1173103271
kichrot
2007-03-05 17:01
2007.04.01
ТЫ ИЗБРАЛ - ТЕБЕ СУДИТЬ!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский