Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.30;
Скачать: CL | DM;

Вниз

Doc2TXT   Найти похожие ветки 

 
PRT   (2006-06-15 15:41) [0]

Здравсвуйте Мастера!
Возникла вот такая проблемка:

Можно ли сделать так, чтоб при вызове следующей процедуры
не мигал экран. Если можно, подскажите как ?

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;


 
PRT   (2006-06-15 16:36) [1]

Не забудьте подключить uses ComObj


 
Dmitrij_K   (2006-06-15 16:42) [2]

У меня ничего не мигает.
Только я делаю так

begin
WordApp := CreateOleObject("Word.Application");
...
WordApp.quit;
end


 
TUser ©   (2006-06-15 17:02) [3]

Используй программу antiword. Она никаких вордов не грузит, будет работать и без него. А сама легкая и гнушная.


 
KilkennyCat ©   (2006-06-15 19:34) [4]

C:\Program Files\Common Files\Microsoft Shared\TextConv
msconv97.dll и MSWRD832.CNV


 
PRT   (2006-06-15 20:01) [5]


> WordApp := CreateOleObject("Word.Application");
> ...
> WordApp.quit;

тогда WordApp.FileOpen(doc_path); не работает ( ?????


> C:\Program Files\Common Files\Microsoft Shared\TextConv
> msconv97.dll и MSWRD832.CNV

что мне с этим делать ???


 
PRT   (2006-06-15 20:21) [6]

Я хочу сделать программу которая бы конвертировала не 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.
Если файлов много , то занимает много времени (((
Если кто знает что можно сделать , подскажите...


 
EvS ©   (2006-06-15 21:16) [7]

делай
WordApp:=CreateOleObject("Word.Basic");

WordApp.AppClose;
один раз


 
PRT   (2006-06-15 21:52) [8]


> делай
> WordApp:=CreateOleObject("Word.Basic");
>
> WordApp.AppClose;
> один раз


Если б еще можно было чтоб Word запускался свернутым ???
Или так сохранять не будет ???


 
EvS ©   (2006-06-15 22:49) [9]

Сделай Visible:=false он вообще будет невидимым.


 
PRT   (2006-06-16 00:02) [10]


> Сделай Visible:=false он вообще будет невидимым.

Идея хорошая, но если писать так: WordApp.Visible:=False, то возникает следующая ошибка "raised exception class EOleError with message "Method "Visible" not supported by automation object".
Может я что-то не так понял ??


 
PRT   (2006-06-16 00:03) [11]

Есть еще у меня такая функция:

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:06) [12]

Вот весь модуль:

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) чтоб посмотреть как программа работает


 
EvS ©   (2006-06-16 00:43) [13]

Посмотри для примера
http://delphiworld.narod.ru/base/save_word_like_rtf.html


 
PRT   (2006-06-16 13:27) [14]


> Посмотри для примера
> http://delphiworld.narod.ru/base/save_word_like_rtf.html

Я там и смотрел )) ... не работает ( Почему ???


 
EvS ©   (2006-06-16 15:57) [15]

Все работает, 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 17:27) [16]

А у меня в этом месте
try
  WordApp:=GetActiveOleObject("Word.Application");
except

возникает ошибка raised exception class EOleSysError with message "Операция недоступна". Process stopped.


 
EvS ©   (2006-06-16 17:34) [17]

В меню Tools->Debugger Options на вкладке Language Exceptions убери галку на Stop on Delphi Exceptions


 
PRT   (2006-06-16 18:20) [18]

Теперь работает нормально. EvS спасибо за помощь !


 
MARU   (2006-06-20 14:59) [19]

А может кто нибудь знает как используя конвертеры
> C:\Program Files\Common Files\Microsoft Shared\TextConv
> msconv97.dll и MSWRD832.CNV
тоже самое cltkfnm, у меня задача стоит без установленного офиса сконвертить в текст DOC, XLS, PPT.
Заранее спасибо.


 
KilkennyCat ©   (2006-06-20 19:36) [20]

> [19] MARU   (20.06.06 14:59)


Я знаю.
Я напишу сегодня-завтра статью, как это делать. Давно собирался...



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

Текущий архив: 2006.07.30;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.104 c
8-1138559567
SKIPtr
2006-01-29 21:32
2006.07.30
Как воспроизвести 2 звуковых файла


1-1150884526
eugenemail1970
2006-06-21 14:08
2006.07.30
Нужно модернизировать TBarSeries


2-1152030285
KLAUS
2006-07-04 20:24
2006.07.30
IDSmtp


1-1150560642
Avgust
2006-06-17 20:10
2006.07.30
таймер в сервисе или как его включить-выключить???


15-1151906609
Кручен-Верчен
2006-07-03 10:03
2006.07.30
Как научиться красиво говорить?