Office文档控制问题(50分)

  • 主题发起人 主题发起人 MichaelZhu
  • 开始时间 开始时间
M

MichaelZhu

Unregistered / Unconfirmed
GUEST, unregistred user!
如何能在delphi中控制MSOffice文档,使得该文档即使是在资源管理器中找到并打开,如
WORD打开后,不能作任何修改,也不能另存。只能在资源管理器中将整个文档复制,粘贴。
比如打开一份WORD文档,由于在DELPHI中事先对此文档写了一些代码,于是此文档只读,
不能另存,不能打印,不能选取其中的任何内容。。。。。。
 
没其他意思,只想听一听。
 
要是真实现了,那很有用处,学习学习
 
哪位高手指点一下? 应该可以实现的吧!
 
查看VBA帮助:
ActiveDocument.Protect Type:=wdAllowOnlyComments 'wdAllowOnlyFormFields
Protect 属性

返回或设置指定传送名单的相关文档的保护类型。WdProtectionType,可读写。

WdProtectionType 可以是下列 WdProtectionType 常量之一:
wdAllowOnlyComments
wdAllowOnlyFormFields
wdAllowOnlyRevisions
wdNoProtection

expression.Protect

expression 必需。该表达式返回一个 RoutingSlip 对象。

示例
本示例先保护活动文档(只允许备注),然后传送该文档。

ActiveDocument.HasRoutingSlip = True
With ActiveDocument.RoutingSlip
.Subject = "Status Doc"
.Protect = wdAllowOnlyComments
.AddRecipient Recipient:="Kim Johnson"
End With
ActiveDocument.Route
 
能写一段示例代码吗?
 
uses comobj, Word2000;
var
Word_Handle, Doc_Handle: OleVariant;
procedure TForm1.Button1Click(Sender: TObject);
begin
try
Word_Handle := GetActiveOleObject('Word.Application');
except
try
Word_Handle := CreateOleObject('Word.Application');
except
Exit;
end;
end;
Word_Handle.Visible := True;
Doc_Handle := Word_Handle.Documents.Open(FileName := 'D:/1.doc');
Doc_Handle.Protect(wdAllowOnlyComments);
Doc_Handle.Save;
end;
 
那么如何将SAVE,SAVE AS等功能全部禁止呢?
如何在程序中再次取消这些限制呢?
 
要是你用Delphi写一个COM调用Word文档,实现那个功能,我可以帮你;要是说在资源管理器
里双击打开一个Doc文档,实现那个功能我实在帮不了你。
 
哪位高人,能指点指点?
 
据说中软公司在用VB调用WORD的公文处理系统软件中也没有办法禁止SAVE,SAVE AS的功能的使用
 
>>据说中软公司在用VB调用WORD的公文处理系统软件中也没有办法禁止SAVE,SAVE AS的功能的使用
那要看中软的哪一个系统了。
其实禁止Word的Save和SaveAs功能的方法是有的,只是不知道是否和心意而已。
可以使用VBA代码。
在VBA中建立一个函数Sub FileSaveAs和Sub FileSave,然后什么都不写,你在试验一下就可以了。
呵呵,保管你什么都保存不成。[:D]
 
To yzhshi:
我试了一下,您的方法确实可以禁止SAVE,SAVEAS功能.那么如何在Delphi中将这些代码
写入Word文档呢?
 
那是WORD的事情,看最近的微软OFFICE大赛的答案了吗?
那里可以找到你的答案。(程序员第八期就有)
Haoran@ssreader.com
 
To rainsea,
我没有买程序员杂志,在网上可以看到吗?
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=965686

