Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.013 c
2-1152258778
Homo Sapiens
2006-07-07 11:52
2006.07.30
Открыть с помощью...


2-1152266882
Diksa
2006-07-07 14:08
2006.07.30
Новая запись


2-1152028271
aka
2006-07-04 19:51
2006.07.30
Всплывающие подсказки


2-1152788121
rra
2006-07-13 14:55
2006.07.30
Определение нажатой кнопки


2-1152454547
Зм1й
2006-07-09 18:15
2006.07.30
Canvas





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский