社区
网络通信/分布式开发
帖子详情
如何用delphi操作word
z_
2005-11-28 03:31:50
急待解决的问题就是如何用delphi实现word中的统计字数
另外想多了解一些关于操作word的相关内容
比如用ole动态创建的和TWordApplication的偏重点在哪里,有什么不同等等……
大号没分了,只好找出尘封已久的马甲(还是为了顶群星闪耀贴注册的,呵呵)
...全文
888
20
打赏
收藏
如何用delphi操作word
急待解决的问题就是如何用delphi实现word中的统计字数 另外想多了解一些关于操作word的相关内容 比如用ole动态创建的和TWordApplication的偏重点在哪里,有什么不同等等…… 大号没分了,只好找出尘封已久的马甲(还是为了顶群星闪耀贴注册的,呵呵)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hellolongbin
2005-12-01
打赏
举报
回复
可以了
Thanks a lot!
alexanda2000
2005-11-30
打赏
举报
回复
这些结果类的内置对话框好像总要执行一下,否则它的数值就不能保证。
在WordDialog:=WordApp.Dialogs.Item(wdDialogToolsWordCount);的后面加上一句:
WordDialog.Execute;
就可以了。
hellolongbin
2005-11-30
打赏
举报
回复
已经发了
我在word里看的是11396和14994,用程序跑出来是
字符数(不计空格)14202
字符数(计空格)16660
alexanda2000
2005-11-30
打赏
举报
回复
alexanda@126.com,你把文件发过来我试一下
hellolongbin
2005-11-30
打赏
举报
回复
我的是XP+officeXP
我在另一台2000+office2000的机器上试也是一样不行,它好像把回车也算进去了
你有没有邮箱,我发一个我要跑的正式文件给你
alexanda2000
2005-11-29
打赏
举报
回复
试了很久终于搞定了,呵呵。微软的帮助看来还是有些讲得不清楚。下面是完整的代码。
uses ComObj;
const
wdDialogToolsWordCount = $000000E4;
var
WordApp,WordDoc,WordDialog:OleVariant;
begin
WordApp:=CreateOleObject('Word.Application');
WordDoc:=WordApp.Documents.Open('E:\Test.Doc');
// WordApp.Visible:=True;
WordDialog:=WordApp.Dialogs.Item(wdDialogToolsWordCount);
Memo1.Lines.Add('字数:'+InttoStr(WordDialog.Words));
Memo1.Lines.Add('字符数(不计空格)'+InttoStr(WordDialog.Characters));
Memo1.Lines.Add('字符数(计空格)'+InttoStr(WordDialog.CharactersIncludingSpaces));
WordDoc.Saved:=True;
WordDoc.Close;
WordApp.Quit;
WordDialog:=Unassigned;
WordDoc:=Unassigned;
WordApp:=Unassigned;
end;
alexanda2000
2005-11-29
打赏
举报
回复
回头试了一下字数那里是有问题
alexanda2000
2005-11-29
打赏
举报
回复
字数统计里关于字数的有三项,一是字数,二是字符数(不计空格),三是字符数(计空格)
Memo1.Lines.Add('字数'+InttoStr(WordDoc.Words.Count));
是对应"字数统计"对话框中"字数"那一项,即第一项,意思是"包括空格的字数",不是不包括空格.在我机上测试的时候没有问题啊,回头我再试一试.
Memo1.Lines.Add('字符数(包括空格)'+InttoStr(WordDoc.Characters.Count-WordDoc.Paragraphs.Count));对应的是第三项,即"包括空格的字符数"
至于第二项我也不知道怎么求.如果一定要弄的话,我只有一个笨办法就是每个字符判断是不是空格,计出空格数后再从字符总数中扣了.
退出代码:
WordDoc.Saved:=True; //不保存文件.如果不保存设Saved为真,否则为假.
WordDoc.Close;
WordApp.Quit;
WordDoc:=Unassigned;
WordApp:=Unassigned;
alexanda2000
2005-11-29
打赏
举报
回复
我在两台机上试了都没有问题。另一台是winxp+D2005+office2003
搞不懂为什么在你机上的结果会不同,不知是不是office版本不同的原因。
hellolongbin
2005-11-29
打赏
举报
回复
另外如何退出上面的代码也没提供
hellolongbin
2005-11-29
打赏
举报
回复
多谢楼上
上面的程序包括空格的统计结果是正确的,但不包含空格的WordDoc.Words.Count跟word里面的结果还是不一样,而且差的很多,能不能再帮忙看看,谢谢
alexanda2000
2005-11-29
打赏
举报
回复
我试了,报的也是19和20啊,没问题。
winxp + D7 + office2003
hellolongbin
2005-11-29
打赏
举报
回复
多谢,我试过了,小文件可以,但是如果文章里面包含过多回车或段落还是会有错误,你可以拷下面的内容到word里试一试:
1
11111111
3333333333
我在3的后面加了个空格,正常应该报19和20(包含空格),但上面的方法就多报了许多
我也是在试过我要跑的文件后不行才一步步找出来的,小的文件都可以
alexanda2000
2005-11-28
打赏
举报
回复
用OLE的方法控制Word几乎和VBA一样,可以控制Word的所有功能,缺点是没有代码提示,要参照Word的帮助和VBA。
用TWordApplication组件的方式有代码提示,但有很多功能用不了,而且在调用Word的一些方法时,不能省略默认的参数,写参数写到手软。
Word里面的字数统计是特殊的内置对话框,用宏是录制不下来的。
var
WordApp,WordDoc:OleVariant;
begin
WordApp:=CreateOleObject('Word.Application');
WordDoc:=WordApp.Documents.Open('f:\Test.Doc');
WordApp.Visible:=True;
Memo1.Lines.Add('字数'+InttoStr(WordDoc.Words.Count));
Memo1.Lines.Add('字符数(包括空格)'+InttoStr(WordDoc.Characters.Count-WordDoc.Paragraphs.Count));
//
// 退出Word
//
end;
hellolongbin
2005-11-28
打赏
举报
回复
多谢楼上,我试过了,有的文件可以,有的不可以,而且可以的统计出来的数据也跟用word-工具-字数统计的结果对不起来
我试过录制宏,可是什么都没录下来
有谁知道如何直接调用“字数统计”功能么?
leonkim
2005-11-28
打赏
举报
回复
procedure TForm2.Button3Click(Sender: TObject);
var
ItemIndex :OleVariant;
FileName, ConfirmConversions, ReadOnly, AddToRecentFiles,
PasswordDocument, PasswordTemplate, Revert,
WritePasswordDocument, WritePasswordTemplate, Format: OleVariant;
begin
WordApplication1.Connect;
try
ItemIndex := 1;
FileName := 'H:\工作报告\下阶段计划.doc';
//参数赋值
ConfirmConversions := False;
ReadOnly := False;
AddToRecentFiles := False;
PasswordDocument := '';
PasswordTemplate := '';
Revert := True;
WritePasswordDocument := '';
WritePasswordTemplate := '';
Format := wdOpenFormatDocument;
WordApplication1.Documents.Openold( FileName, ConfirmConversions,
ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate,
Revert, WritePasswordDocument, WritePasswordTemplate, Format );
WordDocument1.ConnectTo(WordApplication1.Documents.Item(ItemIndex));
ShowMessage(INttostr(WordDocument1.Characters.Count));
ShowMessage(INttostr(WordDocument1.Words.Count));
finally
WordApplication1.Disconnect;
end;
end;
z_
2005-11-28
打赏
举报
回复
up1
z_
2005-11-28
打赏
举报
回复
那么如何用程序实现统计字数的功能呢?这个要求比较急的说
leonkim
2005-11-28
打赏
举报
回复
http://www.caiblog.com/245/tiger12/56245.shtml
leonkim
2005-11-28
打赏
举报
回复
http://www.yesky.com/401/1700901.shtml
Delphi
操作
Word
演示
Delphi
操作
Word
的演示. 编译脚本的命令用brcc32命令
delphi
操作
word
基类
用
delphi
编程
操作
WORD
的一个基类,实现了插入表格,图片,文字等常用
操作
,功能很全面,是学习
DELPHI
操作
WORD
很好的例子
delphi
操作
word
excel
delphi
操作
word
excel
delphi
_
word
打印
Delphi
中使用Olecontainer打开
Word
文档后,并实现打印功能
delphi
7
操作
word
delphi
7
操作
word
,插入文字,表格
网络通信/分布式开发
1,593
社区成员
32,963
社区内容
发帖
与我相关
我的任务
网络通信/分布式开发
Delphi 网络通信/分布式开发
复制链接
扫一扫
分享
社区描述
Delphi 网络通信/分布式开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章