Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

поиск ячеек по excel файлам [D6, WinXP]


Страницы:   1 2 3

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;

Удачи :)


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо