您将立马获得<font color="#ff0000">450分</font>(300分)

  • 主题发起人 主题发起人 茶叶蛋
  • 开始时间 开始时间

茶叶蛋

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序:
var
FileName, FileFormat, Template, NewTemplate,
LockComments, Password,
AddToRecentFiles, WritePassword,
ReadOnlyRecommended, EmbedTrueTypeFonts,
SaveNativePictureFormat, SaveFormsData, SaveAsAOCELetter : OleVariant;
List : TStringList;
begin
Template := 'C:/Program Files/Microsoft Office/Templates/Normal.dot';
NewTemplate := false;
MyWord:= CoApplication_.Create;
MyWord.Documents.Add( Template, NewTemplate );
Ole.DoVerb( ovShow );
//......
//......
FileName := ExtractFilePath( ParamStr( 0 ) ) + 'temple.HTML';
FileFormat := 101;
LockComments := False;
Password := '';
AddToRecentFiles := True;
WritePassword := '';
ReadOnlyRecommended := False;
EmbedTrueTypeFonts := False;
SaveNativePictureFormat := False;
SaveFormsData := False;
SaveAsAOCELetter := False;

Myword.ActiveDocument.SaveAs( Filename,
FileFormat,
LockComments,
Password,
AddToRecentFiles,
WritePassword,
ReadOnlyRecommended,
EmbedTrueTypeFonts,
SaveNativePictureFormat,
SaveFormsData,
SaveAsAOCELetter );
SaveChanges := false;
RoutiDocument := 0;
OriginalFormat := 0;
Ole.SaveToStream( OleStream );
MyWord.Quit( SaveChanges, RoutiDocument, OriginalFormat );
MyWord._Release;
Ole.Close;

List := TStringList.Create;
List.LoadFromFile( ExtractFilePath( ParamStr( 0 ) ) + '~$temple.HTML' );
List.savetoFile( ExtractFilePath( ParamStr( 0 ) ) + '0.HTML');
List.free;
end;
我的程序里面引用了wordBasic,主要是想把正在编辑的Word文档
用word动态的转换为html文件.但是word转换完毕后,我的程序对该Html文件
进行读操作时,delphi告诉我访问冲突!我想应该是word写完html文件后没有
关闭文件,而系统看见是我的程序调用的word,就把word开的文件算到我的头
上,然后看到我想打开该文件,就认为我是第二次打开文件,不许我干活.
究竟应该怎么办我才能读取该html文件呢?
此处300分,&lt;a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=103591"&gt;此处&lt;/a&gt;还有150分,
亲爱的DelphiBBS的大虾们,眼睁睁的看着一个狂热的&lt;font color="#0000ff"&gt;Delphi Fan&lt;/font&gt;
因为纯粹是M$的问题而转去用VB,是一件很悲惨的事情.我不希望这件事发生在
别人身上,也不希望发生在我的身上......

&lt;b&gt;&lt;big&gt;拔刀吧,大虾们!&lt;/big&gt;&lt;/b&gt;
听,风中的刀声......
 
这么高深的东西我不懂, 但我想你试试在关闭WORD前把你的文档关闭一下.

还有可能WORD正的关闭文件, 而你的程序太焦急了点...
 
我用过MyWord.Quit( SaveChanges, RoutiDocument, OriginalFormat );和
MyWord.Quit( SaveChanges, RoutiDocument, OriginalFormat );
来关闭文档,可是delphi调出来一个异常,告诉我我的文档在另一个程序里面?应该怎么用呢?
另外,我在程序里头加了一个showmessage('......');老老实实地等了5秒钟,还是"不能打开"
该文件.

对不起,以上程序应该屏蔽掉这句话.
MyWord.Quit( SaveChanges, RoutiDocument, OriginalFormat );
 
应该还是WORD没有关闭。
不如不断测试WINWORD.EXE在内存的状态,直到其退出再操作,不就可以了吗?
或者测试文件的状态,确定它没被其它程序占用也可以呀?
 
如果你仅是想将.doc转换成.HTML,我建议你用一个组件,它能直接完成这件
工作,不过,我不保证他支持所有的word版本。
另外,你可以尝试将.doc转换成.rtf,至于.rtf到.html的转换,就比比皆是
了。
 
有趣,没试过!
转换为其它格式行吗?
如果行,因该是WORD的BUG
试 OFFICE 2000 吧

BTW:好象是《风铃中的刀声》
 
用Filestream读,他应该可以控制打开方式。
或者拷贝一个副本算了。

茶叶蛋,你可是没有“疯狂编程中”啊,各位,我举报,
茶叶蛋下午在打“金镛群侠转”来着 。
 
to 曹晓钢:
疯狂编程中-&gt;遇到障碍了-&gt;绕不过去-&gt;开始请教金庸群侠.
这个文件是即时生成的,就象你的离线浏览器一样,如果我要Copy一个副本,
至少我得能打开它吧?如果我能打开它,这450分就是我的了...
ps: 我马上用FileStream.不过我下午用过了Assignfile和Reset,只读,没用...

