Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
asd ©   (2006-05-06 20:32) [0]

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


 
KilkennyCat ©   (2006-05-06 20:54) [1]

Да. TExcelApplication


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

Из 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;


 
Pavia ©   (2006-05-06 21:31) [3]

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


 
asd ©   (2006-05-06 23:07) [4]

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


 
asd ©   (2006-05-07 11:29) [5]

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


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

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

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

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


возможно?!

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


 
asd ©   (2006-05-08 13:20) [7]

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


 
KilkennyCat ©   (2006-05-08 13:37) [8]


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


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


 
asd ©   (2006-05-09 11:24) [9]

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


 
KilkennyCat ©   (2006-05-09 15:16) [10]

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


 
KilkennyCat ©   (2006-05-09 15:18) [11]

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



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.013 c
2-1146014409
DimonS
2006-04-26 05:20
2006.05.28
MS SQL в ХР и 2000 Вмндоусе. Почему работает по разному?


1-1145517697
DimMih
2006-04-20 11:21
2006.05.28
Текстовый файл-таблица


2-1147271681
Adios
2006-05-10 18:34
2006.05.28
Как вычесть из строки?


1-1145520148
tytus
2006-04-20 12:02
2006.05.28
Как в ListBox-e нарисовать изображение?


2-1147187480
tigra
2006-05-09 19:11
2006.05.28
Сумма целых чисел от 1 до....





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский