Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Возможно ли копирование данных из Excel в базу данных?


asd ©   (2006-05-06 20:32:00) 

Возможно ли копирование данных из Excel  в базу данных, отображая их в DBGrid?


KilkennyCat   (2006-05-09 15:18:00) [1]

http://www.a-cons.com/d5_office.rar


KilkennyCat   (2006-05-09 15:16:00) [2]

http://c-books.info/books/news5.php/2006/02/13/programmirovanie-dokumentov-i-prilozhenij-ms-office-v-delphi.html


asd   (2006-05-09 11:24:00) [3]

Было бы отлично. Спасибо.


KilkennyCat   (2006-05-08 13:37:00) [4]


> [7] asd ©   (08.05.06 13:20)


именно этот пример - в DelphiWorld http://www.delphiworld.narod.ru/
Остальное - в книжках.
Могу выложить, и кинуть ссылкой.


asd   (2006-05-08 13:20:00) [5]

А не подскажите где вы читали на эту тему?


ЛшдлУттнСфе   (2006-05-07 19:00:00) [6]

Так же на форме находится компонент TExcelApplication со свойством Name, содержащим XLApp

Как Вы поняли эту фразу? Кинули на форму невизуальный компонент TExcelApplication и обозвали его XLApp ?

И как Вы думаете, если XLApp объявить вариантом, то
> XLApp.Connect;
>  // Открываем файл Excel
>   XLApp.WorkBooks.Open(NomFich, EmptyParam, EmptyParam, EmptyParam,
> EmptyParam


возможно?!

Думать надо. Читать надо.
Успехов.


asd   (2006-05-07 11:29:00) [7]

ЛшдлуттнСфе, у меня выдаёт ошибку [Error] Unit1.pas(59): Incompatible types: 'Variant' and '_Workbook'. А ещё перед этим XLAPP не определяло, я объявил её типа Variant


asd   (2006-05-06 23:07:00) [8]

Спасибо за помощь


Pavia   (2006-05-06 21:31:00) [9]

Я сам мало работал с базами данных, но магу сказать что лучше к экселю обращаться как к базе данных. Тогда работать будет быстрее и лучше.


ЛшдлуттнСфе   (2006-05-06 20:57:00) [10]

Из DelphiWorld

В Delphi 5, для обмена данными между Вашим приложением и Excel можно использовать компонент TExcelApplication, доступный на Servers Page в Component Palette.

На форме находится TStringGrid, заполненный некоторыми данными и две кнопки, с названиями To Excel и From Excel. Так же на форме находится компонент TExcelApplication со свойством Name, содержащим XLApp и свойством ConnectKind, содержащим ckNewInstance.

Когда нам необходимо работать с Excel, то обычно мы открываем ExcelApplication, затем открываем WorkBook и в конце используем WorkSheet.

Итак, несомненный интерес представляет для нас листы (WorkSheets) в книге (WorkBook). Давайте посмотрим как всё это работает.

Посылка данных в Excel

Это можно сделать с помощью следующей процедуры :

procedure TForm1.BitBtnToExcelOnClick(Sender: TObject);
var
 WorkBk: _WorkBook; //  определяем WorkBook
 WorkSheet: _WorkSheet; //  определяем WorkSheet
 I, J, K, R, C: Integer;
 IIndex: OleVariant;
 TabGrid: Variant;
begin
 if GenericStringGrid.Cells[0,1] <> '' then
 begin
   IIndex := 1;
   R := GenericStringGrid.RowCount;
   C := GenericStringGrid.ColCount;
   // Создаём массив-матрицу
   TabGrid := VarArrayCreate([0,(R - 1),0,(C - 1)],VarOleStr);
   I := 0;
   //  Определяем цикл для заполнения массива-матрицы
   repeat
   for J := 0 to (C - 1) do
     TabGrid[I,J] := GenericStringGrid.Cells[J,I];
   Inc(I,1);
   until
   I > (R - 1);

   // Соединяемся с сервером TExcelApplication
   XLApp.Connect;
   // Добавляем WorkBooks в ExcelApplication
   XLApp.WorkBooks.Add(xlWBatWorkSheet,0);
   // Выбираем первую WorkBook
   WorkBk := XLApp.WorkBooks.Item[IIndex];
   // Определяем первый WorkSheet
   WorkSheet := WorkBk.WorkSheets.Get_Item(1) as _WorkSheet;
   // Сопоставляем Delphi массив-матрицу с матрицей в WorkSheet
   Worksheet.Range['A1',Worksheet.Cells.Item[R,C]].Value := TabGrid;
   // Заполняем свойства WorkSheet
   WorkSheet.name := 'Customers';
   Worksheet.Columns.Font.Bold := True;
   Worksheet.Columns.HorizontalAlignment := xlRight;
   WorkSheet.Columns.ColumnWidth := 14;
   // Заполняем всю первую колонку
   WorkSheet.Range['A' + IntToStr(1),'A' + IntToStr(R)].Font.Color := clBlue;
   WorkSheet.Range['A' + IntToStr(1),'A' + IntToStr(R)].HorizontalAlignment := xlHAlignLeft;
   WorkSheet.Range['A' + IntToStr(1),'A' + IntToStr(R)].ColumnWidth := 31;
   // Показываем Excel
   XLApp.Visible[0] := True;
   // Разрываем связь с сервером
   XLApp.Disconnect;
   // Unassign the Delphi Variant Matrix
   TabGrid := Unassigned;
 end;
end;



Получение данных из Excel

Это можно сделать с помощью следующей процедуры

procedure TForm1.BitBtnFromExcelOnClick(Sender: TObject);
var
 WorkBk: _WorkBook;
 WorkSheet: _WorkSheet;
 K, R, X, Y: Integer;
 IIndex: OleVariant;
 RangeMatrix: Variant;
 NomFich: WideString;
begin
 NomFich := 'C:\MyDirectory\NameOfFile.xls';
 IIndex := 1;
 XLApp.Connect;
 // Открываем файл Excel
 XLApp.WorkBooks.Open(NomFich, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
 EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,EmptyParam,0);
 WorkBk := XLApp.WorkBooks.Item[IIndex];
 WorkSheet := WorkBk.WorkSheets.Get_Item(1) as _WorkSheet;
 // Чтобы знать размер листа (WorkSheet), т.е. количество строк и количество
 // столбцов, мы активируем его последнюю непустую ячейку
 WorkSheet.Cells.SpecialCells(xlCellTypeLastCell,EmptyParam).Activate;
 // Получаем значение последней строки
 X := XLApp.ActiveCell.Row;
 // Получаем значение последней колонки
 Y := XLApp.ActiveCell.Column;
 // Определяем количество колонок в TStringGrid
 GenericStringGrid.ColCount := Y;
 // Сопоставляем матрицу WorkSheet с нашей Delphi матрицей
 RangeMatrix := XLApp.Range['A1',XLApp.Cells.Item[X,Y]].Value;
 // Выходим из Excel и отсоединяемся от сервера
 XLApp.Quit;
 XLApp.Disconnect;
 //  Определяем цикл для заполнения TStringGrid
 K := 1;
 repeat
   for R := 1 to Y do
     GenericStringGrid.Cells[(R - 1),(K - 1)] := RangeMatrix[K,R];
   Inc(K,1);
   GenericStringGrid.RowCount := K + 1;
 until
   K > X;
 // Unassign the Delphi Variant Matrix
 RangeMatrix := Unassigned;
end;


KilkennyCat   (2006-05-06 20:54:00) [11]

Да. TExcelApplication


Наверх

Титульная страница Поиск, карта сайта Написать письмо