![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Значит как сделать чтобы во время экспорта в excel, чтобы пользователь не видел как формируется страничка. Красовалась форма с progressbar и шла загрузка. Может кто сталкивался с подобным подскажите или еще скиньте исходник если есть. плиз.
|
|
#2
|
|||
|
|||
|
Создаешь форму с прогресс-баром, делаешь ей стиль, fsStayOnTop, показываешь ее через Show и начинаешь выполнять экспорт. По тому, как у тебя идут операции экспорта, обновляешь прогресс-бар и вызываешь у это формы метод Update (или Redraw, если больше нравится). Все.
|
|
#3
|
|||
|
|||
|
а компонет таймер нужен. вообще только одна процедура нужна???
|
|
#4
|
||||
|
||||
|
Смотря как у тебя данные выгружаются в Excel, если в цикле перебираешь строки в таблице, то тут и думать не надо, просто progressbar.Position:=progressbar.Position+1 (если слишком быстро все происходит, можно после этой строчки добавить Application.ProcessMessages).А если через компонент какойнить,то тут отдельно нужно рассматривать компонент |
|
#5
|
|||
|
|||
|
может у кого исходник есть а то самому разбираться времени нет. а очень нужно срочно
|
|
#6
|
|||
|
|||
|
Цитата:
|
|
#7
|
|||
|
|||
|
Цитата:
Вот мой код экспорта Код:
procedure TForm5.SpeedButton3Click(Sender: TObject);
var
ExcelApp : variant;
row :integer;
col:integer;
begin
form10.ShowModal;
dbgrid1.DataSource.DataSet.First;
ExcelApp:=CreateOleObject('Excel.Application');
ExcelApp.workbooks.open(ExtractFilePath(ParamStr(0))+'OtchetPokyp.xls');
ExcelApp.Visible := true;
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;
DBGrid1.DataSource.DataSet.Next;
ExcelApp.Range[excelapp.cells[7,1],excelapp.cells[7+DBGrid1.DataSource.DataSet.RecordCount-1,9]].select;
ExcelApp.Selection.Borders.LineStyle:= xlContinuous;
end;
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col-6].value:='м.п.';
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col].value:='Подпись';
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col+1].value:='_________'
end; |
|
#8
|
|||
|
|||
|
Цитата:
Вот мой код экспорта Код:
procedure TForm5.SpeedButton3Click(Sender: TObject);
var
ExcelApp : variant;
row :integer;
col:integer;
begin
form10.ShowModal;
dbgrid1.DataSource.DataSet.First;
ExcelApp:=CreateOleObject('Excel.Application');
ExcelApp.workbooks.open(ExtractFilePath(ParamStr(0))+'OtchetPokyp.xls');
ExcelApp.Visible := true;
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;
DBGrid1.DataSource.DataSet.Next;
ExcelApp.Range[excelapp.cells[7,1],excelapp.cells[7+DBGrid1.DataSource.DataSet.RecordCount-1,9]].select;
ExcelApp.Selection.Borders.LineStyle:= xlContinuous;
end;
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col-6].value:='м.п.';
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col].value:='Подпись';
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col+1].value:='_________'
end; |
|
#9
|
||||
|
||||
|
Код:
procedure TForm5.SpeedButton3Click(Sender: TObject);
var
ExcelApp : variant;
row :integer;
col:integer;
begin
PRogressbar.position:=0;
Progressbar.min:=0;
Progressbar.max:=DBGrid1.DataSource.DataSet.RecordCount-1;
Progressbar.step:=1;
form10.ShowModal;
dbgrid1.DataSource.DataSet.First;
ExcelApp:=CreateOleObject('Excel.Application');
ExcelApp.workbooks.open(ExtractFilePath(ParamStr(0))+'OtchetPokyp.xls');
ExcelApp.Visible := true;
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;
PRogressbar.position:=PRogressbar.position+1;
DBGrid1.DataSource.DataSet.Next;
ExcelApp.Range[excelapp.cells[7,1],excelapp.cells[7+DBGrid1.DataSource.DataSet.RecordCount-1,9]].select;
ExcelApp.Selection.Borders.LineStyle:= xlContinuous;
end;
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col-6].value:='м.п.';
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col].value:='Подпись';
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col+1].value:='_________'
end; |
|
#10
|
||||
|
||||
|
Предполагается что у вас на форме есть ProgressBar1.
Код:
procedure TForm5.SpeedButton3Click(Sender: TObject);
var
ExcelApp : variant;
row :integer;
col:integer;
begin
form10.ShowModal;
dbgrid1.DataSource.DataSet.First;
ExcelApp:=CreateOleObject('Excel.Application');
ExcelApp.workbooks.open(ExtractFilePath(ParamStr(0))+'OtchetPokyp.xls');
ExcelApp.Visible := true;
ExcelApp.WorkBooks[1].WorkSheets[1].Name := 'Отчет1';
ProgressBar1.Max := DBGrid1.DataSource.DataSet.RecordCount-1;
ProgressBar1.Position := 0;
ProgressBar1.Step := 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;
ProgressBar1.StepIt;
Application.ProcessMessages;
DBGrid1.DataSource.DataSet.Next;
ExcelApp.Range[excelapp.cells[7,1],excelapp.cells[7+DBGrid1.DataSource.DataSet.RecordCount-1,9]].select;
ExcelApp.Selection.Borders.LineStyle:= xlContinuous;
end;
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col-6].value:='м.п.';
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col].value:='Подпись';
ExcelApp.WorkBooks[1].WorkSheets[1].cells[row+8,col+1].value:='_________'
end; |
|
#11
|
||||
|
||||
|
Немножко не успел
![]() А пользоваться лучше не прямой записью в значение, а процедурой и гарантировано обновлять экран: Код:
ProgressBar1.StepIt; Application.ProcessMessages; Последний раз редактировалось Страдалецъ, 27.04.2009 в 20:31. |
|
#12
|
|||
|
|||
|
чет не работает.сразу документ экселевский открывается
|
|
#13
|
|||
|
|||
|
страдалец. тоесть на форме где dbgrid
|
|
#14
|
||||
|
||||
|
Если у вас очень маленький документик, то естественно вы ничего увидеть не успеваете. Если есть желание искуственно затормозить, можно добавить комманду Sleep(500); после обновления прогресбара.
|
|
#15
|
|||
|
|||
|
вроде только экспорт в эксель тормозит. и мне надо чтобы форма была с прогресс баром пока экспорт идет
|