Страница 1 из 2

Работа с Excel

Добавлено: 20 апр 2005, 12:46
Bylka
Как перенести данные из таблицы Excel в таблицу DBGrid?

Добавлено: 20 апр 2005, 17:45
YurikGL
1) http://www.delphimaster.ru/cgi-bin/foru ... 983044&n=8
2) Если вообще достать данные из екселя, то тебе нужно прочитать статью "По волнам интеграции" на Королевстве Делфи

Добавлено: 20 апр 2005, 22:41
RoKon
Ну изначально не правлиная постановка вопроса. Скорее всего тебе надо просто отобразить данные из файла типа Эксель в ДБГриде. Так? Тогда используешь технологию АДО и ничего больше, даже не думай приплетать сюда сервера офисных приложений.
Кладешь на форму компоненты Грид, датасурс, комвовох, адотабле, адоквери, пару кнопок и АДОСоннекшен, в строку подключения прописываешь

Код: Выделить всё

Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='+Path+';Mode=Share Deny None;Extended Properties=Excel 8.0;Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";
Далее можно так сделать

Код: Выделить всё

 ADOConnection1.Open;
   ADOConnection1.GetTableNames(cbxTableExcel.Items);
Далее так

Код: Выделить всё

 ADOQuery2.Close;
 ADOTable2.Close;
 ADOQuery2.SQL.Text:='select * from ['+cbxTableExcel.Text+']';
 ADOTable2.TableName:='['+cbxTableExcel.Text+']';
 ADOTable2.Open;
 ADOQuery2.Open;
Table или Query смотри сам че больше потом будет востребовано.

Добавлено: 20 апр 2005, 22:45
RoKon
Книга будет базой данных, таблицами будут листы в книге, имена листов - именами таблиц в базе со знаком доллара.

Добавлено: 21 апр 2005, 11:57
Bylka
RoKon можежь пояснить код и куда еге пихать(в AfterConnect компанента AdoConnection ?)

Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='+Path+';Mode=Share Deny None;Extended Properties=Excel 8.0;Jet OLEDB :D atabase Password="";Jet OLEDB:Engine Type=35;Jet OLEDB :D atabase Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";

Спасибо!!!!

Добавлено: 21 апр 2005, 20:59
RoKon
неее, зачем в афтерконнект
Provider=.... - это строка подключения. Она должна быть записана в ADOConection1.ConnectionString, можно и в режиме редактирования ее создать, даблклик ADOConection1 и нажав на кнопочку BUILD, а можно в рантайм по нажатию кнопки, причем сначала можно даже выбрать файл для отображения

Код: Выделить всё

procedure TfrmMain.SpeedButton2Click(Sender: TObject);
begin
 OpenDialog1.Filter:='База данных Excel (*.xls)|*.xls';
 if OpenDialog1.Execute then begin
   edPathExcel.Text:=OpenDialog1.FileName;
   ADOConnection2.Close;
   ADOConnection2.ConnectionString:=ConnectionStringExcel(OpenDialog1.FileName);
   ADOConnection2.Open;
   ADOConnection2.GetTableNames(cbxTableExcel.Items);
   Button2.Enabled:=true
 end;
end;

function ConnectionStringExcel(Path:string):string;
begin
 Result:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='+Path+';Mode=Share Deny None;Extended Properties=Excel 8.0;Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";';
end;
КомбоБох нужен для удобно просмотра списка листов в книге, т.е. таблиц в базе.
После выбора таблицы из комбобокса, по нажатию кнопки или в событии ОнЧэнже у комбобокса можно открыть табличку

Код: Выделить всё

procedure TfrmMain.Button2Click(Sender: TObject);
begin
 ADOQuery2.Close;
 ADOTable2.Close;
 ADOQuery2.SQL.Text:='select * from ['+cbxTableExcel.Text+']';
 ADOTable2.TableName:='['+cbxTableExcel.Text+']';
 ADOTable2.Open;
 ADOQuery2.Open;
end;
На форме нах-ся грид связанный с датасурсом, который связан либо с ADOTable2 либо ADOQuery2, просто для примера.

Добавлено: 22 апр 2005, 11:38
Bylka
Большое спасибо!!Хоть кто-то ответил на наш вопрос -понятно!Будут вопросы еще обратимся!!!

Добавлено: 22 апр 2005, 12:31
Bylka
Вот и еще один вопросик:
-за что отвечает edPathExcel, cbxTableExcel, от какого компанента они зависят?

Добавлено: 22 апр 2005, 23:07
RoKon

Код: Выделить всё

    edPathExcel: TEdit; // обычный Edit для отображения пути открываемого файла
    cbxTableExcel: TComboBox; // Комбобокс для отображения списка таблиц

Добавлено: 25 апр 2005, 14:24
Bylka
Количество ячеек выдает в DBGrid правильное, но их не заполняет. Как их заполнить