|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
progressbar и экспорт в excel
Значит как сделать чтобы во время экспорта в 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
|
|||
|
|||
вроде только экспорт в эксель тормозит. и мне надо чтобы форма была с прогресс баром пока экспорт идет
|