Форум: "Основная";
Текущий архив: 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