![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите организовать поиск и удаление строки в Excele [D7, XP]
rodionov_uv © (2012-03-29 12:35:00)Столкнулся с проблемой поиска и удаления строки в Excele.
Суть программы имеем некий Excel файл с тремя вкладками : наименованием товара, наименованием работ и вкладка Temp куда вставляются значения из первых двух вкладок для дальнейшей распечатки.
вставляю строки так :
procedure TFormTovarchek.ButAddClick(Sender: TObject);
var sum : integer;
begin
if (KollEdit.Text = '') or (TovarEdit.Text = '') then
begin
Application.MessageBox('У Вас заполнены не все поля.', 'Предупреждение', MB_ICONWARNING+MB_OK);
KollEdit.SetFocus;
Abort;
end;
if TovarEdit.Text <> DBGridEh1.Fields[0].DisplayText then
begin
Application.MessageBox('У Вас не правильно заполнено поле ввода.', 'Предупреждение', MB_ICONWARNING+MB_OK);
TovarEdit.SetFocus;
Abort;
end;
ButPrint.Enabled := True;
ADOQuery2.Close;
sum := StrToInt(ZenaEdit.Text)*StrToInt(KollEdit.Text);
with ADOQuery2.Sql do
begin
Clear;
Add('INSERT INTO [Temp$] (name, ed, cena, kol, itog) ');
Add('VALUES ('''+TovarEdit.Text+''', '''+EdizmEdit.Text+''', '''+ZenaEdit.Text+''', '''+KollEdit.Text+''', '''+IntToStr(sum)+''')');
end;
ADOQuery2.ExecSQL;
ADOQuery2.Close;
KollEdit.Text := '';
TovarEdit.Text := '';
with ADOQuery2.SQL do
begin
Clear;
Add('select *');
Add('from [Temp$]');
end;
ADOQuery2.Open;
DBGridEh2.Columns[4].Footer.Value := intToStr(SumItog);
end;
Очищаю вкладку Temp так :
procedure TFormTovarchek.ButClearClick(Sender: TObject);
var
Excel, exSheet: Variant;
WBk : OleVariant;
nam: string;
begin
nam := ExtractFilePath(Application.ExeName)+'Справочник.xls';
ADOConnection2.Connected := False;
ADOQuery2.Close;
Excel := CreateOleObject('Excel.Application');
WBk := Excel.WorkBooks.Open(nam);
Excel.Visible := False;
exSheet := WBk.WorkSheets[3];
exSheet.Range['A2:T100'].Clear;
exSheet := Unassigned;
WBk.Close(SaveChanges := True);
Excel.Quit;
ADOConnection2.Connected := True;
ADOQuery1.Open;
ADOQuery2.Open;
DBGridEh2.Columns[4].Footer.Value := intToStr(SumItog);
end;
пробовал искать так :
var
vFind: OleVariant;
s: String;
..............
vFind:=vFind.Find(s);
if Pointer(IDispatch(vFind))<>nil then ShowMessage('Нашёл');
..............
выскакивает ошибка.Перепробовал все варианты из интернета везде ошибка выскакивает.
помогите плиз
rodionov_uv (2012-03-29 17:44:00) [1]Всё проблему решил
procedure TFormTovarchek.ButDelClick(Sender: TObject);
var
Excel, exSheet : Variant;
WBk : OleVariant;
nam : string;
i : integer;
begin
ButDel.Enabled := False;
nam := ExtractFilePath(Application.ExeName)+'Ñïðàâî÷íèê.xls';
i := ADOQuery2.RecNo;
ADOConnection2.Connected := False;
ADOQuery2.Close;
Excel := CreateOleObject('Excel.Application');
WBk := Excel.WorkBooks.Open(nam);
Excel.Visible := False;
Excel.DisplayAlerts:=False;
exSheet := WBk.WorkSheets[3];
exSheet.Rows[i+1].Delete;
exSheet := Unassigned;
WBk.Close(SaveChanges := True);
Excel.Quit;
ADOConnection2.Connected := True;
ADOQuery1.Open;
ADOQuery2.Open;
DBGridEh2.Columns[4].Footer.Value := intToStr(SumItog);
end;
Медвежонок Пятачок (2012-03-29 12:41:00) [2]не надо вставлять никаких данных в лист темп. тем более из делфи.
лист темп должен содержать формулы-ссылки на данные других листов.