![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Doc2TXT [D5, D6, D7, WinXP]
PRT © (2006-06-15 15:41:00)Здравсвуйте Мастера!
Возникла вот такая проблемка:
Можно ли сделать так, чтоб при вызове следующей процедуры
не мигал экран. Если можно, подскажите как ?
procedure Doc2TXT(const doc_path,txt_path: string);
var WordApp: Variant;
begin
WordApp:=CreateOleObject('Word.Basic');
WordApp.FileOpen(doc_path);
WordApp.FileSaveAs(Name:=txt_path, Format := 2);
WordApp.AppClose;
WordApp:= Unassigned;
end;
KilkennyCat (2006-06-20 19:36:00) [1]> [19] MARU (20.06.06 14:59)
Я знаю.
Я напишу сегодня-завтра статью, как это делать. Давно собирался...
MARU (2006-06-20 14:59:00) [2]А может кто нибудь знает как используя конвертеры
> C:\Program Files\Common Files\Microsoft Shared\TextConv
> msconv97.dll и MSWRD832.CNV
тоже самое cltkfnm, у меня задача стоит без установленного офиса сконвертить в текст DOC, XLS, PPT.
Заранее спасибо.
PRT (2006-06-16 18:20:00) [3]Теперь работает нормально. EvS спасибо за помощь !
EvS (2006-06-16 17:34:00) [4]В меню Tools->Debugger Options на вкладке Language Exceptions убери галку на Stop on Delphi Exceptions
PRT (2006-06-16 17:27:00) [5]А у меня в этом месте
try
WordApp:=GetActiveOleObject('Word.Application');
except
возникает ошибка raised exception class EOleSysError with message 'Операция недоступна'. Process stopped.
EvS (2006-06-16 15:57:00) [6]Все работает, Select_Dir - не проверял
procedure TForm1.Button1Click(Sender: TObject);
var Docs_Dir,Text_Dir,new_name: string;
WordApp: Variant;
sr: TSearchRec;
begin
Docs_Dir:=Select_Dir(Form1);
if Docs_Dir='' then Exit;
Text_Dir:=ExtractFilePath(Application.ExeName)+'TXT';
If not DirectoryExists(Text_Dir) then CreateDir(Text_Dir);
If FindFirst(Docs_Dir+'\*.doc',faArchive,sr)=0 then
begin
try
WordApp:=GetActiveOleObject('Word.Application');
except
WordApp := CreateOleObject('Word.Application');
end;
try
repeat
new_name:=ChangeFileExt(sr.Name,'.txt');
WordApp.Documents.Open(Docs_Dir+'\'+sr.Name);
Application.ProcessMessages;
WordApp.ActiveDocument.SaveAs(Text_Dir+'\'+new_name,2);
WordApp.ActiveDocument.Close(EmptyParam, EmptyParam, EmptyParam);
until FindNext(sr)<>0;
finally
WordApp.Quit(EmptyParam, EmptyParam, EmptyParam);
WordApp:= Unassigned;
FindClose(sr);
end;
end;
end;
PRT (2006-06-16 13:27:00) [7]
> Посмотри для примера
> http://delphiworld.narod.ru/base/save_word_like_rtf.html
Я там и смотрел )) ... не работает ( Почему ???
EvS (2006-06-16 00:43:00) [8]Посмотри для примера
http://delphiworld.narod.ru/base/save_word_like_rtf.html
PRT (2006-06-16 00:06:00) [9]Вот весь модуль:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComObj, ShlObj;
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
public
end;
var Form1: TForm1;
implementation
{$R *.dfm}
function Select_Dir(Form: TForm): string;
var
TitleName, s: string;
lpItemID : PItemIDList;
BrowseInfo : TBrowseInfo;
DisplayName : array[0..MAX_PATH] of char;
TempPath : array[0..MAX_PATH] of char;
begin
FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
BrowseInfo.hwndOwner := Form.Handle;
BrowseInfo.pszDisplayName := @DisplayName;
TitleName := 'Выберите папку :';
BrowseInfo.lpszTitle := PChar(TitleName);
BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;
lpItemID := SHBrowseForFolder(BrowseInfo);
if lpItemId<>nil then
begin
SHGetPathFromIDList(lpItemID, TempPath);
s:=TempPath ;
if s[length(s)]<>'\' then Result:=s+'\'
else Result:=s;
GlobalFreePtr(lpItemID);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
if not(DirectoryExists(ExtractFilePath(Application.ExeName)+'TXT'))then
CreateDir(ExtractFilePath(Application.ExeName)+'TXT');
end;
procedure TForm1.Button1Click(Sender: TObject);
var Docs_Dir,Text_Dir,new_name: string;
WordApp: Variant;
sr: TSearchRec;
begin
Docs_Dir:=Select_Dir(Form1);
Text_Dir:=ExtractFilePath(Application.ExeName)+'TXT';
if Docs_Dir='' then Exit;
FindFirst(Docs_Dir+'*.doc',faArchive,sr);
WordApp:=CreateOleObject('Word.Basic');
repeat
new_name:=ChangeFileExt(sr.Name,'.txt');
WordApp.FileOpen(Docs_Dir+sr.Name);
WordApp.FileSaveAs(Name:=Text_Dir+'\'+new_name, Format := 2);
until FindNext(sr)<>0;
WordApp.AppClose;
WordApp:= Unassigned;
FindClose(sr);
end;
end.
если кого заинтерисовало, посмотрите скажите что я не так сделал ....
P.S.: нужно указать папку с несколькими файлами (*.doc) чтоб посмотреть как программа работает
PRT (2006-06-16 00:03:00) [10]Есть еще у меня такая функция:
function ConvertDoc2Rtf(var FileName: string) : Boolean;
var
oWord: OleVariant;
oDoc: OleVariant;
begin
Result := False;
try
oWord := GetActiveOleObject('Word.Application');
except
oWord := CreateOleObject('Word.Application');
end;
oWord.Documents.Open(FileName);
oDoc := oWord.ActiveDocument;
FileName := ChangeFileExt(FileName, '.rtf');
oDoc.SaveAs(FileName);
oWord.ActiveDocument.Close(EmptyParam, EmptyParam);
oWord.Quit(EmptyParam, EmptyParam, EmptyParam);
oDoc := VarNull;
oWord := VarNull;
Result := True;
end;
тоже не работает по какой-то причине .... может кому удастся исправить???
PRT (2006-06-16 00:02:00) [11]
> Сделай Visible:=false он вообще будет невидимым.
Идея хорошая, но если писать так: WordApp.Visible:=False, то возникает следующая ошибка 'raised exception class EOleError with message 'Method 'Visible' not supported by automation object'.
Может я что-то не так понял ??
EvS (2006-06-15 22:49:00) [12]Сделай Visible:=false он вообще будет невидимым.
PRT (2006-06-15 21:52:00) [13]
> делай
> WordApp:=CreateOleObject('Word.Basic');
>
> WordApp.AppClose;
> один раз
Если б еще можно было чтоб Word запускался свернутым ???
Или так сохранять не будет ???
EvS (2006-06-15 21:16:00) [14]делай
WordApp:=CreateOleObject('Word.Basic');
WordApp.AppClose;
один раз
PRT (2006-06-15 20:21:00) [15]Я хочу сделать программу которая бы конвертировала не 1 файл, а много.
Пользователь указывает путь к папке с файлами *.doc и программа создает папку с такими же именами файлов, только *.txt
Это основная процедура.
> procedure Doc2TXT(const doc_path,txt_path: string);
> var WordApp: Variant;
> begin
> WordApp:=CreateOleObject('Word.Basic');
> WordApp.FileOpen(doc_path);
> WordApp.FileSaveAs(Name:=txt_path, Format := 2);
> WordApp.AppClose;
> WordApp:= Unassigned;
> end;
Но когда прога начинает конвертить то для каждого файла открывается и закрывается Word.
Если файлов много , то занимает много времени (((
Если кто знает что можно сделать , подскажите...
PRT (2006-06-15 20:01:00) [16]
> WordApp := CreateOleObject('Word.Application');
> ...
> WordApp.quit;
тогда WordApp.FileOpen(doc_path); не работает ( ?????
> C:\Program Files\Common Files\Microsoft Shared\TextConv
> msconv97.dll и MSWRD832.CNV
что мне с этим делать ???
KilkennyCat (2006-06-15 19:34:00) [17]C:\Program Files\Common Files\Microsoft Shared\TextConv
msconv97.dll и MSWRD832.CNV
TUser (2006-06-15 17:02:00) [18]Используй программу antiword. Она никаких вордов не грузит, будет работать и без него. А сама легкая и гнушная.
Dmitrij_K (2006-06-15 16:42:00) [19]У меня ничего не мигает.
Только я делаю так
begin
WordApp := CreateOleObject('Word.Application');
...
WordApp.quit;
end
PRT (2006-06-15 16:36:00) [20]Не забудьте подключить uses ComObj