![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
![]() Ребята всем привет..
- помогите разобраться с такой вот проблемой.. написал программу по обработки гору документов EXCEL но появилась проблема которая раздражает ...дело в том что как только выбираю папку с документами EXCEL и жму на кнопку Начать обработку работаем вот такой код Код берет по очереди файлы excel из FileListBox1 загружает его StringGrid1 потом ищет в нем нужные нам строку и берет его значение сохраняет в памяти если мы дошли до конца документа то эти значения добавляется в StringGrid2 - и так до конца FileListBox1 (пока не обработаем последний документ excel) Код:
var lst, i2, i4 :integer; number, rs :string; begin files:=0; for lst := 0 to FileListBox1.Items.Count-1 do begin //Загружаем документ EXCEL в StringGrid1 начинаем обработку if Xls_To_StringGrid(StringGrid1, DirectoryListBox1.Directory+'\'+FileListBox1.Items[lst]) then begin s1:=DirectoryListBox1.Directory+'\'+FileListBox1.Items[lst]; len:=length(s1); Application.ProcessMessages(); MyThread:=TMyThread.Create(False); MyThread.Priority:=tpNormal; end; x_cab:=0; x_rez:=0; x_nar:=0; x_other:=0; x_grs:=0; x_roa:=0; number:=''; for i:=1 to StringGrid1.RowCount-1 do begin if (StringGrid1.Cells[4,i]='NarDATA-Off') or (StringGrid1.Cells[4,i]='NarDATA-Pk') then begin x_nar:=x_nar+strtofloat(StringGrid1.Cells[9,i]); end; if (StringGrid1.Cells[4,i]='CabDATA-Pk') or (StringGrid1.Cells[4,i]='CabDATA-Off') then begin x_cab:=x_cab+strtofloat(StringGrid1.Cells[9,i]); end; if (StringGrid1.Cells[4,i]='RezDATA-Pk') or (StringGrid1.Cells[4,i]='RezDATA-Off') then begin x_rez:=x_rez+strtofloat(StringGrid1.Cells[9,i]); end; rs:=copy(StringGrid1.Cells[4,i], 1, 4); if rs='RSteel' then //rsteel begin x_grs:=x_grs+strtofloat(StringGrid1.Cells[9,i]); end; if rs='Roa' then //roa begin x_roa:=x_roa+strtofloat(StringGrid1.Cells[9,i]); end else begin if trim(StringGrid1.Cells[9,i])='' then begin end else x_other:=x_other+strtofloat(StringGrid1.Cells[9,i]); //other end; for i4 := 1 to StringGrid3.RowCount-1 do begin if trim(StringGrid3.Cells[0,i])=trim(label3.Caption) then number:=StringGrid3.Cells[1,i]; end; StringGrid2.Cells[0,files]:=label3.Caption; StringGrid2.Cells[1,files]:=number;//NAME StringGrid2.Cells[2,files]:=FloatToStrF(x_cab, ffFixed, 15, 3); //Cab DATA StringGrid2.Cells[3,files]:=FloatToStrF(x_nar, ffFixed, 15, 3); //Nar DATA StringGrid2.Cells[4,files]:=FloatToStrF(x_rez, ffFixed, 15, 3); //Rez DATA StringGrid2.Cells[5,files]:=FloatToStrF(x_grs, ffFixed, 15, 3);//RSteel DATA StringGrid2.Cells[6,files]:=FloatToStrF(x_roa, ffFixed, 15, 3);//Roa DATA StringGrid2.Cells[7,files]:=FloatToStrF(x_other-x_nar-x_cab-x_rez-x_grs, ffFixed, 15, 3);//Other DATA StringGrid2.Cells[8,files]:=FloatToStrF(x_other+x_roa, ffFixed, 15, 3);;//TOTAL stringGrid2.RowCount:=StringGrid2.RowCount+1; progressbar2.Position:=progressbar2.Position+1; end; end; for i2 := StringGrid2.RowCount-1 downto 1 do begin if trim(StringGrid2.Cells[2,i2])='' then // delete EMPTY rows TDeleteGrid(StringGrid2).DeleteRow(i2); end; end; StringGrid1 не виден в окне приложения - пользователю показывается только результат который попадает вовремя обработки в StringGrid2 но окно приложения мигает из за того что StringGrid1 не видел и его ВЫСОТА и ШИРИНА ровна 0 и оно находится в самом верхнем углу формы (LEFT - TOP = 0) При каждом обращении к след. документу excel - StringGrid1 меняет свои параметры ширины и высоты и это приводит к тому что окно приложения мигает - помогите разобраться как можно решить эту проблему...и можно ли как то по другому решить данную задачу без загрузки документа excel в StringGrid1?? Нет ничего не возможного. Вопрос только во времени... |
#2
|
|||
|
|||
![]() попробуй stringgrid1.visible:=false
Либо повтыкай в коде stringgrid1.height:=0; stringgrid1.width:=0; |
#3
|
||||
|
||||
![]() Цитата:
Это не решения. Нет ничего не возможного. Вопрос только во времени... |
#4
|
||||
|
||||
![]() LockWindowUpdate? не?
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#5
|
|||
|
|||
![]() Цитата:
Не, рельс. Руки выпрямлять. Чем обычный двумерный массив не подходит для промежуточного хранения данных? |
#6
|
||||
|
||||
![]() Цитата:
Спасибо за совет - но не могу кое чем разобраться как определить количество строк в динамическом массиве что бы настроить обработку поиска где Код:
for i:=1 to ??? do begin if (a[i,4]='NarDATA-Off') or (a[i,4]='NarDATA-Pk') then begin x_nar:=x_nar+strtofloat(a[i,9]); end; что должно быть вместо "???" High(a) выдает ошибку Range Check Error помоги разобраться а то массивами у меня всегда проблемы Разобрался - спасибо спасибо спасибо всем масссссссссивыыыы класная штука программа сейчас даже шустро работает))) проблема была Код:
if rs='Roa' then //roa begin x_roa:=x_roa+strtofloat(a[i,9]); end else begin if trim(a[9,i])='' then // ТУТ ЗАБЫЛ ИСПРАВИТЬ a[9,i] на a[i,9] begin ... ... Нет ничего не возможного. Вопрос только во времени... Последний раз редактировалось M.A.D.M.A.N., 29.10.2013 в 08:35. |