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

Вниз

Экспорт из данных из DBGrid в Excel   Найти похожие ветки 

 
tolianb ©   (2006-09-01 07:30) [0]

Подскажите пожалуйста, есть ли возможность экспортировать данные из компонента DBGrid на форме в Excel - интересует механизм доступа к ячейкам с данными


 
ANB ©   (2006-09-01 09:05) [1]

В DBGrid нет данных, они лежать в дайтасете. Ветку надо перенести в "Начинающим".
ЗЫ. Впрочем есть гриды, которые умеют экспортить, но при этом все равно не себя, а набор данных, который они отображают. Заменяются только имена колонок на гридовые.


 
NewLamer ©   (2006-09-01 12:29) [2]

тебе надо просто данные из Грида в Excel перекинуть и все?


 
NewLamer ©   (2006-09-01 12:51) [3]

Если да то попробуй вот вот так
procedure TF_Otchet_MoveOS.OMOS_Btn_PrintClick(Sender: TObject);
//Процедура например нажатие кнопки
var vExcel: Variant;
Sheet: variant;
i: integer;
begin
 vExcel:= CreateOleObject("Excel.Application");
 vExcel.WorkBooks.Open("C:\"+"Мои проекты"+"\Test.xls",true);//Путь к файлу Excel и его имя
 Sheet:= vExcel.WorkBooks.Item[1].Sheets[1];
 for i:= 0 to DBGrid1.Count-1 do
     Sheet.Range["B"+IntToStr(i+1),"B"+IntToStr(i+1)].value :=   DBGrid1.Nodes.Items[i].Values[Здесь укажешь номер нужного столбца];
       Sheet.Range["C"+IntToStr(i+1),"C"+IntToStr(i+1)].value := DBGrid1.Nodes.Items[i].Values[Здесь укажешь номер нужного столбца];
//и так далее сколько столбцов нужно скопировать в Excel
 vExcel.Visible:= true;
end;


Sheet.Range["B"+IntToStr(i+1),"B"+IntToStr(i+1)].value - это номер ячейки в Excel
он должен существовать!!! т.е. он не создается сам по себе ты лишь запишешь в него данные


 
ANB ©   (2006-09-01 13:19) [4]


> NewLamer ©   (01.09.06 12:51) [3]

И это у тебя компиляется ? Где это ты такой грид то раздобыл ?


 
NewLamer ©   (2006-09-01 14:18) [5]

Да. А это обычный грид. только в Uses еще надо добавить ComObj


 
lexer ©   (2006-09-01 14:23) [6]

>NewLamer ©   (01.09.06 14:18) [5]

и после этого у стандартного DBGrid появятся свойства Count и Nodes? :)


 
NewLamer ©   (2006-09-01 14:44) [7]

Извиняюсь у меня другой компонент стоит cxDBTreeList


 
ANB ©   (2006-09-01 14:48) [8]


> cxDBTreeList

И каким боком он к обычному гриду ?


 
NotGooDP ©   (2006-09-01 15:13) [9]

>NewLamer
 норм пример

>tolianb
http://www.kornjakov.ru/stat.htm
вот тебе статья по работе с суперфункциями Word и Exel там все понятно.


 
NewLamer ©   (2006-09-01 15:21) [10]

Procedure FillReport(Sheet: variant);
var i: integer;
begin
 With Form1 do
 begin
   for i:= 1 to Table1.RecordCount do
     begin
       Sheet.Range["B"+IntToStr(i),"B"+IntToStr(i)].value := DBGrid1.Columns[1].Field.Value;
       Table1.Next;
     end;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var vExcel: Variant;
Sheet: variant;
begin
 vExcel:= CreateOleObject("Excel.Application");
 vExcel.WorkBooks.Open("C:\"+"Мои проекты"+"\Test.xls",true);
 Sheet:= vExcel.WorkBooks.Item[1].Sheets[1];
 FillReport(Sheet);
 vExcel.Visible:= true;
end;


Вот пример с обычным гридом проверял работает


 
Lexer ©   (2006-09-01 15:26) [11]

>NewLamer ©   (01.09.06 15:21) [10]
RecordCount здесь лишний, данный код в некоторых случаях выведет множество одинаковых строк - повторяться будет последняя строка (сам подумай почему).
Использовать EOF, заполнять массив и кидать одним заходом его в Excel.


 
YurikGL ©   (2006-09-01 20:52) [12]

Несколько способов экспорта из БД в Excel
http://www.kladovka.net.ru/index.cgi?pid=board&rid=363


 
isasa ©   (2006-09-02 12:08) [13]

Странно все это. Преремешаем текущую позицию в одном компоненте, данные берем в другом.

for i:= 1 to Table1.RecordCount do
 begin
   Sheet.Range["B"+IntToStr(i),"B"+IntToStr(i)].value := DBGrid1.Columns[1].Field.Value;
   Table1.Next;
 end;

может надо быть проще? И без мультфильмов :)

Table1.DisableControls;
for i:= 1 to Table1.RecordCount do
 begin
   Sheet.Range["B"+IntToStr(i),"B"+IntToStr(i)].value := Table1.FieldByName(<тут имя поля, например>).Value;
   Table1.Next;
 end;
Table1.EnableControls;


 
isasa ©   (2006-09-02 12:10) [14]

Сорри, не проснулся.\\
Вот это
for i:= 1 to Table1.RecordCount do
считать этим
while not Table1.Eof do


 
tolianb ©   (2006-09-04 02:54) [15]

Всем спасибо, работает, а то голову ломал!



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

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

Наверх




Память: 0.5 MB
Время: 0.118 c
3-1157437387
Sansy
2006-09-05 10:23
2006.10.29
таблица не существует?


2-1161066498
Bless
2006-10-17 10:28
2006.10.29
Два класса, ссылающиеся друг на друга, в разных модулях. Можно?


15-1159929701
Slider007
2006-10-04 06:41
2006.10.29
С днем рождения ! 4 октября


3-1156856047
bmp2006
2006-08-29 16:54
2006.10.29
Сложный запрос


8-1143174902
ZzzzZ
2006-03-24 07:35
2006.10.29
Графический формат, блин