// Маленькая процедурка -- на которой я тестировал вообще коннект к Excel procedure TForm1.ButtonClick(Sender: TObject); var Excel : Variant; WorkSheet : Variant; I, J : Integer; begin if OpenDialog.Execute thenbegin 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 dobegin 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 ) thenbegin Excel := CreateOleObject( Reg.ReadString( 'Enema','Excel', 'Excel.Application.8' )); endelsebegin Excel.Workbooks.Close; end; Excel.Visible := False; Excel.Workbooks.Open( FileName ); finally Reg.Free; end; end;
//Пример загрузки списка листов таблицы // Ейный вызов MainForm.LoadLists(Excel.Workbooks[1] ); // -- я предпологаю что открыт 1 файл... procedure TMainForm.LoadLists(WorkBooks: Variant); var I : Integer; begin if not VarIsNull( WorkBooks ) thenbegin ExcelListBox.Items.Clear; // TComboBox for I := 1 to WorkBooks.WorkSheets.Count dobegin 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 dobegin try ХранимаяПроцедура.ParamByName( параметр ).AsString := VarToStr( WorkSheet.Range[наименование региона в символах Excel. см Help].Cells[I,1] ); ХранимаяПроцедура.ExecProc; except on E :
Exception do ErrorList.Add( GetErrorCurrentValue + &nb!
sp; #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 (yur@sammit.kiev.ua)
cls_ExcelObject := 'Excel.Application'; regData := TRegistry.Create; regData.RootKey
:= HKEY_CLASSES_ROOT; try if regData.Op!
enKey('\Excel.Application\CurVer', False) then begin cls_ExcelObject := regData.ReadString('') regData.CloseKey; end finally regData.Free; end;
Это для того, чтобы не применять локальные для каждой версии названия "Excel.Application.8", "Excel.Application.9". Ко всему прочему приведенный пример не работает с Excel95.
Как в Image размножить рисунок?
Есть действие- мы выбираем Image и растягиваем его (его размер 32х16) на форме в нем есть рисунок размером 16Х16, как ...
КАК УЗНАТЬ, ЧТО НУЖНО ПРОГЕ?
Допустим, я хочу дать свою новоиспеченную программу своим друзьям. Как мне сделать так, чтобы она запускалась сразу без ...
Иерархические структуры данных в реляционных БД
Наряду с «плоскими» данными, при построении даже простых информационных систем, приходится хранить в БД и информацию о «вложенных» друг в друга сущностях, т.е иерархические данные. Организация хранения такой информации в реляционных БД проста, но не всегда очевидна для тех, кто впервые сталкивается с подобной задачей. В данной статье я попытаюсь поделиться накопленным опытом.
Borland C++ Builder 5. Энциклопедия программиста
Borland C++ Builder 5. Энциклопедия программиста написана большим авторским коллективом под руководством Чарли Калверта и Кента Рейсдорфа и продолжает серию книг о C++ Builder, начатую Чарли Калвертом после выхода в свет первой версии этого замечательного продукта. Все без исключения авторы книги имеют не только многолетний опыт создания коммерческих продуктов при помощи систем программирования C++ Builder и Delphi, но и принимали непосредственное участие в написании большого количества книг соответствующей тематики.Книга написана опытными программистами для опытных программистов и этим она резко отличается от подавляющего большинства других книг о C++ Builder (и вообще других книг, посвященных программированию). В ней вы не найдете подробного и планомерного описания интегрированной среды разработки (IDE), перечисления всех стандартных компонентов, их свойств и методов,
а также обсуждения тому подобных вопросов. Взамен этого, авторы сосредоточились на о!
бсуждении наиболее сложных разделов программирования с использованием C++ Builder, которые обычно обходятся авторами других книг. Характерным является также и то, что в примерах программ, представленных на поставляемом вместе с книгой компакт-диске, авторы наряду с использованием стандартных возможностей библиотеки VCL, зачастую применяют и функции Windows API.
Автор: Калверт Ч.
Хокку дня
Оторвал глаза Интернет - наркоманит Ночь на исходе.
Афоризмы
"Человечек, - это звучит горденько!"
Фраза дня
Если рыцаря ударить по правой щеке, то он упадет на левый бок.
Дурацкие законы (информация предоставлена сайтом kurilka.com)
В Гонолулу на Гавайях считается преступлением "приставать к птицам" в городских парках.
В городе Колумбус в Джоржии запрещается рубить курам головы по воскересеньям.
И на закуску коротенький анекдот
Удивительный орган - человеческий мозг: когда мы утром просыпаемся, он начинает усиленно работать и не останавливается вплоть до нашегоприбытия на работу.