Недавно добавленные исходники

•  TDictionary Custom Sort  539

•  Fast Watermark Sources  904

•  3D Designer  1 830

•  Sik Screen Capture  1 479

•  Patch Maker  1 487

•  Айболит (remote control)  1 410

•  ListBox Drag & Drop  1 177

•  Доска для игры Реверси  21 943

•  Графические эффекты  1 358

•  Рисование по маске  1 297

•  Перетаскивание изображений  1 096

•  Canvas Drawing  972

•  Рисование Луны  814

•  Поворот изображения  771

•  Рисование стержней  815

•  Paint on Shape  493

•  Генератор кроссвордов  762

•  Головоломка Paletto  667

•  Теорема Монжа об окружностях  855

•  Пазл Numbrix  619

•  Заборы и коммивояжеры  850

•  Игра HIP  557

•  Игра Go (Го)  527

•  Симулятор лифта  549

•  Программа укладки плитки  509

•  Генератор лабиринта  565

•  Проверка числового ввода  524

•  HEX View  600

•  Физический маятник  528

•  Задача коммивояжера  560

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Пример работы через OLE с Excel



Автор: Зимин Александр


// Маленькая процедурка -- на которой я тестировал вообще коннект к Excel
procedure TForm1.ButtonClick(Sender: TObject);
var
  Excel : Variant;
  WorkSheet : Variant;
  I, J  : Integer;
begin
  if OpenDialog.Execute then begin
    Excel := CreateOleObject( InputBox('OleStr', 'CreateOleObject',
    'Excel.Application.8') );
    Excel.Visible := False;
    Excel.Workbooks.Open( OpenDialog.FileName );
    WorkSheet := Excel.Workbooks[1].WorkSheets[1];
    ListView.Columns.Clear;
    ListView.Items.Clear;
    for I := 1 to WorkSheet.Cells.CurrentRegion.Columns.Count do
       ListView.Columns.Add.Caption := VarToStr( WorkSheet.Cells[1,I] );
    for I := 1 to WorkSheet.Cells.CurrentRegion.Rows.Count do
     with ListView.Items.Add do begin
      Caption := VarToStr( WorkSheet.Cells[I,1] );
      for J := 2 to WorkSheet.Cells.CurrentRegion.Columns.Count do
        SubItems.Add( VarToStr( WorkSheet.Cells[I,J] ));
    end;
    Excel.Workbooks.Close;
    Excel.Quit;
  end;
end;

{
 Кусочки из программы, которая читала Excel и кидала дату в SQL базу,
 Прога была одаптирована к конторской конкретике, поэтому целиком е¸
 кидать бессмысленно.
}

//Коннект... С простой мыслей о том что неизвесто с какой именно
// версией объекта придется работать
procedure TEnemaDM.ConnectToExcelServer(FileName: String);
var
  Reg : TRegIniFile;
begin
  Reg := TRegIniFile.Create( 'SOFTWARE\');
  if (FileExists( FileName ))and
     (UpperCase(ExtractFileExt( FileName )) = '.XLS' ) then try
    if VarIsEmpty( Excel ) then begin
      Excel := CreateOleObject( Reg.ReadString( 'Enema','Excel',
       'Excel.Application.8' ));
    end else begin
      Excel.Workbooks.Close;
    end;
    Excel.Visible := False;
    Excel.Workbooks.Open( FileName );
  finally
    Reg.Free;
  end;
end;

procedure TEnemaDM.DisconnectExcelServer;
begin
  try
    try
      Excel.Quit;
    except
    end;
  finally
    VarClear( Excel );
  end;
end;


//Пример загрузки списка листов таблицы
// Ейный вызов MainForm.LoadLists(Excel.Workbooks[1] );
//  -- я предпологаю что открыт 1 файл...
procedure TMainForm.LoadLists(WorkBooks: Variant);
var
  I : Integer;
begin
  if not VarIsNull( WorkBooks ) then begin
    ExcelListBox.Items.Clear; // TComboBox
    for I := 1 to WorkBooks.WorkSheets.Count do begin
      ExcelListBox.Items.Add( VarToStr( WorkBooks.WorkSheets[I].Name ));
    end;
  end;
end;


// Сама процедура загрузки перекачивает данные в некую хранимую процедуру
// Вызывалась как LoadExcel( Excel.Workbooks[1].WorkSheets[MainForm.CurrentList] )
procedure TEnemaDM.LoadExcel( WorkSheet : Variant );
var
  I : Integer;
  ErrorList : TStrings;
begin
  with MainForm do try
    ErrorList := TStringList.Create;
    try
      for I := 1 to WorkSheet.Cells.CurrentRegion.Rows.Count do begin
        try
         ХранимаяПроцедура.ParamByName( параметр ).AsString :=
             VarToStr(
           WorkSheet.Range[наименование региона в символах Excel. см Help].Cells[I,1] );
         ХранимаяПроцедура.ExecProc;
        except
          on E : Exception do ErrorList.Add( GetErrorCurrentValue +
                          #32 + E.Message );
        end;
      end;
      if ErrorList.Count = 0 then
         MessageDlg( 'Данные успешно успешно загружены' ,
     mtInformation, [mbOk], 0 )
      else
        ФормочкаДляОшибок.SetErrorList( ErrorList );
    finally
      ErrorList.Free;
    end;
  except
    on E : Exception do MessageDlg( E.Message, mtError, [mbOk], 0 );
  end;
end;


Коментарий от Yur Ovchinnikov


  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.Application.8", "Excel.Application.9". Ко всему прочему приведенный пример не работает с Excel95.





Похожие по теме исходники

Примеры работы с БД

Примеры оформления DBGrid

Пример использования DBGrid

График работы

 

RSA шифрование через OpenSSL

Win Console

Molecula (3D молекула)

Molecule (молекула)

 

Console FTP

CMD OLE

DeParole

Console SmartEngine

 

Close Console on Event

Console Task Manager

Экспорт баз данных в Excel

Transfer Tables Excel-Access

 

Excel Films Lister

Work with Word and Excel




Copyright © 2004-2022 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте   Facebook   Ссылка на Twitter   Ссылка на Telegram