Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Портал .::2BakSa.WS::.
Вернуться   Компьютерный форум NoWa.cc > В помощь вебмастеру > Программирование > Базы данных

Уважаемые пользователи nowa.cc и 2baksa.ws. У нас сложилось тяжёлое финансовое положение. Мы работаем для вас вот уже более 15 лет и сейчас вынуждены просить о помощи. Окажите посильную поддержку проектам. Мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: 826074280762 Webmoney WME: 804621616710
PayPal PayPal_Email E-mail для связи по вопросу помощи
Кошелёк для вашей помощи YooMoney 4100117770549562
YooMoney Спасибо за поддержку!
Ответ
 
Опции темы Опции просмотра Language
Старый 29.07.2008, 11:35   #1
Неактивный пользователь
 
Регистрация: 29.07.2008
Сообщений: 1
Репутация: 0
По умолчанию Экспорт из dbgrid в excel

Я совсем чайник, поэтому заранее сорри. Учусь в Delphi 7.
Сделал sql-запрос из базы Access (через ADO Connection), вывожу в dbgrid, нужно результаты экспортнуть в excel.
Не могу разобраться, прочитал много всего. Если можно - пример кода, плиз
Задачка совсем не новая, но разобраться очень хочется.
sirkey вне форума
 
Ответить с цитированием Вверх
Здесь может быть Ваша реклама
Здесь может быть Ваша реклама


Реклама: анакондаз концертбарная стойка купить для кухниборная кислота купить 25 кгкерамический гранитВся техника в KNSneva.ru - Archer AX80 - доставкой по Санкт-Петербургу и СЗАО


Старый 29.07.2008, 11:59   #2
Hunter_Tj
Постоялец
 
Аватар для Hunter_Tj
 
Пол:Мужской
Регистрация: 01.02.2007
Адрес: Kiev
Сообщений: 303
Репутация: 155
По умолчанию Ответ: Экспорт из dbgrid в excel

Цитата:
Сообщение от sirkey Посмотреть сообщение
...нужно результаты экспортнуть в excel.
Не могу разобраться, прочитал много всего. Если можно - пример кода, плиз...

http://sources.ru/delphi/db/export_contents_dbgrid_to_excel_or_clipboard.shtml
Hunter_Tj вне форума
 
Ответить с цитированием Вверх
Старый 29.07.2008, 12:17   #3
hack
Старожил
 
Аватар для hack
 
Пол:Мужской
Регистрация: 27.05.2005
Адрес: Тверь (Первомайка)
Сообщений: 1,929
Репутация: 3260
По умолчанию Ответ: Экспорт из 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..
hack вне форума
 
Ответить с цитированием Вверх
Эти 2 пользователя(ей) сказали cпасибо за это полезное сообщение:
Старый 29.07.2008, 20:47   #4
while
Неактивный пользователь
 
Аватар для while
 
Регистрация: 21.07.2008
Адрес: Кривой Рог, Украина
Сообщений: 19
Репутация: 6
По умолчанию Ответ: Экспорт из dbgrid в excel

Используй DBGridEh. Именно Grid и именно в CSV, XLS
while вне форума
 
Ответить с цитированием Вверх
Старый 03.10.2008, 12:41   #5
javdet0307
Неактивный пользователь
 
Регистрация: 20.06.2008
Сообщений: 4
Репутация: 1
По умолчанию Re: Экспорт из dbgrid в excel

DevExpress TcxGrid. Имеется встроенная функция экспорта грида в excel.
javdet0307 вне форума
 
Ответить с цитированием Вверх
Старый 23.10.2008, 15:42   #6
agent_smith
Пользователь
 
Пол:Мужской
Регистрация: 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..
agent_smith вне форума
 
Ответить с цитированием Вверх
Старый 26.01.2009, 11:00   #7
Petro123
Неактивный пользователь
 
Регистрация: 26.01.2009
Сообщений: 3
Репутация: 0
По умолчанию Re: Экспорт из dbgrid в excel

А если Excel не установлен?
Petro123 вне форума
 
Ответить с цитированием Вверх
Старый 26.01.2009, 12:23   #8
agent_smith
Пользователь
 
Пол:Мужской
Регистрация: 07.03.2008
Адрес: Киев
Сообщений: 111
Репутация: 35
По умолчанию Re: Экспорт из dbgrid в excel

Цитата:
Сообщение от Petro123 Посмотреть сообщение
А если Excel не установлен?

Создай файл с расширением cvs (вроде) и запиши туда данный в формате, например:
ячейка1_1;ячейка1_2;ячейка1_3;
ячейка2_1;ячейка2_2;ячейка2_3;
и т.д., формат может не точный
И потом его можно открыть Excel.
agent_smith вне форума
 
Ответить с цитированием Вверх
Старый 17.04.2009, 02:31   #9
onzone
Неактивный пользователь
 
Регистрация: 17.04.2009
Сообщений: 1
Репутация: 0
По умолчанию Re: Экспорт из dbgrid в excel

Да я тоже столкнулся с проблемой экспорта из dbgrid в excel)) только на С++ builder народ помогите плз если кто может чайнику!!!
А лучше если можно закиньте исходник проги которая экспорт выполняет

Последний раз редактировалось onzone; 17.04.2009 в 02:38..
onzone вне форума
 
Ответить с цитированием Вверх
Старый 17.04.2009, 10:23   #10
Hunter_Tj
Постоялец
 
Аватар для Hunter_Tj
 
Пол:Мужской
Регистрация: 01.02.2007
Адрес: Kiev
Сообщений: 303
Репутация: 155
По умолчанию Re: Экспорт из dbgrid в excel

Цитата:
Сообщение от onzone Посмотреть сообщение
Да я тоже столкнулся с проблемой экспорта из dbgrid в excel)) только на С++ builder народ помогите плз если кто может чайнику!!!
А лучше если можно закиньте исходник проги которая экспорт выполняет

Код не мой, когда-то нашел в инете, но он рабочий....

Код:
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;
}
Hunter_Tj вне форума
 
Ответить с цитированием Вверх
Старый 03.06.2009, 00:43   #11
Morfez69
Неактивный пользователь
 
Регистрация: 03.06.2009
Сообщений: 7
Репутация: 3
По умолчанию Re: Экспорт из dbgrid в excel

Цитата:
Сообщение от Hunter_Tj Посмотреть сообщение
Код не мой, когда-то нашел в инете, но он рабочий....

Код:
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;
}

все бы хорошо если бы это был не 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;
Morfez69 вне форума
 
Ответить с цитированием Вверх
Старый 03.06.2009, 21:02   #12
RichDad
Пользователь
 
Пол:Мужской
Регистрация: 12.03.2008
Сообщений: 62
Репутация: 12
По умолчанию Re: Экспорт из dbgrid в excel

Цитата:
Сообщение от agent_smith Посмотреть сообщение
Создай файл с расширением cvs (вроде) и запиши туда данный в формате, например:
ячейка1_1;ячейка1_2;ячейка1_3;
ячейка2_1;ячейка2_2;ячейка2_3;
и т.д., формат может не точный
И потом его можно открыть Excel.

формат называется csv - это текст с разделителями (табуляция или точка с запятой).

Формат чуть-чуть не такой (все значения желательно брать в двойные кавычки).

То есть:

"ячейка1_1";"ячейка1_2";"ячейка1_3"
"ячейка2_1";"ячейка2_2";"ячейка2_3"

на конце точку с запятой можно не ставить. В файле одна строка - одна строка из таблицы.

Эксель (и блокнот тоже ) откроет этот файл без проблем
__________________
ваши спасибы шлите мне на вебмани или яндексДеньги. Какой у меня кошелек? Спросите в личку
RichDad вне форума
 
Ответить с цитированием Вверх
Старый 17.03.2010, 09:57   #13
foxdayk
Неактивный пользователь
 
Пол:Мужской
Регистрация: 31.10.2008
Сообщений: 3
Репутация: 0
По умолчанию Re: Экспорт из dbgrid в excel

а по скорости так быстрее чем через xp report ?
foxdayk вне форума
 
Ответить с цитированием Вверх
Старый 28.03.2010, 08:25   #14
SouthBase
Новичок
 
Пол:Мужской
Регистрация: 28.03.2010
Сообщений: 3
Репутация: 0
По умолчанию Re: Экспорт из dbgrid в excel

Используй FastReport. там работы минут на я и будет тебе готовый экспорт в XML, Doc, PDF. что за хочешь
SouthBase вне форума
 
Ответить с цитированием Вверх
Старый 28.03.2010, 15:17   #15
vovapetr
Неактивный пользователь
 
Пол:Мужской
Регистрация: 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;
скачай Василий Корняков Программирование документов и приложений MS Office в Delphi, хорошая книга

Последний раз редактировалось vovapetr; 28.03.2010 в 15:30.. Причина: дополнение
vovapetr вне форума
 
Ответить с цитированием Вверх
Ответ


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 10:53. Часовой пояс GMT +3.


Copyright ©2004 - 2024 2BakSa.WS

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.20599 секунды с 11 запросами