沈阳微网站,三好街 网站建设,广州公认的第一富人区,网站备案查询工具目录
制作一个保护性模板文件
给文件设置保护密码
设计模板内容
限制编辑
进一步的需求
范例运行环境
Office DCOM 配置
设计实现
进一步修改模板文件
设置和取消保护
遍历WORD内容控件
总结 制作一个保护性模板文件
在类似一些OA的自动化处理或审批类系统里经常会用到模板类文件比如WORD保护性模板。设置保护性比如文档打开密码、保护性密码是为了防止标准化文字内容、敏感信息内容不被修改对于可修改内容则由程序进行控制。
给文件设置保护密码
创建或打开一个WORD文件选择左侧菜单栏信息选项右侧选择保护文档按钮并选择用密码进行加密菜单项。 设计模板内容
比如设计一个审批表我们可能应用到WORD里的内容控件使用内容控件需要设置如下图 选择左侧菜单栏信息选项选择自定义功能区并选择右侧列表里的开发工具菜单项。
这样在编辑WORD文档中会看到设计开发工具选项如下图 如图我们首先绘制一个审批表格然后在需要将来用户输入文字的地方插入格式文本内容控件如项目名称、审批事项、经办人、年月日内容等。
限制编辑
设计完成模板内容后我们最后要设置限制编辑的设置即仅允许用户输入文本框中的内容设置如下图所示: 选择开发工具选项、限制编辑按钮在限制编辑功能里我们选择
1、限制对选定的样式设置格式
2、仅允许在文档中进行此类型的编辑填写窗体
3、是、启动强制保护 输入强制保护密码即可若想停止保护此文档重新进行编辑则可以选择停止保护并输入密码如下图 当修改完成后可以继续进行限制保护。至此一个保护性WORD模板文件已经制作完成。 进一步的需求
这种模板文件满足了基本的设计要求但在层级审批实际业务中不能满足需要还需要进一步的改进包括如下功能
1、以保护性模板文件为起始流程仅允许申请者填写项目名称、审批事项和提请理由
2、经办人和处理时间由系统自动填写。
3、备注由审批人填写。
因此实际操作中需要用后台程序对文件进行多次处理
范例运行环境
操作系统 Windows Server 2019 DataCenter
操作系统上安装 Office Word 2016 客户端使用的 Office Word 2019
.net版本 .netFramework4.7.1 或以上
开发工具VS2019 C#
Office DCOM 配置
请参考我的文章《C# 读取Word表格到DataSet》有对Office DCOM详细配置介绍这里不再赘述。 设计实现
进一步修改模板文件
通过设置内容控件的一些属性用程序进行状态和内容的控制首先修改如下图 选中内容控件点击开发工具选项卡中的属性自定义标记值并选中无法编辑内容属性。
设置和取消保护
这是自动化处理的两个关键方法Protect 和 Unprotect 方法示例代码如下
string ProtectPassword111;
int ProtectLevel3; //3只填写窗体可参照列表对应理论是1-4/取得Word文件保存路径
string _lastfile; //模板文件的路径object filename _lastfile;//创建一个名为WordApp的组件对象Word.Application WordApp new Word.Application();//创建一个名为WordDoc的文档对象WordApp.DisplayAlerts Word.WdAlertLevel.wdAlertsNone;Word.Document WordDoc WordApp.Documents.Open(ref filename, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing);//启动强制保护
WordDoc.Protect((Word.WdProtectionType)ProtectLevel, Type.Missing, ProtectPassword);//停止保护WordDoc.Unprotect(ProtectPassword);通过保护机制的撤销与设置实现由系统对关键内容的修改。
遍历WORD内容控件
ArrayList ranges new ArrayList(); //备份Range对象
ArrayList rangetexts new ArrayList(); //备份Range对象的文本内容
//遍历内容控件
foreach (Word.ContentControl cc in WordDoc.ContentControls)
{
//判断格式文本内容控件并判断自定义属性if (cc.Type Word.WdContentControlType.wdContentControlText (cc.Tagtag1)){cc.MultiLine true; //允许多行内容cc.LockContentControl false; //解除锁定内容cc.LockContents false; //解除锁定控件cc.Type Word.WdContentControlType.wdContentControlRichText; //设置富文本控件ranges.Add(cc.Range); //添加range对象rangetexts.Add(cc.Range.Text); //添加range对象的TEXT,在这里可以传递需要的值cc.LockContentControl false;cc.Delete(true); // 删除控件}
}int r 0;
foreach(Word.Range ran in ranges)
{ran.Text rangetexts[r].ToString(); //在控件的删除点替换成需要的文本r;
}
总结
以上是实现的一些关键方法和属性总体的设计思路即遵循以下流程
1、自定义控件的TAG属性以标识程序控制识别如TAG1为申请人标识TAG2为审批人标识
2、在流程节点读取对应的标识备份内容然后删除控件以防止再次修改填写的内容
3、在删除控件的光标位置恢复原录入内容以保持文件内容的完整性以备下一节点审批
另外我们还可以操作WORD的一些变量来满足应用的扩展示例代码如下
string DocVar_Value 123;
//遍历WORD变量foreach (Word.Variable ov in WordDoc.Variables){if (ov.Name Sys_Custom_DocVar) //判断变量名称假设为 Sys_Custom_DocVar{// ov.Value 可访问的值ov.Delete(); //找到要设置的变量删除}}
//添加WORD变量WordDoc.Variables.Add(Sys_Custom_DocVar, DocVar_Value);这些选项都可以根据实际的业务进行扩展我们可以充分发挥自己的想像来进行设计这里仅作参考欢迎大家评论指教