![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как DBF-файл открыть в EXCEL? [D6, dBase, FoxPro]
Diman © (2004-08-12 11:54:00)Есть таблица DBF с неизвестным кол-вом полей.Как ее занести в EXCEL?
Diman (2004-08-12 15:07:00) [1]Проблема вот в чем, открываю одну таблицу, она открывается - сколько хочу раз, закрываю ее в Excel, открываю другую - не хочет.:(
Danilka (2004-08-12 14:48:00) [2][20] Diman (12.08.04 14:32)
Запусти эксель (не дельфями, не через оле, а по-обычному). Открой любой файл. Затем попытайся его еще раз открыть, что видишь? Вот это и есть твои "глюки".
Ты первый раз открыл в экселе свою ДБФ-ку, после того как поработал с ней надо ее закрывать.
> может и забыл, а какой файл?
свою ДБФ-ку.
Как закрывать? close, очевидно. :))
Diman (2004-08-12 14:32:00) [3]может ты просто забыл закрыть файл после первого раза? :))
- может и забыл, а какой файл?
Когда убрал ExcelApp := GetActiveOleObject('Excel.Application');
все заработало! А что делать, если Excel уже открыт?
Danilka (2004-08-12 14:28:00) [4]
> а потом стал запускать - одни глюки...
Что значит "одни глюки"? Точно одни, можен еще с кем-то? :))
> получилось 1 раз
может ты просто забыл закрыть файл после первого раза? :))
Diman (2004-08-12 14:19:00) [5]Неа, не получилось, точнее, получилось 1 раз, а потом стал запускать - одни глюки...
edit1.Text := FN.FileName;
if copy(edit1.text,length(edit1.text)-3,4) = '.dbf' then
begin
// showmessage('DBF');
try
ExcelApp := GetActiveOleObject('Excel.Application');
except
ExcelApp := CreateOleObject('Excel.Application');
end;
WorkBook := ExcelApp.WorkBooks.Open(edit1.text);
ExcelApp.Visible := True;
end;
Skyle (2004-08-12 13:56:00) [6]
> [10] Diman (12.08.04 12:42)
Страсти какие...:(
Danilka (2004-08-12 13:52:00) [7][15] 46_55_41_44 © (12.08.04 13:46)
> помоему все-таки лучще через АДОконнекшн! )))
Кому именно лучше?
Если пользователям, то нет, зачем им ждать 10 секунд там, где может отработать за доли секунды.
Если программисту, то тоже нет, написать 1 строчку Workbooks.Open вместо целой кучи строчек и используемых компонентов..
46_55_41_44 (2004-08-12 13:46:00) [8]Ну как получилось?
помоему все-таки лучще через АДОконнекшн! )))
Diman (2004-08-12 13:06:00) [9]>Danilca@
Действительно, сейчас попробую сразу открыть через Open, Спасибо.
Danilka (2004-08-12 12:52:00) [10][11] 46_55_41_44 © (12.08.04 12:46)
Открыть ДБФ-ку в экселе будет на порядок быстрее, чем через оле.
А чтобы открыть ее опять-же создаешь оле объект Эксель.Аппликацион, и делаешь ему Workbooks.Open
Diman (2004-08-12 12:50:00) [11]Остальная часть пусть будет для всех !
А как читать из DBF, не через READLN же?
46_55_41_44 (2004-08-12 12:46:00) [12]понятно... но зачем ту часть, которая мне известна выложил? )))
Эти функции у меня есть )))
Кстати тем же макаром делаешь из DBF.
просто соединяешь ее с DBGrid (вместо mem будет например ADOQuery, соединенный с *.DBF) и все...
остается только RTF! )))
Diman (2004-08-12 12:42:00) [13]unit txt_to_DBGrid;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, StdCtrls, Buttons, DB, RxMemDS, OleServer,ComObj;
type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
SpeedButton1: TSpeedButton;
Edit1: TEdit;
FN: TOpenDialog;
Button1: TButton;
MEM: TRxMemoryData;
DataSource1: TDataSource;
MEMF0: TIntegerField;
MEMF1: TIntegerField;
MEMF2: TIntegerField;
MEMF3: TIntegerField;
MEMF4: TIntegerField;
MEMF5: TIntegerField;
MEMF6: TIntegerField;
MEMF7: TIntegerField;
MEMF8: TIntegerField;
MEMF9: TIntegerField;
BitBtn1: TBitBtn;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure SpeedButton1Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
const a: array[0..9] of string[1] = ('0','1','2','3','4','5','6','7','8','9');
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
f: textfile;
s,s1,S2: string;
k: integer;
function ReplaceStr(const S, Srch, Replace: string): string;
var
q: Integer;
Source: string;
begin
Source := S;
Result := '';
repeat
q := Pos(Srch, Source);
if q > 0 then begin
Result := Result + Copy(Source, 1, q - 1) + Replace;
Source := Copy(Source, q + Length(Srch), MaxInt);
end
else Result := Result + Source;
until q
46_55_41_44 (2004-08-12 12:34:00) [14]давай сюда кодик )))
у меня есть свой юнит Fuad_Excel.pas собрал там всякие функции для работы с Excel... Может твоя тоже понадобится ))
46_55_41_44 (2004-08-12 12:32:00) [15]так секундочку... как ты из текстового сделал?
Diman (2004-08-12 12:30:00) [16]Да Fuad! Из текст-файла получилось! теперь надо из DBF и RTF!
jack128 (2004-08-12 12:28:00) [17]ShellExecute(0, nil, 'excel.exe', DBFFileName, nil, SW_SHOW);
46_55_41_44 (2004-08-12 12:24:00) [18]
> Diman (12.08.04 12:18) [4]
Ну что Диман.. Ты наконец-то перевел свои данные в Excel?
Diman (2004-08-12 12:18:00) [19]Надо через Делфи, напр. кнопка "Открыть в Excel", а перед этим показать DBF-таблицу в DBGrid.
Соловьев (2004-08-12 12:03:00) [20]хотя если включить телепат моде то
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=502