Консультация № 64826
29.11.2006, 21:37
0.00 руб.
0 3 2
Здравствуйте уважаемые эксперты!
Подскажите пожалуйста как можно добавить данные в DBGrid из существующего Excel файла.
При этом соответственно данные должны сохраниться в базе данных.
Число столбцов в таблице БД и Excel файла совпадают.
Использую IBTable, DataSource, IBStoredProc и DBGrid.
Может есть готовая функция или процедура?

Обсуждение

Неизвестный
30.11.2006, 06:56
общий
это ответ
Здравствуйте, Жуков Сергей!

Может не самый удачный способ, но очень простой:
Берем ADODataSet, в ConnectionString пишем :
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=ПолныйПутьИИмяФайла.xls;Extended Properties=Excel 8.0;Persist Security Info=False

Далее в CommandText пишем : select * from [Sheet1$], где Sheet1$ имя листа книги Excel обязательно в квадратных скобках.
Далее открываем набор данных и переносим в таблицу Interbase.

Неизвестный
30.11.2006, 07:44
общий
это ответ
Здравствуйте, Жуков Сергей!

еще можно воспользоваться компонентом
TExcelApplication со вкладки SERVERS

var s:string;
begin
ExcelApplication1.Visible[lcid(0)]:=false; // запускает ексель в невидемом режиме
ExcelApplication1.Workbooks.Add(FileName,lcid(0)); // добавляем файл екселья
s:=ExcelApplication1.Range[‘A1‘,emptyparam].Value; // в переменную s заносим данные ячейки A1;
end;
добавление записи в бд:
ibtable1.AppendRecord([‘Rec1‘,‘Rec2‘,‘Rec3‘]);
или
ibtable1.InsertRecord([‘Rec1‘,‘Rec2‘,‘Rec3‘]); // указываем только значения для всех полей по порядку, как они идут в БД.

то есть примерно такой код получиться

Приложение:
var i: integer;beginExcelApplication1.Visible[lcid(0)]:=false; ExcelApplication1.Workbooks.Add(FileName,lcid(0)); i:=1;while ExcelApplication1.Range[‘A‘+inttostr(i),emptyparam].Value<>‘‘ dobegin IBTable1.AppendRecord([ ExcelApplication1.Range[‘A‘+inttostr(i),emptyparam].Value, ExcelApplication1.Range[‘B‘+inttostr(i),emptyparam].Value, ExcelApplication1.Range[‘C‘+inttostr(i),emptyparam].Value]); inc(i);end;
Неизвестный
04.12.2006, 07:56
общий
у меня все приложения работающие с екселем по данному подобию написаны, и все работают.Если Вас не затруднит то пришлите пожалуйста, какую ошибку компилятор выводити посмотрите настройки компонента TExcelApplication:AutoConnect: False;AutoQuit: False;ConnectKind: ckNewInstance; // на это свойство следует уделить особое вниманиев конце после цикла необходимо еще дописать:ExcelApplication.Quit;ExcelApplication.Disconnect;
Форма ответа