Впервые в жизни столкнулся с такой задачкой, посмотрел на подобе вроде нету. Мне нужно выдернуть данные из ексельного файла со сложной структурой данные, которые могут быть не нормированы, т.е. не ограниченны по длине. Запись произвести в стринггрид или дбгрид. Нужны следующие поля А 5 или 10, т.е. те в которых есть надпись НОД 3, все D с названиями, причем коды нужно писать отдельно, все H соответствующие D, и все B с датами месяца и года в разные ячейки. Пробовал фильтрами, но это только отсеивает, а не прописывает. Надо прописать, что бы после можно было портировать данные эти в ораклинную базу. Меня еще останавливает, то что нельзя задать ячейки железно, на тот случай, если таблица пополнится новыми позициями
т.е. мне нужно найти и сверить сумму значений в столбце (это я выполнил) со значение в ячейки А65. Но не хотелось бы железно присваивать ячейку на случай её расширения.
unit Unit1; var Form1: TForm1; // b:real; implementation
{$R *.dfm} procedure LockGrid(Grid: TStringGrid); var i: Integer; begin for i := 0 to Pred(Grid.ColCount) do Grid.Cols[i].BeginUpdate; end;
procedure UnLockGrid(Grid: TStringGrid); var i: Integer; begin for i := 0 to Pred(Grid.ColCount) do Grid.Cols[i].EndUpdate; end;
curr := Pred(AGrid.FixedRows); for Row := 1 to Rows do begin Range := Sheet.Range['B' + IntToStr(Row), EmptyParam]; if not VarIsEmpty(Range) then begin s := Range.Value; if (s <> '') and (Ord(s[1]) <> 250) then begin s := Trim(s); // Inc(curr); SpacePos := LastDelimiter(Char(160), s); //AGrid.Cells[0, curr] := IntToStr(Row); //AGrid.Cells[1, curr] := Sheet.Range['A' + IntToStr(Row), EmptyParam].Value; //AGrid.Cells[2, curr] := Sheet.Range['B' + IntToStr(Row), EmptyParam].Value; AGrid.Cells[0, curr] := Copy(s, 1, 6); // Вот это как то работает AGrid.Cells[1, curr] := Copy(s, 7, Length(s)); AGrid.Cells[2, curr] := Sheet.Range['C' + IntToStr(Row), EmptyParam].Value; AGrid.Cells[3, curr] := Sheet.Range['D' + IntToStr(Row), EmptyParam].Value; AGrid.Cells[4, curr] := Sheet.Range['E' + IntToStr(Row), EmptyParam].Value; //порешил наконец то с ячейками end; end; end;
UnLockGrid(AGrid); AGrid.RowCount := curr + 1; Result := True; finally if not VarIsEmpty(XLApp) then begin // XLApp.DisplayAlerts := False; XLApp.Quit; XLAPP := Unassigned; Sheet := Unassigned; end; end; end;
//////////////////кнопка Загрузки procedure TForm1.Button2Click(Sender: TObject); var i,j,coma:integer; deb:string; st:string; begin // SocketConnection1.Connected:=true; // SocketConnection1.AppServer.OpenBase('ora8','fs_master','fs_master'); for i := 2 to StringGrid1.RowCount - 1 do begin deb:=StringGrid1.Cells[4,i]; //избавляемся от минусов-тире if (deb[1] = '-') then deb:=copy(deb,2,length(deb)-1);
coma := pos(',',deb); // избавляемся от точки в ячейки if coma<>0 then deb[coma]:='.'; //end; SocketConnection1.Connected:=true; SocketConnection1.AppServer.openbase('ORA8','fs_master','fs'); //коннект к БД
// st:='begin delete from test where NOD=A03'+' Commit;' +' end;';;
///////////////////кнопка Выхода procedure TForm1.Button3Click(Sender: TObject); begin Close; //тупо закрытие end;
//////////////////////// не придумал название кнопки procedure TForm1.Button4Click(Sender: TObject); //var MyRange, V: OleVariant; begin // MyRange := ExcelWorksheetl.Range[‘В2', EmptyParam]; // просмотр содержимого ячейки В2 //V := MyRange.Value; //ShowMessage(V); // занесение в ячейку значения из окна Editl //MyRange.Value := Editl.Text;
end;
///////////////////////////////////кнопка Выгрузки procedure TForm1.Button1Click(Sender: TObject); var a,b:real; i:integer;
begin if XL_GetInfo(StringGrid1, 'D:\КОАСУФР\ФО7ЛОКТ.xls') then //указание пути к файлику begin a:=0; //зануляем b:=0; //зануляем for i := 2 to StringGrid1.RowCount - 1 do // шагаем, дружно вниз a:=a+StrToFloat(StringGrid1.Cells[4,i]); // продолжаем шагать по ячейкам уже a:=a*(-1); //снова минус Form1.Label4.caption:= FloatToStr(a); //выводим на форму if a=b then //сравниваем ShowMessage('Закачка данных завершена корректно'); if a<>b then ShowMessage('Сумма итого расходиться с суммами по станциям, повторите закачку'); end; // begin // ShowMessage('Таблица "СводРазныхСборовПасс'); //end; end;
end.
Сообщение отредактировано: volvo -
--------------------
Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!