to CJ:
现在我的机器开一个d4,开一个netscape,开一个我的应用程序,里面嵌有word97,
然后就不能干别的事了,不然死机没商量.Office2000,天哪!
ps: 只要是word能转换的,我都能用程序实现.但是,转换过后...

to 阿明:
我用的WordBasic,应该是对后续版本兼容的,但如果我用了控件,就无法保证
对word的后续版本兼容,这样一旦word升级,我不能强迫用户老是用旧版本吧?
 
先关闭文档看看:

MyWord.Documents.close("YourDocName.html");
 
to 曹晓钢: 也不行啊!它又告诉我不能打开耶!

to wuyi: 搞不懂怎么回事,
MyWord.Documents.close("YourDocName.html");D4不认!
我用过MyWord.Documents.close;,D4也不认!
实在在Word_TLB里面这两个函数都有定义的啊!
 
dao yi da xi ma xi da(日语:对不起)
上会望告知,你的Word Basic中应以文本方式存储*.Html文件,后缀为*.htm,
这样就能用IE或Netscape浏览了。
 
to Jams:
你的问题解决没有?
 
&gt;&gt;&gt;先关闭文档看看:

&gt;&gt;&gt; MyWord.Documents.close("YourDocName.html");

再试试: MyWord.Documents("YourDocName.html").close
 
同感!我用EXCEL打开数个表格无法关闭,惨!只好转用VB,但我DELPHI志向未移。
 
to wuyi:
我用: MyWord.Documents('d:/1.HTML').close;
出现: Missingoperator or semicolon

我用: MyWord.Documents('d:/1.HTML').close;
出现: types of actual and formal var parameters must be identical
 
to wuyi:
应该是要先关闭文档,但是现在我关闭不了!
我把Myword.activedocument.close(...)
里面的三个参数我都赋过了.
( 第二,三个我不知道是什么,都给的是 Variant( 0 ) )
程序运行的时候告诉我:程序中不包含活动的文档. 
 
我查了OFFICE的一个技术文档, 里面是VB的源码, 但CLOSE是肯定没有参数的,
你怎么会有三个参数? 还有, 能否寄你的程序在我的机器上一试.
 
to wuyi:
茶叶蛋导入了一个Word 8.0 Documents 的接口文件,delphi 4.0还不支持
缺省参数.

所以Close需要三个参数, 下面是Word Basic中Document.close的说明.
expression.Close(SaveChanges, OriginalFormat, RouteDocument)
expression是一个Document对象.
SaveChanges Variant 类型,可选。指定保存文档时的操作。可选下列 WdSaveOptions 常量之一:wdDoNotSaveChanges
、wdPromptToSaveChanges 或 wdSaveChanges。

OriginalFormat Variant 类型,可选。指定文档的保存格式。可选下列 WdOriginalFormat 常量之一:
wdOriginalDocumentFormat、wdPromptUser 或 wdWordDocument。

RouteDocument Variant 类型,可选。如果为 True,则将文档传送到下一个收件人。如果文档没有附加传送名单,则忽略此参数。
具体的常量值在导入的接口文件Word_TLB.pas中有描述.

To 茶叶蛋:
应该这样写:
MyWord.Documents['d:/1.HTML']
.close(wdSaveChanges,wdOriginalDocumentFormat,variant(false));
其中用[]的原因是因为它是数组元素.
 
TO 茶叶蛋:
我使用了一种最简单的操作来完成您的转化工作.例子如下:

uses Comobj;

procedure TForm1.Button2Click(Sender: TObject);
var MyNewWord :OleVariant;
begin
MyNewWord := CreateOleObject('Word.application'); (* Create the Automation object *)
MyNewWord.visible:=true ; //一定要显示, 否则WOrd中HTML转化器的对话框, 无法响应.
MyNewWord.Documents.add;
MyNewWord.Selection.InsertAfter('Seasky says hello!');
MyNewWOrd.ActiveDocument.saveas('D:/TTT.Html',108);
// HTML类型(gb_2312-80) ^^^
// MyNewWord.Documents['TTT.Html'].Close;
MyNewWord.Quit;
MyNewWord:= null;
showmessage('WORD 释放了');//需要等待一下, Word释放文件需要时间;
Memo1.Lines.LoadFromFile('D:/ttt.html');
end;

希望你能从这个例子中发现你原有程序的毛病.
 
谢谢SeaSky,问题解决了.
但还不是十全十美:
1.这条语句我的Delphi不认:
MyWord.Documents['d:/1.HTML']
.close(wdSaveChanges,wdOriginalDocumentFormat,variant(false));
它说: "Item不是一种属性"

2.这条语句: MyNewWOrd.ActiveDocument.saveas('D:/TTT.Html',108);
的参数:108,WordBasic不认,告诉我说: "数值超出范围".
很奇怪,以前有人告诉我用104,WordBasic也不认.
但是我用101,WordBasic就认了,不过会有一个让我选择HTML文件的内码的对
话框出来.我不想让它出来,行吗?
 

Similar threads

后退
顶部