Главная страница
    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.48 MB
Время: 0.038 c
15-1160130608
zdm
2006-10-06 14:30
2006.10.29
Mercury


3-1156354971
Garyck
2006-08-23 21:42
2006.10.29
Ошибка ADO


2-1160721685
alucard
2006-10-13 10:41
2006.10.29
Как сделать Таймер активирующийся по Вторникам и Четв. в 15:00


3-1156919569
ddddd
2006-08-30 10:32
2006.10.29
Как проверить есть ли в Query поле с заданным названием?


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





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский