Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 02.06.2009, 19:28   #1
Neba
Пользователь
 
Регистрация: 26.11.2008
Сообщений: 11
Вопрос DBGrid->EXCEL

Хочу содержымое DBGrid перегнать в ексель.

Вот код:
procedure ExportDBGrid(toExcel: Boolean);
var
bm: TBookMark;
col, row: Integer;
sline: string;
mem: TMemo;
ExcelApp: Variant;
begin
Screen.Cursor := crHourglass;
DBGrid1.DataSource.DataSet.DisableC ontrols;
bm := DBGrid1.DataSource.DataSet.GetBookm ark;
DBGrid1.DataSource.DataSet.First;
if toExcel then
begin
ExcelApp := CreateOleObject('Excel.Application' );
ExcelApp.WorkBooks.Add(xlWBatWorkSh eet);
ExcelApp.WorkBooks[1].WorkSheets[1].name := 'Grid Data';
end;

mem := TMemo.Create(Self);
mem.Visible := false;
mem.Parent := MainForm;
mem.Clear;
sline := '';

for col := 0 to DBGrid1.FieldCount-1 do
sline := sline + DBGrid1.Fields[col].DisplayLabel + #9;
mem.Lines.Add(sline);

for row := 0 to DBGrid1.DataSource.DataSet.RecordCo unt-1 do
begin
sline := '';
for col := 0 to DBGrid1.FieldCount-1 do
sline := sline + DBGrid1.Fields[col].AsString + #9;
mem.Lines.Add(sline);
DBGrid1.DataSource.DataSet.Next;
end;

mem.SelectAll;
mem.CopyToClipboard;

if toExcel then
begin
ExcelApp.Workbooks[1].WorkSheets['Grid Data'].Paste;
ExcelApp.Visible := true;
end;

FreeAndNil(ExcelApp);
DBGrid1.DataSource.DataSet.GotoBook mark(bm);
DBGrid1.DataSource.DataSet.FreeBook mark(bm);
DBGrid1.DataSource.DataSet.EnableCo ntrols;
Screen.Cursor := crDefault;
end;


И видает такие ошибки:
[Error] fmNaclsU.pas(153): Undeclared identifier: 'TBookMark'
[Error] fmNaclsU.pas(160): Undeclared identifier: 'DBGrid1'
Neba вне форума
Старый 02.06.2009, 19:31   #2
Claster
Форумчанин
 
Аватар для Claster
 
Регистрация: 02.09.2008
Сообщений: 340
По умолчанию

Вот тебе компонент, да прибудет с тобой сила (Експорт в Excel SQL WORD TXT и многое многое другое)
Вложения
Тип файла: rar emsquickexport.rar (322.1 Кб, 526 просмотров)
Цитата:
- Только сисадмин может попросить у начальства 20$ на память...
Claster вне форума
Старый 02.06.2009, 21:55   #3
Hobbit_88
Пользователь
 
Аватар для Hobbit_88
 
Регистрация: 08.04.2009
Сообщений: 41
По умолчанию

Код:
procedure TForm5.SpeedButton3Click(Sender: TObject);
var
ExcelApp : variant;
row :integer;
col:integer;
begin
dbgrid1.DataSource.DataSet.First;
ExcelApp:=CreateOleObject('Excel.Application');
ExcelApp.workbooks.open(ExtractFilePath(ParamStr(0))+'OtchetPokyp.xls');
ExcelApp.Visible := false;
ExcelApp.WorkBooks[1].WorkSheets[1].Name := 'Отчет1';
for row :=0 to DBGrid1.DataSource.DataSet.RecordCount-1 do
begin
for col :=0 to DBGrid1.Columns.Count-1 do
begin
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+7,col+2].value:=dbgrid1.DataSource.DataSet.Fields[col].AsString;
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+7,1]:=row+1;
end;
ExcelApp.Visible := True;
end;
Вот держи код должен работать. Только в сеции uses не забудь добавитьExcelXP, comobj. Если что не будет работать спрашивай. Еще для этого кода надо Ексельвский документ создать с шапкой. И работает он нажатием на кнопку достаточно простой и эфективный код.

Последний раз редактировалось Hobbit_88; 02.06.2009 в 21:59.
Hobbit_88 вне форума
Старый 04.06.2009, 22:45   #4
oblachko
Пользователь
 
Регистрация: 04.12.2008
Сообщений: 55
По умолчанию

Код:
XL, XArr: Variant;
 i: Integer;
 j: Integer;
begin


 XArr:=VarArrayCreate([1,ADOQuery1.FieldCount],varVariant);
 XL:=CreateOLEObject('Excel.Application');
 XL.WorkBooks.add;
 XL.visible:=true;

 j := 1;

 ADOTable1.First;
 while not ADOQuery1.Eof do
  begin
   i:=1;
   while i<=ADOQuery1.FieldCount do
    begin
     XArr[i] := ADOQuery1.Fields[i-1].Value;
     i := i+1;
    end;
   XL.Range['A'+IntToStr(j),
   CHR(64+ADOQuery1.FieldCount)+IntToStr(j)].Value := XArr;
   ADOQuery1.Next;
   j:=j+1;
  end;

XL.Range['A1',CHR(64+ADOQuery1.FieldCount)+IntToStr(j)].select;

 XL.Selection.Font.Name:='Arial cur';
 XL.Selection.Font.Size:=10;
 XL.selection.Columns.AutoFit;
 XL.Range['A1','A1'].select;
oblachko вне форума
Старый 05.06.2009, 11:18   #5
ScorpioN_T
Пользователь
 
Регистрация: 27.10.2008
Сообщений: 62
По умолчанию

Цитата:
Hobbit_88
я вижу в моей теме по бывал
Вот еще один вариант, но УЖЕ без ШАПКИ, т.е. не надо отдельно созавать на компе Excel документ...
Код:
procedure TForm2.SpeedButton5Click(Sender: TObject);
var
ExcelApp : variant;
row :integer;
col:integer;
begin
dbgrid1.DataSource.DataSet.First;

ExcelApp:=CreateOLEObject('Excel.Application'); // создает объект
ExcelApp.WorkBooks.add; //новый док
ExcelApp.visible:=true;  // показывает док

ExcelApp.WorkBooks[1].WorkSheets[1].Name := 'ScorpioN'; // переименовывание ЛИСТА 1

for col :=0 to DBGrid1.Columns.Count-1 do
ExcelApp.WorkBooks[1].WorkSheets[1].cells[6,col+2].value:=dbgrid1.fields[col].displaylabel;

for row :=0 to DBGrid1.DataSource.DataSet.RecordCount-1 do
begin
for col :=0 to DBGrid1.Columns.Count-1 do
begin
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+7,col+2].value:=dbgrid1.DataSource.DataSet.Fields[col].AsString;
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+7,1]:=row+1;
end;
DBGrid1.DataSource.DataSet.Next;
end;

ExcelApp.WorkBooks[1].WorkSheets[1].cells[1,1]:='Дата';
ExcelApp.WorkBooks[1].WorkSheets[1].cells[1,2]:=datetostr(now);
ExcelApp.WorkBooks[1].WorkSheets[1].visible:=true;
ExcelApp.WorkBooks[1].WorkSheets[2].visible:=false;
ExcelApp.WorkBooks[1].WorkSheets[3].visible:=false;
end;
ScorpioN_T вне форума
Старый 27.04.2010, 14:58   #6
DaMadQuest
Пользователь
 
Регистрация: 17.03.2010
Сообщений: 21
По умолчанию

а как сделать несколько ячеек в одну?

ExcelApp.WorkBooks[1].WorkSheets[1].Range['D1']:='name';

мне нужно, чтобы она занимала несколько ячеек. помогите пожалуйста

и еще, как перевернуть текст в ячейке?
DaMadQuest вне форума
Старый 29.04.2010, 21:31   #7
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Поясните последний вопрос - что нужно сделать, что значит несколько ячеек?
motorway вне форума
Старый 03.11.2010, 05:23   #8
fum
Новичок
Джуниор
 
Регистрация: 03.11.2010
Сообщений: 1
По умолчанию

20 часов поисков наконец то увенчались успехом!) Теперь этот долбаный dbgrid выводится в excel! Ура! Спасибо всем вам!))))))
fum вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как загрузить в DBGrid таблицу из Excel artemavd БД в Delphi 11 13.04.2011 09:41
Сделать так, чтобы в DBGrid выводилась таблица Excel Илюха БД в Delphi 10 06.05.2010 15:59
перенос данных из DBGrid в DBGrid KingSize БД в Delphi 17 24.04.2009 09:30
Выаод из DBGrid в EXcel (странный способ) Girl БД в Delphi 1 02.04.2009 08:47
Вставка данных(Excel) из clipboard в DBGrid mahsus Общие вопросы Delphi 1 07.10.2007 02:02