![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
поиск ячеек по excel файлам [D6, WinXP]
kate158 © (2009-09-22 16:03:00)что делаю:1.ищу excel файлы в папке (их названия у меня в мемо).2.нахожу опр ячейку по всем эксель файлам(ее адрес введен на форме в эдит поле).3. копирую название файла и значение ячейкив блокнот. вопрос таков. что неверно написано в коде (поиск ячейки по всем файлам):
procedure TForm1.Button3Click(Sender: TObject);
var
D1, D2 : Variant;
E, W, SB,SH : Variant;
i:integer;
BEGIN
E := CreateOleObject('Excel.Application');
E.DisplayAlerts := False;
for i:=0 to Memo1.Lines.Count - 1 do
E.WorkBooks.Open(trim(Memo1.Lines[i]), ReadOnly:=True);
W := E.WorkBooks.Item[1];
SH := W.Sheets.Item[1];
D1 := SH.Range[EditAA.Text].Value;
i:=i+1;
showmessage(d1);
//E.Visible:=true;
e.WorkBooks.close;
Application.ProcessMessages;
end;
цикл по файлам работает, на данным из ячейки нет..не могу догнать в чем ошибка
Thrashead (2009-09-22 17:24:00) [41]я ещё добавил бы проверку на существование файла:
...
for i:=0 to Memo1.Lines.Count-1 do
if FileExists(Memo1.Lines[i]) then
begin
...
Thrashead (2009-09-22 17:12:00) [42]сергей М.
:) я перепутал малость. бывает.
Сергей М. (2009-09-22 17:10:00) [43]
> осбободить память: E.Free
С чего бы Free ?
Это же не дельфийский объект, чтобы ему фри устраивать)
Thrashead (2009-09-22 17:10:00) [44]п.4 - я немного напутал... - Надо Excel.Quit;
Насколько помню, чтобы получить значение ячейки, надо обращаться к Cell, причём по её "числовым координатам". А Range - это нечто другое, а именно диапазон ячеек, например "A1:H8". Если не ошибаюсь, у Range нет свойства Value.
Вообщем, как-то так:
procedure TForm1.Button3Click(Sender: TObject);
var
ExcelApp, WorkSheet: Variant;
SomeValue: String;
i: Integer;
begin
if Memo1.Lines.Count>0 then
begin
Excel: CreateOleObject('Excel.Application');
Excel.Visible:=False;
for i:=0 to Memo1.Lines.Count-1 do
begin
Excel.Workbooks.Open(Memo1.Lines[i]);
WorkSheet:=Excel.Workbooks[1].WorkSheets[1];
SomeValue:=VarToStr(WorkSheet.Cells[1,1]);
ShowMessage(SomeValue);
Excel.Workbooks.Close;
end;
Excel.Quit;
end;
end;
Thrashead (2009-09-22 16:43:00) [45]1) после строки
for i:=0 to Memo1.Lines.Count - 1 do
блок операторов заключить в begin end; иначе не понятно, как вообще "цикл по файлам работает".
2) при использовании "for ..." нет необходимости наращивать счётчик i внутри цикла, for сам "щелкает".
3) возможно, следует (на всякий случай) проверять сначала количество строк в Memo1, а вдруг там пусто?
4) после всей обработки осбободить память: E.Free;
Удачи :)