Пишу программу чтоб себе жизнь упростить...
...есть гору документов excel все они созданы с помощью какой то программы у всех одинаковые таблицы - мне нужно искать внутри таблицы нужное мне строку взять его параметр... и т.д.
у меня две проблемы возникли - из за того что в программе точнее на одной процедуре содержится много операторов
for - приводит к зависанию программы
Код:
begin
files:=0;
for lst := 0 to FileListBox1.Items.Count-1 do
begin
cleartable;
label3.Caption:='';
label4.Caption:='';
label6.Caption:='';
files:=files+1;
if Xls_To_StringGrid(StringGrid1, DirectoryListBox1.Directory+'\'+FileListBox1.Items[lst]) then //загрузка документов excel
/////////////////////////////////////
s1:=DirectoryListBox1.Directory+'\'+FileListBox1.Items[lst]; //берем путь к файлу
len:=length(s1); //удаляем с него ненужное
for i3 := 0 to Len do //оставляем только дату и название
begin
c_pos:=Pos('\', s1);
Delete(s1, 1, c_pos);
s2:=s1;
len:=length(s1);
c_pos:=Pos('_', s1);
Delete(s1, c_pos, len);
label3.Caption:=s1;
Delete(s2, 1, c_pos);
c_pos:=pos('.', s2);
Delete(s2, c_pos, len);
year:=copy(s2, 1, 4);
month:=copy(s2, 5, 2);
day:=copy(s2, 7, len);
label4.Caption:=year+'/'+month+'/'+day;
label6.Caption:=inttostr(StringGrid1.RowCount);
end;
/////////////////////////////////////
x_vbp:=0;
x_vap:=0;
x_vnp:=0;
for i:=1 to StringGrid1.RowCount-1 do
begin
if (StringGrid1.Cells[4,i]='VNOP') or
(StringGrid1.Cells[4,i]='VNP') then
begin
x_vnp:=x_vnp+strtofloat(StringGrid1.Cells[9,i]);
end;
if (StringGrid1.Cells[4,i]='VBP') or
(StringGrid1.Cells[4,i]='VBOP') then
begin
x_vbp:=x_vbp+strtofloat(StringGrid1.Cells[9,i]);
end;
if (StringGrid1.Cells[4,i]='VAP') or
(StringGrid1.Cells[4,i]='VAOP') then
begin
x_vap:=x_vap+strtofloat(StringGrid1.Cells[9,i]);
end;
StringGrid2.Cells[0,files]:=label3.Caption;
StringGrid2.Cells[1,files]:='';//NAME
StringGrid2.Cells[2,files]:=FloatToStrF(x_vbp, ffFixed, 18, 3);
StringGrid2.Cells[3,files]:=FloatToStrF(x_vnp, ffFixed, 18, 3);
StringGrid2.Cells[4,files]:=FloatToStrF(x_vap, ffFixed, 18, 3);
stringGrid2.RowCount:=StringGrid2.RowCount+1;
end;
end;
for i2 := 0 to StringGrid2.RowCount-1 do //удаляем пустые сроки с вроторой таблицы
begin
if StringGrid2.Cells[0,i2]='' then
begin
TDeleteGrid(StringGrid2).DeleteRow(i2);
end;
end;
end;
как то можно сделать чтоб программа работала не зависая?
и второй вопрос... можно ли внутри
StringGrid искать не методом сравнения как я это сделал
Код:
StringGrid1.Cells[4,i]='VBP'
а по маске
допустим в таблице есть много строк все которые начинаются с
VBP
Код:
VBP
VBP intnl
VBP extnl
VBP outnl
и. т.д.
искать их не методом сравнения полной имени а по маске
VBP* ???
- если честно у нем есть одна идея - выбрать каждую строку отделить начальные три буквы и сравнивать с
VBP - но это гора дополнительных операций
Что посоветуете???