Работа с Excel
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
Как перенести данные из таблицы Excel в таблицу DBGrid?
1) http://www.delphimaster.ru/cgi-bin/foru ... 983044&n=8
2) Если вообще достать данные из екселя, то тебе нужно прочитать статью "По волнам интеграции" на Королевстве Делфи
2) Если вообще достать данные из екселя, то тебе нужно прочитать статью "По волнам интеграции" на Королевстве Делфи
Ну изначально не правлиная постановка вопроса. Скорее всего тебе надо просто отобразить данные из файла типа Эксель в ДБГриде. Так? Тогда используешь технологию АДО и ничего больше, даже не думай приплетать сюда сервера офисных приложений.
Кладешь на форму компоненты Грид, датасурс, комвовох, адотабле, адоквери, пару кнопок и АДОСоннекшен, в строку подключения прописываешь
Далее можно так сделать
Далее так
Table или Query смотри сам че больше потом будет востребовано.
Кладешь на форму компоненты Грид, датасурс, комвовох, адотабле, адоквери, пару кнопок и АДОСоннекшен, в строку подключения прописываешь
Код: Выделить всё
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;
The trurh is out there...
Книга будет базой данных, таблицами будут листы в книге, имена листов - именами таблиц в базе со знаком доллара.
The trurh is out there...
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
atabase Password="";Jet OLEDB:Engine Type=35;Jet OLEDB
atabase Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";
Спасибо!!!!
Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source='+Path+';Mode=Share Deny None;Extended Properties=Excel 8.0;Jet OLEDB


Спасибо!!!!
неее, зачем в афтерконнект
Provider=.... - это строка подключения. Она должна быть записана в ADOConection1.ConnectionString, можно и в режиме редактирования ее создать, даблклик ADOConection1 и нажав на кнопочку BUILD, а можно в рантайм по нажатию кнопки, причем сначала можно даже выбрать файл для отображения
КомбоБох нужен для удобно просмотра списка листов в книге, т.е. таблиц в базе.
После выбора таблицы из комбобокса, по нажатию кнопки или в событии ОнЧэнже у комбобокса можно открыть табличку
На форме нах-ся грид связанный с датасурсом, который связан либо с ADOTable2 либо ADOQuery2, просто для примера.
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;
The trurh is out there...
Большое спасибо!!Хоть кто-то ответил на наш вопрос -понятно!Будут вопросы еще обратимся!!!
Вот и еще один вопросик:
-за что отвечает edPathExcel, cbxTableExcel, от какого компанента они зависят?
-за что отвечает edPathExcel, cbxTableExcel, от какого компанента они зависят?
Код: Выделить всё
edPathExcel: TEdit; // обычный Edit для отображения пути открываемого файла
cbxTableExcel: TComboBox; // Комбобокс для отображения списка таблиц
The trurh is out there...
Количество ячеек выдает в DBGrid правильное, но их не заполняет. Как их заполнить