Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > from Excel->Paradox


Автор: Dron84 12.11.2005, 20:28
Как перегнать все данные из Excel(xls) в Paradox(db)

Автор: Albinos_x 13.11.2005, 10:54
ищи
http://forum.vingrad.ru/index.php?showforum=89
или
http://www.zoforum.zeroes-and-ones.com.ru/index.php?showtopic=135
Добавлено @ 10:56
ещё в DRKB это есть...

Автор: Dron84 13.11.2005, 21:04
Albinos_x
можно по подробнее, только не из db в ексель, а наоборот

Автор: Albinos_x 13.11.2005, 22:05
Цитата(Dron84 @ 13.11.2005, 21:04)
только не из db в ексель, а наоборот


открыть док:
Код

...
OpenDialog1.Filter:='List Microsoft Excel|*.xls';
if OpenDialog1.Execute then
begin
ExcelApplication1:=TExcelApplication.Create(self);
ExcelApplication1.ConnectKind:=ckRunningInstance;
ExcelApplication1.Visible[0]:=true;
ExcelApplication1.AutoConnect:=true;
ExcelApplication1.AutoQuit:=true;
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.Add(OpenDialog1.FileName,0));
ExcelWorksheet1.ConnectTo(ExcelApplication1.ActiveWorkBook.ActiveSheet as ExcelWorksheet);
...

прочитать из ячейки:
Код
...
var MyRange : OleVariant;
     s:String;
...
MyRange:=ExcelWorksheet1.Range['a1',EmptyParam];
S:=MyRange;
// далее заносим в таблицу
Table1.Append;
Table1.FieldByName('Pole1').AsString:=S;
Table1.Post;
...


этого хватит или подробней?

Автор: Dron84 14.11.2005, 00:02
Albinos_x
если тебя не затруднит, сделай пожалуйста пример... Please!!!

Автор: Albinos_x 14.11.2005, 11:35
следующий код считывает из ячейки А1 и записывает в ячейку [1,1] Table: TStringGrid
Код
...
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExcelXP, OleServer, Grids;

type
  TForm1 = class(TForm)
    ExcelApplication1: TExcelApplication;
    ExcelWorksheet1: TExcelWorksheet;
    ExcelWorkbook1: TExcelWorkbook;
    OpenDialog1: TOpenDialog;
    Button1: TButton;
    Table: TStringGrid;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var V:OleVariant;
begin
if OpenDialog1.Execute then
   begin
   // запускаем Excel
   ExcelApplication1.AutoConnect:=true;
   // открываем книгу
   ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.OpenXML(OpenDialog1.FileName,EmptyParam));
   // соединяемся с книгой
   ExcelApplication1.ConnectTo(ExcelWorkbook1.Application);
   ExcelWorksheet1.ConnectTo(ExcelWorkbook1.ActiveSheet as ExcelWorksheet);
   // делаем видимым Excel
   ExcelApplication1.Visible[0]:=true;
   // считываем ячейку
   v:=ExcelWorksheet1.Range['A1',EmptyParam];
   // записываем в таблицу
   Table.Cells[1,1]:=V;
   // выходим из Excel
   ExcelApplication1.Quit;
   end;

end;
...


в твоём случае надо записывать в БД следовательно:
Код
...
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExcelXP, OleServer, Grids;

type
  TForm1 = class(TForm)
    ExcelApplication1: TExcelApplication;
    ExcelWorksheet1: TExcelWorksheet;
    ExcelWorkbook1: TExcelWorkbook;
    OpenDialog1: TOpenDialog;
    Button1: TButton;
    Table: TStringGrid;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var V:OleVariant;
begin
if OpenDialog1.Execute then
   begin
   // запускаем Excel
   ExcelApplication1.AutoConnect:=true;
   // открываем книгу
   ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.OpenXML(OpenDialog1.FileName,EmptyParam));
   // соединяемся с книгой
   ExcelApplication1.ConnectTo(ExcelWorkbook1.Application);
   ExcelWorksheet1.ConnectTo(ExcelWorkbook1.ActiveSheet as ExcelWorksheet);
   // делаем видимым Excel
   ExcelApplication1.Visible[0]:=true;
   // считываем ячейку
   v:=ExcelWorksheet1.Range['A1',EmptyParam];
   // записываем в таблицу
   Table1.Append;                                            //здесь наши изменения. первая команда добавляет запись в БД
   Table1.FieldByName('Pole1').AsString:=S;        //     вторая записывает данные
   Table1.Post;                                                     //    третьей сохраняем изменения

   // выходим из Excel
   ExcelApplication1.Quit;
   end;

end;
...


если количество сток не известно, то :
Код
...
procedure TForm1.Button1Click(Sender: TObject);
var V:OleVariant;
     row, i:integer:
begin
if OpenDialog1.Execute then
   begin
   // запускаем Excel
   ExcelApplication1.AutoConnect:=true;
   // открываем книгу
   ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks.OpenXML(OpenDialog1.FileName,EmptyParam));
   // соединяемся с книгой
   ExcelApplication1.ConnectTo(ExcelWorkbook1.Application);
   ExcelWorksheet1.ConnectTo(ExcelWorkbook1.ActiveSheet as ExcelWorksheet);
   // делаем видимым Excel
   ExcelApplication1.Visible[0]:=true;
   ExcelWorksheet1.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
   row:=ExcelApplication1.ActiveCell.Row;
  // от 2 т.к. предпологаю, что первая является заголовком
   for i:=2 to row do
      begin
      // считываем ячейку
      v:=ExcelWorksheet1.Range['A'+inttostr(i),EmptyParam];
      // записываем в таблицу
      Table1.Append;                                               //    добавляеь запись в БД
      Table1.FieldByName('Pole1').AsString:=S;           //     записываем данные
      Table1.Post;                                                     //    сохраняем изменения
      // чтоб приложение не "повисало"
      Application.ProgresMessages;
      end;
   // выходим из Excel
   ExcelApplication1.Quit;
   end;

end;
...


последний код прочитает и занесёт в БД из первого слобеца Excel

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)