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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2011, 13:28   #1
Freimaks
Пользователь
 
Регистрация: 23.04.2011
Сообщений: 42
По умолчанию DBGrid и Excel

Всем привет. Года 3 уже не ничего не писал на Delphi и тут жизнь заставила написать простенькую прогу.
Я разобрался со всем и вспомнил многое, но один момент остался неясным.

Суть такая: программа должна вытащить данные из таблицы excel и засунуть их в другой формат, попутно добавив немного доп инфы.

Excel я засунул в DBGrid:
1. Делаем соединение к файлу:
Код:
procedure TForm1.ConnectToExcel;
var strConn: widestring;
begin
strConn:='Provider=Microsoft.Jet.OLEDB.4.0;' +
'Data Source=' +Edit1.Text+ ';' +
'Extended Properties=Excel 8.0;';
AdoConnection1.Connected:=False;
AdoConnection1.ConnectionString:=strConn;
  try
AdoConnection1.Open;
except
ShowMessage('Не могу соединиться с Excel книгой, которая расположена по адресу: '+Edit1.Text+' !');
raise;
  end;
end;
2. Далее тащу данные
Код:
procedure TForm1.FetchData;
begin
ConnectToExcel;
AdoQuery1.Close;
AdoQuery1.SQL.Text:='SELECT * FROM ['+edit2.Text+'$]';
try
AdoQuery1.Open;
except
ShowMessage( 'Не могу выполнить Sql запрос ' + Edit1.Text +'!');
raise;
end;
end;
Работает все замечательно. Но есть одно но! В DBGrid инфа попадает начиная с фиксированных ячеек, а выдрать потом оттуда данные уже не получается, т.е. 1 строку при экспорте я теряю и сколько не бился - никак обойти не могу. И еще - если я задаю столбцу имя в свойствах DBGrid, то все мои действия вообще не пашут, т.е. конект есть и данную выдираются, но не отображаются!
Помогите, плиз!!!!!!
Freimaks вне форума Ответить с цитированием
Старый 23.04.2011, 16:32   #2
Freimaks
Пользователь
 
Регистрация: 23.04.2011
Сообщений: 42
По умолчанию

Кстати забыл, показать как я сохраняю:
Код:
DBGrid1.DataSource.DataSet.First;
for I := 1 to dbgrid1.DataSource.DataSet.RecordCount do
begin
for z:=0 to DBGrid1.FieldCount-1 do
begin
for j := 0 to Stringgrid1.RowCount-2 do
begin
S3:= ',' + inttostr(L+j)+',,0,0,0,0,0,0,0,0,1,0,1,,,,,,';
Memo1.Text:= memo1.Text +#13#10+ dbgrid1.Fields[z].AsString + '_' +stringgrid1.Cells[1,N] + S3;
N:=N+1;
end;
N:=1;
end;
L:=L+Stringgrid1.RowCount-1;
DBGrid1.DataSource.DataSet.Next;
end;
Freimaks вне форума Ответить с цитированием
Старый 23.04.2011, 19:14   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

А почему сразу не выгружаете из excel в Stringgrid?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 23.04.2011, 19:25   #4
Freimaks
Пользователь
 
Регистрация: 23.04.2011
Сообщений: 42
По умолчанию

А что, так тоже можно???? Я так понял что к екселю просто так доступ не получить.... Не подскажете как?

Погуглил, нашел что-то. Буду пробовать

Последний раз редактировалось artemavd; 23.04.2011 в 19:45.
Freimaks вне форума Ответить с цитированием
Старый 23.04.2011, 19:45   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Хорошо, что нашли что-то. Да и на этом форуме вопрос про перегон данных из экселя в стринггрид и обратно обсуждался уже чертову уйму раз.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 23.04.2011, 20:19   #6
Freimaks
Пользователь
 
Регистрация: 23.04.2011
Сообщений: 42
По умолчанию

А все же интересно, как правильно делать из DBGrid? Из Stringgrid все понятно, я лишь не знал что к ней можно ексель цеплять.
А что у меня не так с DBGrid, в чем я не прав?
Freimaks вне форума Ответить с цитированием
Старый 23.04.2011, 20:32   #7
ReportCube
Форумчанин
 
Аватар для ReportCube
 
Регистрация: 11.03.2011
Сообщений: 426
По умолчанию

Попробуйте с такой строкой подключения:
'Provider=Microsoft.Jet.OLEDB.4.0;D ata Source=' +Edit1.Text+
';Extended Properties="Excel 8.0;HDR=No";Persist Security Info=True'
ReportCube вне форума Ответить с цитированием
Старый 23.04.2011, 20:46   #8
Freimaks
Пользователь
 
Регистрация: 23.04.2011
Сообщений: 42
По умолчанию

Спасибо!!! Так идет хорошо. Самую верхнюю ячейку (которая залочена) помечает как F1. Огромное спасибо!!!!
Freimaks вне форума Ответить с цитированием
Старый 25.04.2011, 20:07   #9
Turboworld
 
Регистрация: 27.12.2007
Сообщений: 3
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
Хорошо, что нашли что-то. Да и на этом форуме вопрос про перегон данных из экселя в стринггрид и обратно обсуждался уже чертову уйму раз.
Можно ссылочку? А то меня эта тема сейчас тоже весьма волнует. Вот эту тему (текущую) поиском нашел по форуму ))) Есть что-нибудь для совсем начинающих (в Excel+Delphi)? А то в этой теме код я вообще не понимаю А мне нужен импорт из эксселевского файла в Stringgrid... И экспорт соответственно тоже + подсветка ячеек (изменение цвета фона и текста). В гугле искал, нашел только какие-то обрывки, которыми пользуюсь как обезьяна ружьём. Шаг влево, шаг вправо - и уже не понятно, как реализовать функционал Ссылочку для начинающих не подкинете?
Turboworld вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экспорт DBGrid в Excel SpyCrypt БД в Delphi 5 28.04.2011 15:54
DBGrid->EXCEL Neba БД в Delphi 7 03.11.2010 05:23
Выгрузка из DBGrid в Excel Nika03 БД в Delphi 1 19.05.2010 22:06
искажение данных DBGrid в Excel-? Evgenii БД в Delphi 2 18.11.2009 00:43