在Delphi下利用DDE实现同Microsoft Word的交互
信息产业部电子第二十二研究所第二研究室 郎锐
--------------------------------------------------------------------------------
一、 引言
Windows支持三种基本的IPC(进程间通信)机制:动态链接库(DLL)中的共享数据段、Windows剪贴版(Clipboard)和动态数据交换DDE(Dynamic Data Exchange)。许多著名的Windows应用程序如Microsoft Word等都宣布支持DDE技术,并在程序中嵌入了DDE消息处理函数。而此类应用程序单在DDE技术上讲大多是作为一个DDE服务器形式存在的,这就允许用户通过自行编制的一些外围软件以DDE客户的身份对其进行连接,并通过向DDE服务器程序发送一些特定的宏命令来完成对服务器程序的动态控制,本文就以常用的Microsoft Word为例,讲述了在Delphi 5.0编程环境下如何编制DDE客户程序,使其动态控制Microsoft Word的一般方法。
二、 DDE的工作原理
DDE顾名思义,是提供对不同程序在运行期间实现对数据的动态交换的一种通用技术。Windows消息虽然是在不同程序窗口间传送信息的最佳手段,但一条消息只能包含两个参数(wParam和lParam),不能传送较多的信息。内存块是存放较多信息的重要手段,但不支持全局内存句柄的共享。DDE正是建立在Windows内部消息系统、全局原子和共享全局内存基础上的一种协议,用来协调Windows应用程序之间的数据交换和命令调用。
DDE协议使用三级命名:服务(service)、主题(topic)和数据项(item)来标识DDE所传递的数据单元。服务使应用程序具有了提供给其他程序的数据交换能力,一般服务就是应用程序的文件名,如Word的服务就是是Winword(可执行文件是Winword.exe);主题是对服务器有意义的信息单元,对于Word文档就是很好的主题,许多服务器都有默认的主题System,但无法知道服务器确切有那些主题,除非查阅应用程序的相关技术文档。每次DDE客户与服务程序之间的对话都是先由客户启动的,所以在每次客户启动之前,DDE服务器必须先投入运行,下面是一个典型的DDE会话流程的事务组成:
。客户程序自动会话,服务器程序响应。
。客户和服务器用下述方法交换数据:
。服务器应客户的请求向客户发送数据;
。客户主动想服务器发送数据;
。客户要求服务器在数据修改时发送数据(热数据连接);
。客户要求服务器在数据修改后发送通知(温数据连接);
。在客户的要求下,服务器执行一个命令。
。由客户或服务器中止会话。
三、 设计思路
首先,在开发工具的选择上,选择了提供有现成的DDE 系列组件的 Borland Delphi 5.0。既然以Microsoft Word作为要连接的服务器,在与其建立连接之前要先设定好连接的服务与主题,由于本例只要求通过本程序控制Word的一些操作动作,如打开新文件、关闭文件、插入表格等等,所以可以分别设定这两项为:"Winword"和"System",当设置好连接后就可以通过Delphi提供的DDEClientConv组件的OpenLink函数打开与这个服务的连接,剩下的工作就是向Word服务器发送宏命令,并通过组件向其发送执行宏的命令即可,用该组件的函数ExecuteMacro来实现之。
四、程序的实现
(一) 加入DDE客户端组件
新建一App工程WordDDE,然后在Component Palette组件条的System属性页里选择DdeClientConv组件,并把它拖放到窗体上。修改其Name 属性为DDEClient。
(二) 添加同DDE服务进行交互的代码
在工程上添加一个过程RunMacro,用于打开同Word服务器的链接,并通知服务器执行由Macro标识的宏命令,让Word按用户的意图完成响应的动作。完成之后由客户方断开这次连接,完成一次会话。下面是上述过程的实现代码:
procedure TForm1.RunMacro(Macro:pChar);
var pMacro:array[0..80] of Char;
begin
DDEClient.SetLink('Winword','System');{设置连接}
DDEClient.OpenLink;{按设置打开连接}
StrPCopy(pMacro,Macro);
if Not DDEClient.ExecuteMacro(pMacro,false) then{执行宏命令}
ShowMessage('Unable to Execute Macro');
DDEClient.CloseLink;{断开连接}
end;
(三) 宏命令的执行
宏(Macro)是客户程序要服务器完成的一些操作指令,对与特定的Microsoft Word 而言无非是些打开文件、插入分割符、复制粘贴字符等一些字处理方面的宏命令,这些宏命令完成的功能大多在Word的菜单下都能找到与之相匹配的菜单。如"关闭文件"菜单完成的功能就可以通过宏[FileClose]来完成。可以向窗口添加一个按钮或是菜单然后在其处理函数中添加执行宏的代码如下:
procedure TForm1.N2Click(Sender: TObject);
begin
RunMacro('[FileNew]');{让Word创建一个新文件,宏[FileNew]由函数RunMacro通知Word}
end;
Word下有许多可供传送执行的宏命令,现将一些常用的宏罗列如下,以备实际编程时选用:
[FileNew] …… 创建新文件
[FileClose] …… 关闭文件
[FileSave] …… 保存文件
[FilePrint] …… 打印文件
[FileExit] …… 退出Word
[File1] …… 打开最近打开的文件,相应还有[File2]、[File3]等等
[EditCut] …… 剪切操作
[EditCopy] …… 复制操作
[EditPaste] …… 粘贴操作
[EditUndo] …… 恢复上一步
[EditRedo] …… 重做上一步
[EditClear] …… 清除操作
[EditSelectAll] …… 全选操作
[ViewNormal] …… 正常视图
[ViewPage] …… 页面视图
[ViewOutLine] …… 大纲视图
[InsertBreak] …… 插入分割符
[InsertIndex] …… 插入索引
[FormatNumber] …… 格式化项目符号和编号
[ToolsOptions] …… 工具的选项
[TableInsertTable] …… 插入表格
[TableInsertRow] …… 插入行
[TableDeleteRow] …… 删除行
[TableSplit] …… 拆分表格
[TableSelectRow] …… 选择行
[TableSelectColumn] …… 选择列
[TableSelectTable] …… 选择表格
[TableSort] …… 排序
[WindowNewWindow] …… 新建窗口
[Window1] …… 最近打开的窗口,响应还有[Window2]、[Window3]等等
[HelpIndex] …… 帮助的索引
[HelpAbout] …… 帮助的关于
小结:DDE技术向用户提供了一种更加集成的工作环境,最适合于不需要用户参与的动态数据交换。
通过上述这个例子,对DDE 的工作原理和编程思想有了一定的认识之后,可以用类似的方法实现同其他程序如Microsoft Execl的DDE动态交互。该程序在Windows 98下,由Borland Delphi 5.0编译通过。
只能帮你这些,希望能帮到你。。。
 
这个你可以用CommandBar对象和那些功能全部关调,这样用户就看不见了,我以前做过,
不过这个糊弄老百姓还行,懂点编程的就可以控制Word对象,调用不受限制。
 
To lofa,
能不能贴点代码出来?
 
多人接受答案了。
 
后退
顶部