Правила Форума редакция от 22.06.2020 |
|
|
|
|
|
Опции темы | Опции просмотра | Language |
29.07.2008, 11:35 | #1 |
Неактивный пользователь
Регистрация: 29.07.2008
Сообщений: 1
Репутация: 0
|
Экспорт из dbgrid в excel
Я совсем чайник, поэтому заранее сорри. Учусь в Delphi 7.
Сделал sql-запрос из базы Access (через ADO Connection), вывожу в dbgrid, нужно результаты экспортнуть в excel. Не могу разобраться, прочитал много всего. Если можно - пример кода, плиз Задачка совсем не новая, но разобраться очень хочется. |
Реклама: | анакондаз концерт | барная стойка купить для кухни | борная кислота купить 25 кг | керамический гранит | Вся техника в KNSneva.ru - Archer AX80 - доставкой по Санкт-Петербургу и СЗАО |
29.07.2008, 11:59 | #2 |
Ответ: Экспорт из dbgrid в excel
|
|
Сказали спасибо: |
29.07.2008, 12:17 | #3 |
Ответ: Экспорт из dbgrid в excel
Dbgrid не содержит никакой информации, а только отображает её, поэтому надо работать с DataSet.
Можешь посмотреть ТУТ и ТУТ. Или попробовать вот так: Код:
//Export напрямую в Excel без промежуточной передачи данных// //*********************// //uses -> ComObj //*********************// procedure TMainForm.ExportClick(Sender: TObject); var i,j,index: Integer; ExcelApp,sheet: Variant; begin ExcelApp := CreateOleObject('Excel.Application'); ExcelApp.Visible := False; ExcelApp.WorkBooks.Add(-4167); ExcelApp.WorkBooks[1].WorkSheets[1].name := 'Export'; sheet:=ExcelApp.WorkBooks[1].WorkSheets['Export']; index:=1; //Загоняем с первой строки DBGrid1.DataSource.DataSet.First; for i:=1 to DBGrid1.DataSource.DataSet.RecordCount do begin for j:=1 to DBGrid1.FieldCount do sheet.cells[index,j]:=DBGrid1.fields[j-1].asstring; inc(index); DBGrid1.DataSource.DataSet.Next; end; ExcelApp.Visible := true; end;
__________________
У победы много отцов, поражение всегда сирота. Последний раз редактировалось hack; 29.07.2008 в 12:20.. |
|
Эти 2 пользователя(ей) сказали cпасибо за это полезное сообщение: |
29.07.2008, 20:47 | #4 |
Ответ: Экспорт из dbgrid в excel
Используй DBGridEh. Именно Grid и именно в CSV, XLS
|
|
03.10.2008, 12:41 | #5 |
Неактивный пользователь
Регистрация: 20.06.2008
Сообщений: 4
Репутация: 1
|
Re: Экспорт из dbgrid в excel
DevExpress TcxGrid. Имеется встроенная функция экспорта грида в excel.
|
23.10.2008, 15:42 | #6 |
Пользователь
Пол: Регистрация: 07.03.2008
Адрес: Киев
Сообщений: 111
Репутация: 35
|
Re: Экспорт из dbgrid в excel
Даю ссылки на примеры Экспорта и импорта в Excel. Правда для c++ builder, но разобраться можно:
http://rxlib.ru/WinLesson/bles1.htm http://rxlib.ru/WinLesson/bles1_2.htm http://faqs.org.ru/progr/c_cpp/cbuilder2.htm Правда не совсем экспорт, но зато как программно обрабатывать excel файлы. Последний раз редактировалось agent_smith; 04.11.2008 в 12:40.. |
26.01.2009, 11:00 | #7 |
Неактивный пользователь
Регистрация: 26.01.2009
Сообщений: 3
Репутация: 0
|
Re: Экспорт из dbgrid в excel
А если Excel не установлен?
|
26.01.2009, 12:23 | #8 |
Пользователь
Пол: Регистрация: 07.03.2008
Адрес: Киев
Сообщений: 111
Репутация: 35
|
Re: Экспорт из dbgrid в excel
|
Сказали спасибо: |
17.04.2009, 02:31 | #9 |
Неактивный пользователь
Регистрация: 17.04.2009
Сообщений: 1
Репутация: 0
|
Re: Экспорт из dbgrid в excel
Да я тоже столкнулся с проблемой экспорта из dbgrid в excel)) только на С++ builder народ помогите плз если кто может чайнику!!!
А лучше если можно закиньте исходник проги которая экспорт выполняет Последний раз редактировалось onzone; 17.04.2009 в 02:38.. |
17.04.2009, 10:23 | #10 |
Re: Экспорт из dbgrid в excel
Код не мой, когда-то нашел в инете, но он рабочий.... Код:
Variant XLSAPP; //=============================================== int f4_ExcelInit(AnsiString File){//Подключение к Excel try{//Если Excel запущен - подключиться к нему XLSAPP=Variant::GetActiveObject("Excel.Application");} catch (...){//Если Excel не запущен - запустить его try{XLSAPP=Variant::CreateObject("Excel.Application");} catch (...){ Application->MessageBox("Невозможно открыть Microsoft Excel." "Возможно, Excel не установлен на компьютере.","Ошибка",MB_OK+MB_ICONERROR);} } try{ if(File!=""){ XLSAPP.OlePropertyGet("WorkBooks").OleProcedure("Open",File.c_str());}//Открыть документ else XLSAPP.OlePropertyGet("WorkBooks").OleProcedure("add");//Создать новый документ } catch (...){ Application->MessageBox("Ошибка открытия файла Microsoft Excel.", "Ошибка",MB_OK+MB_ICONERROR);return -1;} return 1; } //=============================================== int f4_ExcelVisible(bool i){//Показать/скрыть Excel if(!XLSAPP.IsEmpty())XLSAPP.OlePropertySet("Visible",i); return 1; } //=============================================== int f4_ExcelSend(int Sheet, int Stolb, int Stroka, AnsiString Str, bool asText=false){//>>> Variant ExcelSheet,Cur;//Запись данных в Excel (Лист, столбец, строка, "данные",как_текст?) AnsiString ErrStr; if(Str=="")return 1;//Не писать "пустоту" ErrStr="Ошибка при записи: лист "+IntToStr(Sheet)+", столбец "+IntToStr(Stolb)+", строка "+IntToStr(Stroka); try{ExcelSheet=XLSAPP.OlePropertyGet("WorkSheets",Sheet);} catch (...){Application->MessageBox(ErrStr.c_str(), "Ошибочный номер листа Microsoft Excel",MB_OK+MB_ICONERROR); return -1;} try{Cur=ExcelSheet.OlePropertyGet("Cells",Stroka,Stolb); if(asText)Cur.OlePropertySet("NumberFormat","@");//Форматировать ячейку как текст Cur.OlePropertySet("Value",Str.c_str());} catch (...){Application->MessageBox(ErrStr.c_str(), "Ошибка Microsoft Excel",MB_OK+MB_ICONERROR); return -1;} return 1; } //=============================================== int f4_SaveToExcel(){//Экспорт всех ячеек в Excel TBookmark bm; int result,col, row; Screen->Cursor=crHourGlass; Application->ProcessMessages(); result=f4_ExcelInit("");//Инициализация Excel if(result==-1){Screen->Cursor=crDefault;return -1;} Form1->DBGrid1->DataSource->DataSet->DisableControls(); bm=Form1->DBGrid1->DataSource->DataSet->GetBookmark();//Текущая ячейка Form1->DBGrid1->DataSource->DataSet->First(); for(col=0;col<Form1->DBGrid1->FieldCount;col++){//добавляем имена колонок result=f4_ExcelSend(1,col+1,1,Form1->DBGrid1->Fields[col]->DisplayLabel,true); if(result==-1){Screen->Cursor=crDefault;return -1;} } Form1->ProgressBar1->Position=0;//Прогрессбар Form1->ProgressBar1->Max=Form1->DBGrid1->DataSource->DataSet->RecordCount; for(row=0;row<Form1->DBGrid1->DataSource->DataSet->RecordCount;row++){// получаем данные Form1->ProgressBar1->Position=row;//Прогрессбар for(col=0;col<Form1->DBGrid1->FieldCount;col++){ result=f4_ExcelSend(1,col+1,row+2,Form1->DBGrid1->Fields[col]->AsString,true); if(result==-1){Screen->Cursor=crDefault;return -1;} } Form1->DBGrid1->DataSource->DataSet->Next(); } Form1->DBGrid1->DataSource->DataSet->GotoBookmark(bm);//Текущая ячейка Form1->DBGrid1->DataSource->DataSet->FreeBookmark(bm); Form1->DBGrid1->DataSource->DataSet->EnableControls(); f4_ExcelVisible(true);//Сделать видимым Excel Form1->ProgressBar1->Position=0;//Прогрессбар Screen->Cursor=crDefault; Application->ProcessMessages(); return 1; } |
|
03.06.2009, 00:43 | #11 | |||||||||||||||||||||||
Неактивный пользователь
Регистрация: 03.06.2009
Сообщений: 7
Репутация: 3
|
Re: Экспорт из dbgrid в excel
все бы хорошо если бы это был не C. Вот пример кода из моей лабы: Код:
procedure TForm1.Button23Click(Sender: TObject);//отчет в ЕКСЕЛЬ var i,j,index,p: Integer; g:sTring; ExcelApp,sheet: Variant; begin p:=0; ExcelApp := CreateOleObject('Excel.Application'); ExcelApp.Visible := true; ExcelApp.WorkBooks.Add(-4167); ExcelApp.WorkBooks[1].WorkSheets[1].name := 'Export'; sheet:=ExcelApp.WorkBooks[1].WorkSheets['Export']; Sheet.Cells[1,1]:='Код владельца'; Sheet.Cells[1,2]:='Фамилия'; Sheet.Cells[1,3]:='Имя'; Sheet.Cells[1,4]:='Отчество'; Sheet.Cells[1,5]:='Марка'; Sheet.Cells[1,6]:='Год выпуска'; Sheet.Cells[1,7]:='Грузоподъемность'; Sheet.Cells[1,8]:='Стаж работы'; Sheet.Cells[1,9]:='Фото'; index:=2; //заполнение со 2 строки DBGrid1.DataSource.DataSet.First; for i:=1 to DBGrid1.DataSource.DataSet.RecordCount do begin sheet.cells[index,1]:=DBGrid1.fields[0].asstring; sheet.cells[index,2]:=DBGrid1.fields[1].asstring; sheet.cells[index,3]:=DBGrid1.fields[2].asstring; sheet.cells[index,4]:=DBGrid1.fields[3].asstring; sheet.cells[index,8]:=DBGrid3.Fields[4].AsInteger; DBGrid2.DataSource.DataSet.First; for j:=1 to DBGrid2.DataSource.DataSet.RecordCount do begin if dm.Query1.FieldByName('VKOD').AsInteger=dm.Query2.FieldByName('VKOD').AsInteger then begin inc(index); sheet.cells[index,5]:=DBGrid2.fields[2].asstring; sheet.cells[index,6]:=DBGrid2.fields[4].asstring; sheet.cells[index,7]:=DBGrid2.fields[5].asstring; form1.DBImage2.Picture.SaveToFile(ExtractFilePath(ParamStr(0))+'temp'+inttostr(p)+'.bmp'); sheet.cells[index,9].select; Sheet.Pictures.Insert('H:\Laba1\'+'temp'+inttostr(p)+'.bmp'); inc(p); DBGrid2.DataSource.DataSet.Next; end; end; inc(index); DBGrid1.DataSource.DataSet.Next; end; ExcelApp.Visible := true; end; |
|||||||||||||||||||||||
03.06.2009, 21:02 | #12 | |||||||||||||||||||||||
Пользователь
Пол: Регистрация: 12.03.2008
Сообщений: 62
Репутация: 12
|
Re: Экспорт из dbgrid в excel
формат называется csv - это текст с разделителями (табуляция или точка с запятой). Формат чуть-чуть не такой (все значения желательно брать в двойные кавычки). То есть: "ячейка1_1";"ячейка1_2";"ячейка1_3" "ячейка2_1";"ячейка2_2";"ячейка2_3" на конце точку с запятой можно не ставить. В файле одна строка - одна строка из таблицы. Эксель (и блокнот тоже ) откроет этот файл без проблем
__________________
ваши спасибы шлите мне на вебмани или яндексДеньги. Какой у меня кошелек? Спросите в личку |
|||||||||||||||||||||||
17.03.2010, 09:57 | #13 |
Неактивный пользователь
Пол: Регистрация: 31.10.2008
Сообщений: 3
Репутация: 0
|
Re: Экспорт из dbgrid в excel
а по скорости так быстрее чем через xp report ?
|
28.03.2010, 08:25 | #14 |
Новичок
Пол: Регистрация: 28.03.2010
Сообщений: 3
Репутация: 0
|
Re: Экспорт из dbgrid в excel
Используй FastReport. там работы минут на я и будет тебе готовый экспорт в XML, Doc, PDF. что за хочешь
|
28.03.2010, 15:17 | #15 |
Неактивный пользователь
Пол: Регистрация: 18.01.2007
Адрес: Бийск
Сообщений: 56
Репутация: 12
|
Re: Экспорт из dbgrid в excel
К чему все эти сложности с FastReport и *.csv
Код HTML:
var e: variant; //Подключаемся к Excel try e:=GetActiveOleObject('Excel.Application'); except e:=CreateOleObject('Excel.Application'); end; e.WorkBooks.Add; //Создаем документ Excel //Здесь выводим данные из запроса (Например в первый столбец excel - первое поле запроса) for i:=0 to AdoQuery1.RecordCount-1 do begin e.activeSheet.cells(i, 1):=AdoQuery1.Fields.Fields[0].AsString; end; //Показываем Excel и отключаемся e.Visible:=true; e:=Unassigned; Последний раз редактировалось vovapetr; 28.03.2010 в 15:30.. Причина: дополнение |
Сказали спасибо: |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
DBGrid и flat | _wHiTe_ | Borland C++ Builder | 1 | 19.02.2013 20:14 |
Вопросы по DBGrid | zark1982 | Компоненты | 14 | 25.01.2010 15:49 |
DBGrid -> Txt | Revent | Delphi | 13 | 13.01.2009 14:19 |
Сортировка в DBgrid | IIpopoK | Delphi | 10 | 19.04.2008 23:50 |
А как в DBGrid'е? | Artispro | Delphi | 6 | 26.02.2008 19:58 |
|
|