Работа с Excel

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Bylka
Сообщения: 13
Зарегистрирован: 20 апр 2005, 12:42

Как перенести данные из таблицы Excel в таблицу DBGrid?
YurikGL
Сообщения: 142
Зарегистрирован: 16 фев 2005, 21:54
Откуда: Уфа
Контактная информация:

1) http://www.delphimaster.ru/cgi-bin/foru ... 983044&n=8
2) Если вообще достать данные из екселя, то тебе нужно прочитать статью "По волнам интеграции" на Королевстве Делфи
RoKon
Сообщения: 82
Зарегистрирован: 27 мар 2005, 12:24
Откуда: Saransk City
Контактная информация:

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

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

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 смотри сам че больше потом будет востребовано.
The trurh is out there...
RoKon
Сообщения: 82
Зарегистрирован: 27 мар 2005, 12:24
Откуда: Saransk City
Контактная информация:

Книга будет базой данных, таблицами будут листы в книге, имена листов - именами таблиц в базе со знаком доллара.
The trurh is out there...
Bylka
Сообщения: 13
Зарегистрирован: 20 апр 2005, 12:42

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="";

Спасибо!!!!
RoKon
Сообщения: 82
Зарегистрирован: 27 мар 2005, 12:24
Откуда: Saransk City
Контактная информация:

неее, зачем в афтерконнект
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, просто для примера.
The trurh is out there...
Bylka
Сообщения: 13
Зарегистрирован: 20 апр 2005, 12:42

Большое спасибо!!Хоть кто-то ответил на наш вопрос -понятно!Будут вопросы еще обратимся!!!
Bylka
Сообщения: 13
Зарегистрирован: 20 апр 2005, 12:42

Вот и еще один вопросик:
-за что отвечает edPathExcel, cbxTableExcel, от какого компанента они зависят?
RoKon
Сообщения: 82
Зарегистрирован: 27 мар 2005, 12:24
Откуда: Saransk City
Контактная информация:

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

    edPathExcel: TEdit; // обычный Edit для отображения пути открываемого файла
    cbxTableExcel: TComboBox; // Комбобокс для отображения списка таблиц
The trurh is out there...
Bylka
Сообщения: 13
Зарегистрирован: 20 апр 2005, 12:42

Количество ячеек выдает в DBGrid правильное, но их не заполняет. Как их заполнить
Ответить