Страница 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

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="";
Спасибо!!!!
Добавлено: 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 правильное, но их не заполняет. Как их заполнить