Как работать из Delphi с файлами Excel

Как работать из Delphi с файлами Excel

Часто люди хранят данные в файлах Excel, возможно так для них удобнее. Однако, когда наступает момент , что  надо обработать большой их объем, то необходимы макросы или утилиты. В данной статье мы рассмотрим второй способ – написание небольшой утилиты, которая считает данные из файла Excle,  обработает их и запишет результат в другой файл.

Рассматриваемая далее утилита, открывает файл Excle,  ищет в нем лист в котором есть  первая не пустая ячейка. Считывает данные по успеваемости учащихся и вычисляет средний балл. Код , который реализует это приведен ниже , он снабжен комментариями и потому должен быть предельно понятен.

Приложение и полный исходный код можно скачать здесь.


function TfrmMain.ProcessFile(AFileName: string): Boolean;

var

Excel, Sheet, Range, Columns: Variant;

i, j , k, lIndex, lCountR, lCountC, lCount, lTMP : Integer;

lStr: string;

lSum, lValue: Double;

begin

Result:= True;

try

  try

    {Создаем com - объект }

    Excel := CreateOleObject('Excel.Application');

    {Устанавливаем свойства приложения Excel, которые происходят в момент

    обращения к данным, упрощает загрузку данных }

    Excel.Application.ScreenUpdating := False;

    Excel.Application.EnableEvents := True;

    Excel.Application.Interactive := True;

    Excel.Application.DisplayAlerts := false;

    Excel.Application.DisplayStatusBar := True;

    Excel.Visible := false;

   {открываем файл с excel }

   Excel.Workbooks.Open(AFileName, false, false);

   {Перебираем листы файла Excel, до тех ор пока не найдем, такой что первая

   ячейка запущена}

   for I := 1 to Excel.Sheets.Count do

   begin

   {запоминаем ссылку налист}

   Sheet:= Excel.Workbooks[1].WorkSheets[i];

   if Trim(VarToStr(Sheet.Cells[1,1])) <> '' then begin

   lIndex:= i;

   j:= 1;

   lCountR:= 0;

   {персматриваем ячейки фйла Excel}

   while VarToStr(Sheet.Cells[j, 2]) <> '' do

   begin

     inc(lCountR);

     inc(j);

   end;

   j:= 1;

   lCountC:= 0;

    while VarToStr(Sheet.Cells[2,j]) <> '' do

    begin

      inc(lCountC);

      inc(j);

    end;

  end;

end;

pbSheets.Max:= lCountR*lCountC;

pbSheets.Position:= 0;

Sheet:= Excel.Workbooks[1].WorkSheets[lIndex];

{Подмчитываем средний балл}

for i:= 1 to lCountR do

begin

  lSum:= 0;

   lCount:= 0;

   for j:= 0 to lCountC do

   begin

     pbSheets.Position:= pbSheets.Position+1;

     lStr:= VarToStr(Sheet.Cells[i+1, j+2]);

     if TryStrToFloat(lStr, lValue) then begin

       inc(lCount);

       lSum:= lSum+lValue;

     end;

   end;

   if lCount <> 0 then begin

      Sheet.Cells[i+1, j]:= FloatToStr(lSum);

      Sheet.Cells[i+1, j+1]:= IntToStr(lCount);

      lValue:= RoundTo(lSum/lCount+0.000000000001, -1);

      Sheet.Cells[i+1, j+2]:= FloatToStr(lValue);

      lTMP:= Round(lValue*100);

      Sheet.Cells[i+1, j+3]:= FindZNO(FConditions, lTMP);
    end;

  end;

  {сохраняем файла Excel}

   Excel.WorkBooks[1].SaveAs(ExtractFilePath(AFileName)+

   'Result_'+

   ExtractFileName(AFileName));

   {обязательно закрываем все открытые книги и наче файла Excel будет недоступен}

   for I := 1 to Excel.WorkBooks.Count do

     Excel.WorkBooks[i].Close;

  except on e: Exception  do
    begin
      Result:= False;

      Exception.Create('Ошибка при обработке файла Excel. '+#10#13+

      SysErrorMessage(GetLastError));
    end;
  end;

finally

  {Не забываем вернуть обратно свойства приложения Excel, которые происходят

   в момент обращения к данным}

    Excel.Application.ScreenUpdating := True;

    Excel.Application.EnableEvents := true;

    Excel.Application.Interactive := true;

    Excel.Application.DisplayAlerts := true;

    {Закрываем процесс Excel}

    Excel.Quit;

    Excel := UnAssigned;
  end;

end;

Share

Tags: , , ,

4 Responses to “Как работать из Delphi с файлами Excel”

  1. samsim пишет:

    Вижу, работать очень просто. Тот кто непонял могу посоветовать свой сайт где есть основы работы с текстом и с документами такого типа. А статейка очень полезная.

  2. Спасибо, за положительный отзыв.
    Идеологи будет одинаковая объект – COM, и работать с его интерфейсом , но реализация по обращению к объектам офиса будет разной не много. В таких случаях полезно бывает пример рабочий посмотреть. В данной статье он прилагает.

    У вас на сайте примеров не хватает. Добавьте их они позволят новичкам лучше понимать как и что.

  3. Алекс пишет:

    Спасибо !

  4. […] подробнее о чтении файлов Excel было написано в статье http://fk-uran.com.ua/kak-rabotat-iz-delphi-s-fajlami-excel/ […]

Leave a Reply