![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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е