Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2013, 11:58   #1
manula
Форумчанин
 
Регистрация: 17.04.2011
Сообщений: 168
Сообщение Импорт данных из Excel

Здравствуйте уважаемые товарищи, возник вопрос следующего характера, необходимо выгрузить данные из Excel-книги в компонент DBGridEh или DBGrid, используя при этом библиотеку ComOBJ или работа с ADO- компонентами.
При связке с ADO-компонентами использую ADOConnection->ADOQuery->DataSource->DBGridEh
Пробовал выгружать в простой StringGrid все получилось, но я это осуществлял другими методами, есть у кого нибудь исходники аналогичных программ или как это можно программно осуществить.
Ответы на подобие: "Используй со вкладки Servers компонент ExcelApplication не рассматриваются".
Не могли бы вы мне помочь, буду очень благодарен за оказанную помощь.
manula вне форума Ответить с цитированием
Старый 01.04.2013, 12:15   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

а помочь то чем?
единственное так это то что ни в DBGridEh ни в DBGrid данных нет, поэтому туда данные загрузить не получиться.
в каком виде данные в Excel?

Последний раз редактировалось eval; 01.04.2013 в 12:28.
eval вне форума Ответить с цитированием
Старый 01.04.2013, 12:17   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я бы лучше настроил ODBC на XLS файл. А потом через ADO подключился бы к листу как к таблице.
http://www.askit.ru/custom/vba_offic...connection.htm
Идея ясна?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.04.2013, 13:00   #4
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Даже проще можно. Без ODBC драйвера.
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  ADOConnection1.ConnectionString :=
    'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;'+
    'Data Source=Книга1.xls;'+ //либо весь путь до файла, но и так работает
    'Mode=Share Deny None;Extended Properties=Excel 8.0';
  ADOConnection1.Open; 
  ADOQuery1.Open; //ADOQuery1 соединен, разумеется, с ADOConnection1
end;
Текст запроса в ADOQuery1: select * from [Лист1$]

Актуальность: Windows XP SP3, MS Office 2007, D7, проверено 28.01.2013.

Последний раз редактировалось Прик; 01.04.2013 в 13:05. Причина: добавлен текст запроса
Прик вне форума Ответить с цитированием
Старый 01.04.2013, 13:09   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Можно и без ODBC

ADO с провайдером Jet.OLEDB. Строка соединения
Код:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\Book2.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1";Persist Security Info=False
Запрос
Код:
SELECT * FROM [Лист1$]
Дубль 2
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.04.2013, 14:20   #6
manula
Форумчанин
 
Регистрация: 17.04.2011
Сообщений: 168
По умолчанию

Товарищи благодарю за помощь, сделал таким образом создал 2 процедуры но при этом выдает ошибку такого рода, не могли бы вы еще подсказать в чем проблема.
Вот сам код:
Код:
procedure TForm1.ConnectToExcel;
var strConn: WideString;
 begin
 strConn:='Provider=Microsoft.Jet.OLEDB.4.0;' +  'Data Source=' + OpenDialog1.FileName + ';' + 'Mode=Share Deny None;Extended Properties=Excel 8.0;';
  ADOConnection1.Connected:=False;
  ADOConnection1.ConnectionString:=strConn;
  try
   ADOConnection1.Open;
  except
   ShowMessage('Ошибка Excel '+OpenDialog1.FileName+' !');
  raise;
 end;
end;

procedure TForm1.FetchData;
begin
 OpenDialog1.execute;
 ConnectToExcel;
 ADOQuery1.SQL.Text:='SELECT * FROM [Лист1$]'; // Ругается на эту строку
 try
  AdoQuery1.Open;
 except
  ShowMessage( 'Ошибка SQL' + opendialog1.FileName +'!');
 raise;
 end;
end;
А вот сама ошибка:
Код:
Внешняя таблица не имеет предполагаемый формат
Я по сути при загрузке использую только (.xls) расширение.
manula вне форума Ответить с цитированием
Старый 01.04.2013, 14:30   #7
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

потому что чукча не читатель, а я сразу спросил -
в каком виде данные в Excel?
но вам как видится надо скорее код и не важно все остальное...
eval вне форума Ответить с цитированием
Старый 01.04.2013, 15:43   #8
manula
Форумчанин
 
Регистрация: 17.04.2011
Сообщений: 168
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
потому что чукча не читатель, а я сразу спросил -
в каком виде данные в Excel?
но вам как видится надо скорее код и не важно все остальное...
Вот ту как раз вы не правы и мне есть до этого дело и я хочу в этом разобраться, но по сути за малым опытом работы с Excel, не до конца пониманию в чем ошибка(и как определить какой драйвер лучше использовать для работы Excel-книгами), а данные хранятся просто в виде текста, таблица со значениями.

Последний раз редактировалось manula; 01.04.2013 в 16:22.
manula вне форума Ответить с цитированием
Старый 02.04.2013, 08:49   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

То что предлагалось в постах #4 и #5 для xls в родном формате. Данные в виде текста с разделителями тоже можно прочитать c помощью JET OLEDB, только строка соединения другая, сейчас по ходу не помню, но в интернете можно найти. Да и здесь на форуме я когда-то давал пример, может на другом (враждебном), не помню
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.04.2013, 09:04   #10
manula
Форумчанин
 
Регистрация: 17.04.2011
Сообщений: 168
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
То что предлагалось в постах #4 и #5 для xls в родном формате. Данные в виде текста с разделителями тоже можно прочитать c помощью JET OLEDB, только строка соединения другая, сейчас по ходу не помню, но в интернете можно найти. Да и здесь на форуме я когда-то давал пример, может на другом (враждебном), не помню
Попробовал сделать таким образом, возникла ошибка другого рода:
Код:
strConn:='Provider=Microsoft.Jet.OLEDB.4.0;' +  'Data Source=' + OpenDialog1.FileName + ';' + ';User ID=Admin;Extended Properties=Excel 7.0;';
Ошибка: Невозможно найти устанавливаемый ISAM
manula вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импорт данных в Excel strannick Microsoft Office Excel 8 21.02.2012 14:37
импорт данных из Excel в Access mr.kot Microsoft Office Access 3 13.11.2011 22:55
Импорт данных из Excel в Excel макросом vnmz Microsoft Office Excel 2 04.03.2011 18:04
Импорт/Экспорт данных Excel на C# МаксимFr Помощь студентам 0 15.09.2010 21:13
Импорт данных в Excel mMAg Microsoft Office Excel 2 20.08.2009 17:50