Работа с Excel из Delphi 7 начало - Статьи посвещенные работе с Excel с использованием Delphi 7 - Каталог статей - Разработка ПО
Среда, 16.05.2012, 14:43
Приветствую Вас, Гость | RSS
Категории раздела
Статьи посвещенные работе с Excel с использованием Delphi 7 [2]
Работа с базами данных [2]
Прочее [1]
Разработки Воропай Андрея [3]
Публикация разработок автора: Воропай Андрей (waw) Разработка прикладного, системного ПО, БД, Delphi, SQL. Стаж работы 13 лет.
Фрактальная геометрия [3]
Фракталы (от лат. fractus - изломанный) Обладают двумя основными признаками - изломанностью и свойством самоподобия. В данной категории мы рассмотрим примеры программ на Delphi для создания фракталов.
Не программирование [0]
Вход
E-mail:
Пароль:
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
FaceBook

Смотреть фильмы в хорошем качестве эротика мультфильмы ужасы фантастика боевики комедия приключения всё это можно скачать бесплатно с помощью торрента с фильмом или мультфильмом

К началу

Главная » Статьи » Статьи посвещенные работе с Excel с использованием Delphi 7

Работа с Excel из Delphi 7 начало
Для начала необходимо использовать следующие модули:

uses
  Variants, Registry,
 ComObj, Excel2000,
 ActiveX;


Теперь простенькая функция определения установлен ли соответствующий
объект в системе или нет. С её помощью можно искать Excel, Word и т.д...Для начала необходимо использовать следующие модули:

functionIsOLEObjectInstalled(Name:string):boolean;
var
ClassID:TCLSID;
Rez:HRESULT;
begin
// Ищем CLSID OLE-объекта
Rez:=CLSIDFromProgID(PWideChar(WideString(Name)),ClassID);
if Rez=S_OKthen
// Объект найден
Result:=true
else
Result:=false;
end;

Например:

 IsOLEObjectInstalled('Excel.Application.8')


Так мы можем определить установлены ли объекты соответствующей версии Excel или нет.

Теперь попробуем запустить Excel.
Определим переменные:

var
  cls_ExcelObject: string;
  WorkSheet: Variant;
  Excel: Variant;
  RegData: TRegistry;


Для того, что бы избавится от локальных названий класса для каждой верcии Office Excel необходимо выбрать ветку реестра с текущей весией, и если эта ветка существует сменить название.

 begin
    // Это для того, чтобы не применять локальные
// для каждой версии
    // названия "Excel.Application.8", "Excel.Application.9".
    // Ко всему прочему приведенный пример
    // не работает с Excel95.
    cls_ExcelObject := 'Excel.Application';
    RegData := TRegistry.Create;
    RegData.RootKey := HKEY_CLASSES_ROOT;
    try
      if RegData.OpenKey('\Excel.Application\CurVer', False) then
      begin
        cls_ExcelObject := regData.ReadString('');
        RegData.CloseKey;
      end
    finally
      regData.Free;
    end;


Определим установлен Excel на данный компьютер или нет.

    if not IsOLEObjectInstalled(cls_ExcelObject) then
    begin
      ShowMessage('Excel не установлен.');
      exit;
    end;

    // Вот теперь откроем Excel
    Excel := CreateOleObject(cls_ExcelObject);

Вот теперь самые интересные параметры работы с Excel. Мы отключает все события, интерактивную реакцию, в том числе и перерисовку, отображение в строке состояния, отображение границ листа и пересчет формул (если конечно не нужно пересчитывать формулы автоматически. А еще делаем процесс работы приложения невидимым.

  // Отключаем реакцию Excel на события,
    // чтобы ускорить обработку информации информации
    Excel.Application.ScreenUpdating := False
    Excel.Application.Calculation := xlCalculationManual;
    Excel.Application.EnableEvents := false;
    Excel.Application.Interactive := False;
    Excel.Application.DisplayAlerts := False;
    Excel.ActiveSheet.DisplayPageBreaks := False;
    Excel.Application.DisplayStatusBar := False;
    Excel.Visible := false;

А теперь создадим таблицу или откроем указанный файл:

    //  Создадим новую таблицу
   Excel.Workbooks.Add;
   // -------- или ---------
    //    Откроем существующую таблицу
    Excel.Workbooks.Open('FileName.xls');

Получим дополнительную информацию. Количество листов в книге, получим имена всех листов.

UsedRange - очень интересное свойство.
Через него можно узнать физическое количество заполненных ячеек
первую строку заполненного диапазона. Очень полезно для парсинга таблиц прайсов.
 // Количество значащих строк
 Rows := WorkSheet.UsedRange.Rows.Count;
// Количество значащих колонок
Columns := WorkSheet.UsedRange.Columns.Count;
// Первая строка диапазона
First := WorkSheet.UsedRange.Row;

В начале работы можно еще узнать, количество листов в книге, список названий листов. Дальше показан пример работы с определенным листом. Обращаться к книге или листу можно по номеру, а можно указывать название.
// Количество листов в таблице
    SheetsCount := Excel.Sheets.Count;
// Получим имена всех листов в первой открытой книге
    for i := 1 to SheetsCount do
    begin
      WorkSheetsNames.Items.Add(Excel.Workbooks[1].WorkSheets[i].Name);
    end;

// Выберем первый лист первой книги
    WorkSheet := Excel.Workbooks[1].WorkSheets[1];
    Rows := WorkSheet.UsedRange.Rows.Count;
 // Количество значащих строк
    Columns := WorkSheet.UsedRange.Columns.Count;
 // Количество значащих колонок
    // Первая строка диапазона
    FirstString := WorkSheet.UsedRange.Row;

Дальше уже можно работать с таблицей. Обработка и парсинг Excel книги мы рассмотрим в следующей статье.

Но перед завершением программы не забудем вернуть свойства Excel в исходное состояние. В примере сохраняю в другой файл и закрываю Excel без запроса на сохранение. Т.е. если были открыты другие файлы и в них были изменения не будет выдано запроса на сохранение измененных файлов.

 
Excel.Application.EnableEvents := true;
Excel.Application.Interactive := true;
Excel.Application.DisplayAlerts := true;
Excel.ActiveWorkbook.SaveCopyAs('FileName.xls');
Excel.ActiveWorkbook.Close(0); // xlDontSaveChanges
Excel.Quit;
Excel := Unassigned;

Дополнительные ссылки:
Особенности работы с «Русским» Excel'ем

Категория: Статьи посвещенные работе с Excel с использованием Delphi 7 | Добавил: waw (03.01.2011)
Просмотров: 2997 | Рейтинг: 4.0/1
Всего комментариев: 0
Имя *:
Email:
Код *:
Поиск
Запорожье