Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

импорт Exelевской таблицы.

Как сделать сабж в мою программу?
Мне надо открыть Exel файл (~5000 строк, прайс). Сделать с ним некоторые
операции, а затем сохранить этот файл. Не обязательно в формате exel. Как
всё это сделать с минимальными затратами времени? Желательно с примерами
(Delphi). Или киньте в меня ссылочкой по теме.
Номер выпуска : 2850
Возраст листа : 206 (дней)
Количество подписчиков : 387
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/126000
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Олег Кузьмин Thu, 15 Apr 2004 01:26:26 +0400 (#126000)

 

Ответы:

Win32)

Доброго времени суток!

On Thu, 15 Apr 2004 01:26:26 +0400 you wrote:

Для этого можно воспользоваться технологией OLE. В справке к Делфи
неплохо описана. При желании информацию можно поискать в интернете.

Ответить   Thu, 15 Apr 2004 11:01:32 +0400 (#126046)

 

Я конечно посмотрю, но на самом деле мне хотелось немного другое. Я хотел бы
скопировать экселевскую таблицу в свою БД, и там с ней работать средствами
Дельфи. А при использование OLE ведь прийдётся обходиться средствами exel?
Мне этих средств не хватит. Если бы я мог обойтись средствами exel я не
писал бы свою программу...
Номер выпуска : 2853
Возраст листа : 206 (дней)
Количество подписчиков : 387
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/126351
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Олег Кузьмин Thu, 15 Apr 2004 15:15:00 +0400 (#126351)

 

Win32)

Доброго времени суток!

On Thu, 15 Apr 2004 15:15:00 +0400 you wrote:

Насколько я знаю excel позволяет сделать экспорт в dbf. Эту dbf-ку можно
открыть из Делфи и работать с ней. Такой вариант устроит?

Ответить   Thu, 15 Apr 2004 18:16:16 +0400 (#126361)

 

В принципе да. Я и забыл про такое простое решение :). А какие ещё есть
варианты?

P.s.: А средствами дельфи нельзя xls конвертнуть в dbf? Я пишу программку
для обработки прайсов, и как-то негоже заставлять пользователя пересохранять
свой файл в dbf. Пока что это не критично, но всё же...
Номер выпуска : 2855
Возраст листа : 206 (дней)
Количество подписчиков : 387
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/126480
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Олег Кузьмин Thu, 15 Apr 2004 20:01:25 +0400 (#126480)

 

15 апреля 2004 г. от кого-то с адреса bamn***@r*****.ru, не без помощи сервера
localhost; (IP )мне в ящик свалилось какое-то непонятное письмо по теме "импорт
Exelевской таблицы.", на что через осмысливания я решил высказаться:

Тебе же говорили - OLE. Объясняю, тебе не нужно обрабатывать данные с помощью
OLE, тебе нужно _вытащить_ данные с помощью OLE, ну а дальше делай с ними
что
хочешь...

Ответить   LinFor Fri, 16 Apr 2004 01:35:15 +0400 (#126654)

 

Как?
На напримере простейшего случая:.как из OleContainer1 в котором открыт
exelевский файл, скопировать все (ну или не все) ячейки в StringGrid1?
Номер выпуска : 2879
Возраст листа : 210 (дней)
Количество подписчиков : 385
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/128683
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Олег Кузьмин Mon, 19 Apr 2004 01:16:39 +0400 (#128683)

 

Здарова, Олег Кузьмин!

19 апреля 2004 г., понедельник, 02:16:39 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "импорт Exelевской таблицы.",
в котором сообщалось следующее:

Может глянешь на код который я привел?
Re[2]: импорт Exelевской таблицы.
16 Apr 2004
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/127234

Ответить   Томилов Александр Mon, 19 Apr 2004 20:17:37 +0500 (#128930)

 

Хе :). Если бы я ещё чо-нить понял там...

file://workbook:=excel.Workbooks.Open('D:\!!!!!!!!!NADO\_tomilov\комп_2.
^^^^^^^
file://workbook:=excel.Workbooks.Open('D:\!!!!!!!!!NADO\_tomilov\Прайс
^^^^^^^-----Это что такое?
...

sheet:=workbook.Worksheets.Item[2];
И это что такое--------^^^^^ (в справке нету :( )
IRange:=sheet.UsedRange;
maxRow:=IRange.Rows.Count;
maxColumns:=IRange.Columns.Count;
Values:=IRange.Value;

и т.д. и т.п.
...
...
...
Номер выпуска : 2888
Возраст листа : 211 (дней)
Количество подписчиков : 385
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/129290
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Олег Кузьмин Tue, 20 Apr 2004 00:43:39 +0400 (#129290)

 

Здарова, Олег Кузьмин!

20 апреля 2004 г., вторник, 01:43:39 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "импорт Exelевской таблицы.",
в котором сообщалось следующее:

Ну не знаю, может енто аутГлюк выдал новый перл, но в Bate и по адресу
в архиве (в инете в архивах subscribe), "file:" отсутствует т.к. в
оригинале это был просто комментарий "//", т.е. "file:" просто сотри.

А енто такой property у workbook: variant;
Если перевести с ангельского, то получиться что в property Worksheets
содержаться листы из документа xls, а насчет справки - дык там многого
нет (например я долго, упорно и, главное, безрезультатно искал инфу по
созданию ярлыков в справке от Delphi 5).
По поводу работы с Excel могу посоветовать покопаться в справке по
Visual Basic (который идет с M$ Office).

Огласите весь список, пжлста ;) Объясню по мере возможности.
PS: А ведь работает пример или все-таки нет (надо, правда, под свой
xls код немного подправить)?

Ответить   Томилов Александр Tue, 20 Apr 2004 19:57:08 +0500 (#129651)

 

Ну я в принципе так и предположил, и просто удалил эти лишние строки.

ага, понятно, значит мне надо item[1]. Спасибо. Это ГЛАВНОЕ что я вынес из
Вашего примера. Огромное спасибо! Почти ниделю(!) лопатил
справку/интернет/книги, нигде таких примеров небыло :(.

ОК, поситаю.
Блин, мне и в страшном сне не могло присниться, что для написания программы
на дельфе, прийдётся читать справку по VisualBasic'у, ну хорошо хоть не по
ассемблеру :).

Вау, не ожидал. Если честно, то я и не думал, что Вы свой код ещё и
объяснять будете :), но это уже лишнее, оно мне не надо (см. ниже).

Ну я бы даже сказал не немножко :). Я из него почти всё выкинул (да не
почти, а всё выкинул :)). Главное Вы мне уже сообщили - как обратиться к
конкретной ячейки в ОЛЕ контейнере, остальное дело техники... Вообще-то мне
лень в Вашем коде разбираться, я пожалуй сразу начну свой писать :). Если
что - буду спрашивать.

P.s.: с меня пиво :). Будете в Белгороде - пишите, попьём пивка.
Номер выпуска : 2893
Возраст листа : 212 (дней)
Количество подписчиков : 385
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/129844
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Олег Кузьмин Wed, 21 Apr 2004 01:17:50 +0400 (#129844)

 

Вот и первые вопросы :).

Вот здесь:

Как я понимаю, Вы закрываете ненужных более переменные для освобождения
памяти. Но когда я попытался такое сделать у себя, дельфя начала ругаться:
Undeclared identifier на "Unassigned" и "null". В Вашем коде я тоже не нашёл
где вы определяете эти переменные (переменные ли?). Внимание вопрос! Как
работает приведённый кусок кода?
Номер выпуска : 2894
Возраст листа : 212 (дней)
Количество подписчиков : 385
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/129864
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Олег Кузьмин Wed, 21 Apr 2004 03:20:31 +0400 (#129864)

 

Здарова, Олег Кузьмин!

21 апреля 2004 г., среда, 04:20:31 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "импорт Exelевской таблицы.",
в котором сообщалось следующее:

Ну эти переменные у меня в System храняться (который даже в uses не
надо прописывать).
PS: Может дело в версии делфей

Ответить   Томилов Александр Wed, 21 Apr 2004 23:14:40 +0500 (#130528)

 

Здарова, Олег Кузьмин!

21 апреля 2004 г., среда, 04:20:31 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "импорт Exelевской таблицы.",
в котором сообщалось следующее:

Ну эти переменные у меня в System храняться (который даже в uses не
надо прописывать). Попробуй написать System.Unassigned и System.null.
PS: Может дело в версии Delphi - у меня 5.
PPS: Сорри если ушло несколько писем - страшно заглючила винда + Bat.

Ответить   Томилов Александр Wed, 21 Apr 2004 23:40:06 +0500 (#130535)

 

Не работает :(. С этим надо что-то делать. А то через 2 часа работы
(постоянных пусков/остановок программы) у меня занятой памяти - 600Мб
показывает (по 6 метров при каждом запуске отжирается). И комп начинает
слегка подтормаживать. Но когда закрываю дельфю - память освобождается.

У меня 6.
Номер выпуска : 2906
Возраст листа : 213 (дней)
Количество подписчиков : 386
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/130606
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Олег Кузьмин Thu, 22 Apr 2004 00:29:33 +0400 (#130606)

 

22 апреля 2004 г. от кого-то с адреса bamn***@r*****.ru, не без помощи сервера
localhost; (IP )мне в ящик свалилось какое-то непонятное письмо по теме "импорт
Exelевской таблицы.", на что через осмысливания я решил высказаться:

Именно. Начиная с 6-ой версии это дело вынесено в отдельный модуль - Variants.
Соответственно, его неплохо бы подключить.

Ответить   LinFor Fri, 23 Apr 2004 15:04:30 +0400 (#131590)

 

Олег Кузьмин пишет:

1. Есть такой Gnumeric, он идет под GPL. Вот возми его исходник и
посмотри, как они импортируют экселевские файлы.
2. Не раз нарывался на маленькие утилиты импорта-экспорта, тоже под GPL.
Поищи в гугле и посмотри исходники.

Ответить   Fri, 16 Apr 2004 07:25:23 +0300 (#126770)

 

Здравствуйте !

Я в свое время как то писал компонент импорта данных
из различных БД в прогу. Делал с помощью ODBC. Импортировал и из экселя
тоже.
Главное, чтобы ODBC драйвер был. Вобщем, ничего сложного, но у меня все на
MFC писано. Если надо - могу откопать, да поделиться идеями.
Ходя, надо просто доку по ODBC прочитать... Ничего сложного.
Кстати, если планируется, что прога работает только под win 2000/Xp -
можно то же самое сделать с помощью ADO, например (просто с 2000-й винды
оно вместе с виндами идет).

--
С уважением, Вахтуров Виктор.
Информационный сайт для программистов http://SoftMaker.com.ru
Номер выпуска : 2856
Возраст листа : 206 (дней)
Количество подписчиков : 387
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/126493
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Thu, 15 Apr 2004 21:52:48 +0400 (#126493)

 

Импортировал из excel в dbf. И хочу сказать, что не настолько уж это просто
сделать.
Там кучу условий необходимо выполнить. Информация может потеряться, так как
в dbf заносятся только значения, которые видны на экране, для этого надо
столбцы Excel делать как можно шире, если в ячейке забита формула, тоже
проблема может возникнуть, так как знак деления может быть воспринят как
слеш, если есть записи на русском языке (а в прайсе они должны быть), то
опять же возникает проблема со шрифтами.
Эти все проблемы надо решать до импорта в dbf. И скорее всего пользователю.
Или макрос писать, да?

так что наверное всё же с OLE будет попроще.
А вообще PHP хорошо работает с Excel. Может попытаться импорт в базу
написать на PHP?

C уважением, Бурляев Вячеслав
Номер выпуска : 2859
Возраст листа : 207 (дней)
Количество подписчиков : 387
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/126681
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Fri, 16 Apr 2004 09:06:14 +0600 (#126681)

 

Добрый день!

PHP сам по себе не умеет работать с Excel - только через OLE. Некоторые умельцы
научились создавать excel-файлы напрямую с простейшим оформлением, насчет же
вычитывания - написать-то можно, но Майкрософты запросто в любой момент могут
поменять внутренний формат файла

Вот здесь есть по работе PHP с Excel, тут же рассказаны принципы такой работы:
http://php.if.ua/faq.php?id=9

За сим прощаюсь. Юрий Истомин.
Номер выпуска : 2882
Возраст листа : 210 (дней)
Количество подписчиков : 385
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/128942
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Mon, 19 Apr 2004 16:13:02 +0400 (#128942)

 

Здарова, Олег Кузьмин!

15 апреля 2004 г., четверг, 16:15:00 (GMT+05:00), пришел ко мне
почтальон Почкин и всучил письмо с пометкой "импорт Exelевской таблицы.",
в котором сообщалось следующее:

бы

Я как-то ради интереса написал такую штуку xls->db (писал под
конкретную xls-ку). Тормозит само формирование таблицы (ну для 5 тыс. строк,
я так думаю, не будет так заметно, я тестировал на 65000 - было
несколько минут) да вообще это был мой самый первый опыт работы с
базами, пусть знающие люди подправят если что криво сделано и можно
пооптимизированне, получение содержания файла xls происходит
мгновенно.

==Начало Unit1.pas==
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComObj, ComCtrls, Excel97, Db, DBTables, Grids, DBGrids;

type
TForm1 = class(TForm)
Button6: TButton;
DBGrid1: TDBGrid;
Table1: TTable;
Query1: TQuery;
DataSource1: TDataSource;
Button1: TButton;
Button2: TButton;
StatusBar1: TStatusBar;
procedure Button6Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
ProgressBar1: TProgressBar;
var v:variant;

implementation

{$R *.DFM}

type
TCellPos = record
Row,
Col: integer;
end;

function GetLastCell(sh: variant): TCellPos;
const
xlLastCell = 11;
var
range: Variant;
begin
range:=sh.Cells.SpecialCells(xlLastCell);
Result.Row:=range.Row;
Result.Col:=range.Column;
range:=Unassigned;
end;

procedure TForm1.Button6Click(Sender: TObject);
const sql_='INSERT INTO employee.db ' +
'(Number, Item_Name, Cost_YE, Cost_RU, Warranty, Shop, ' +
'Number2, Item_Name2, Cost_YE2, Cost_RU2, Warranty2, Shop2, ' +
'Number3, Item_Name3, Cost_YE3, Cost_RU3, Warranty3, Shop3, ' +
'Number4, Item_Name4, Cost_YE4, Cost_RU4, Warranty4, Shop4) ' +
'VALUES ( ';
var excel,workbook,sheet,IRange:variant;
Values:OLEVariant;
{maxSheet,iSheet,}maxColumns,iColumns,maxRow,iRow:integer;
GTK,GTK2,GTK3:DWORD;
tmp,sql:string;
begin
excel:=CreateOleObject('Excel.Application');
try
GTK2:=GetTickCount;
//workbook:=excel.Workbooks.Open('D:\!!!!!!!!!NADO\_tomilov\комп_2.xls');
workbook:=excel.Workbooks.Open('D:\!!!!!!!!!NADO\_tomilov\Копия Прайс Электрон.xls');
//workbook:=excel.Workbooks.Open('D:\!!!!!!!!!NADO\_tomilov\Прайс Электрон.xls');
GTK2:=GetTickCount-GTK2;
try
GTK3:=GetTickCount;
sheet:=workbook.Worksheets.Item[2];
IRange:=sheet.UsedRange;
maxRow:=IRange.Rows.Count;
maxColumns:=IRange.Columns.Count;
Values:=IRange.Value;
GTK3:=GetTickCount-GTK3;

ProgressBar1.Max:=maxRow;
Table1.Active:=false;
Query1.sql.Clear;

GTK:=GetTickCount;
for iRow:=1 to maxRow do
begin
sql:=sql_+IntTostr(iRow)+' , ';

for iColumns:=2 to maxColumns do
begin
try
tmp:=Values[iRow,iColumns];
except
tmp:='';
end;
if (iColumns=2) or (iColumns=5) or (iColumns=6) or
(iColumns=8) or (iColumns=11) or (iColumns=12) or
(iColumns=14) or (iColumns=17) or (iColumns=18) or
(iColumns=20) or (iColumns=23) or (iColumns=24)
then tmp:='"'+tmp+'"'
else if tmp='' then tmp:='0';
if iColumns=24
then sql:=sql+tmp+' ) '
else sql:=sql+tmp+' , ';
end;
try
Query1.UnPrepare;
Query1.sql.Text:=sql;
Query1.Prepare;
Query1.ExecSQL;
except
end;
if iRow mod 250=0 then
begin
ProgressBar1.Position:=iRow;
Application.ProcessMessages;
end;
end;
table1.TableName:=ExtractFilePath(ParamStr(0))+'employee.db';
Table1.Active:=true;
GTK:=GetTickCount-GTK;
ShowMessage(IntTostr(GTK2)+' '+IntTostr(GTK3)+' '+IntTostr(GTK));
finally
IRange:=Unassigned;
Values:=Unassigned;
sheet:=Unassigned;
workbook:=Unassigned;
end;
finally
excel.Quit;
excel:=null;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var sql:string;
begin
Table1.Active:=false;
if not FileExists('employee.db') then
begin
Query1.UnPrepare;
sql:='CREATE TABLE "employee.db" '+
'( Number SMALLINT, Item_Name CHAR(50), Cost_YE NUMERIC(20,20), Cost_RU
NUMERIC(20,20), '+
'Warranty CHAR(15), Shop CHAR(50), '+

'Number2 SMALLINT, Item_Name2 CHAR(50), Cost_YE2 NUMERIC(20,20),
Cost_RU2 NUMERIC(20,20), '+
'Warranty2 CHAR(15), Shop2 CHAR(50), '+

'Number3 SMALLINT, Item_Name3 CHAR(50), Cost_YE3 NUMERIC(20,20),
Cost_RU3 NUMERIC(20,20), '+
'Warranty3 CHAR(15), Shop3 CHAR(50), '+

'Number4 SMALLINT, Item_Name4 CHAR(50), Cost_YE4 NUMERIC(20,20),
Cost_RU4 NUMERIC(20,20), '+
'Warranty4 CHAR(15), Shop4 CHAR(50), '+

'PRIMARY KEY (Number))';
Query1.sql.text:=sql;
Query1.Prepare;
Query1.ExecSQL;
end;
table1.TableName:=ExtractFilePath(ParamStr(0))+'employee.db';
Table1.Active:=true;
end;

procedure TForm1.Button2Click(Sender: TObject);
var sql:string;
begin
Table1.Active:=false;

Query1.UnPrepare;
Query1.sql.Clear;
sql:='INSERT INTO employee.db ' +
'(Number, Item_Name, Cost_YE, Cost_RU, Warranty, Shop) ' +
'VALUES (1, "CD", 5, 150, "No", "" )';

Query1.sql.Text:=sql;
Query1.Prepare;
Query1.ExecSQL;
Query1.UnPrepare;
sql:='INSERT INTO employee.db ' +
'(Number, Item_Name, Cost_YE, Cost_RU, Warranty, Shop) ' +
'VALUES (2, "CD", 5, 150, "No", "" )';
Query1.sql.Text:=sql;
Query1.Prepare;
Query1.ExecSQL;

table1.TableName:=ExtractFilePath(ParamStr(0))+'employee.db';
Table1.Active:=true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
{while not (csDesigning in ComponentState) do
begin
Application.ProcessMessages;
sleep(10);
end; }
ProgressBar1:=TProgressBar.Create(StatusBar1);
ProgressBar1.Parent:=StatusBar1;
ProgressBar1.Align:=alClient;
ProgressBar1.Left:=0;
ProgressBar1.Width:=1024;
ProgressBar1.Smooth:=true;
ProgressBar1.Height:=18;
end;

end.
==Конец Unit1.pas==

==Начало Unit1.dfm==
object Form1: TForm1
Left = 202
Top = 113
Width = 696
Height = 480
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object DBGrid1: TDBGrid
Left = 0
Top = 0
Width = 688
Height = 433
Align = alClient
DataSource = DataSource1
TabOrder = 1
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = 'MS Sans Serif'
TitleFont.Style = []
end
object Button6: TButton
Left = 650
Top = 84
Width = 33
Height = 25
Caption = 'Button6'
TabOrder = 0
OnClick = Button6Click
end
object Button1: TButton
Left = 570
Top = 82
Width = 45
Height = 25
Caption = 'Create'
TabOrder = 2
OnClick = Button1Click
end
object Button2: TButton
Left = 616
Top = 84
Width = 33
Height = 25
Caption = 'Add'
TabOrder = 3
OnClick = Button2Click
end
object StatusBar1: TStatusBar
Left = 0
Top = 433
Width = 688
Height = 19
Panels = <
item
Width = 1024
end>
SimplePanel = False
end
object Table1: TTable
DatabaseName = 'DefaultDD'
Left = 116
Top = 106
end
object Query1: TQuery
Left = 152
Top = 106
end
object DataSource1: TDataSource
DataSet = Table1
Left = 188
Top = 110
end
end
==Конец Unit1.dfm==

Ответить   Томилов Александр Fri, 16 Apr 2004 21:01:41 +0500 (#127234)

 

Здравствуйте, Олег.

Вы писали 15 апреля 2004 г. в 0:26:26:

Могу посоветовать Хелп из Офиса по Визуал Бейсику.
Находится он в файле VBAXL8.HLP
Это из Офиса 97.
К сожалению, я не нашел аналогичных файлов в последующих версия Офиса,
хотя в литературе нашел их точное название.
В этов файле хорошо описаны все про OLE сервер Екселе.
Самой справки по Офисным приложениям в Делфи нет, по крайней мере в 5
и 7-м я не нашел и меня спас именно этот хелп.

А еще лучше, поищи компоненты для работы с Офисом других
производителей. За мой двух летний опыт в экспорте данных в Ексел из
прог написанных на Делфи и Билдере, я заметил такие глюки:
- експорт из делфи идет гораздо медленней, чем из билдера. Алгоритм и
данные одинаковы, только синтаксис языков разный;
- Билдер не корректно работает с офисным приложениями, чем делфи, но
экспортирует данные гораздо быстрей.
А глюк заключается в следующем.
Создаем нулевой проект и кладем на форму TExcleApplication и кнопку.
На событии кнопки пишем:
Connect;
Visible = True;
Disconnect;

И видим... что билдер по Дисконнекту дает команду екселе закрыться, а
не отсоединиться от него и дать ему жить своей жизнью, как это делает
Делфя. Для того, что бы закрыть ексел надо указать Quit. Это первый
глюк. А второй - убираем дисконенкт и когда уже из билдера данные
успешно переданны в ексел, мы их видим на екране - это хорошо, но
стоит закрыть самому ексел! (а не сам документ) и при этом не выходя
из нашей проги, повторно экспортировать данные и видим еще баг -
открывается ексел, но у него рабочее место, где показана таблица
документа, как бы висит и не показывает содержимое, хотя сам ексле
виден и работает, да же курсор перемещается.
Пробовал я экспериментировать на Билдере 6, Делфе 7, при этом
подключал к ним и Офис 97 и 2000, которые идут вместе с ними - эффект
тот же, даже на разных машинах и Виндах.

Поэтому я и предлагаю поискать разработки других фирм для работы с
Офис-приложениями.

Попробуйте сами. Если кто найдет решение такой проблемы - свиситити.

--
С уважением,
Feniks mailto: feni***@b*****.ua
Идy, вижy: кто-то пить бpосил.
Номер выпуска : 2896
Возраст листа : 212 (дней)
Количество подписчиков : 385
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/130082
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: mailto:comp.soft.prog.prog--unsub@subscribe.ru

http://subscribe.ru/ mailto:ask@subscribe.ru

Ответить   Feniks Wed, 21 Apr 2004 10:01:56 +0300 (#130082)