C#实现基于Word保护性模板文件的修改

这篇具有很好参考价值的文章主要介绍了C#实现基于Word保护性模板文件的修改。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 

目录

制作一个保护性模板文件

给文件设置保护密码 

设计模板内容

限制编辑

进一步的需求

范例运行环境

Office DCOM 配置

设计实现

进一步修改模板文件 

设置和取消保护

遍历WORD内容控件

总结 


制作一个保护性模板文件

在类似一些OA的自动化处理或审批类系统里,经常会用到模板类文件,比如WORD保护性模板。设置保护性,比如文档打开密码、保护性密码,是为了防止标准化文字内容、敏感信息内容不被修改,对于可修改内容则由程序进行控制。

给文件设置保护密码 

创建或打开一个WORD文件,选择左侧菜单栏,信息选项,右侧选择保护文档按钮,并选择用密码进行加密菜单项。

C#实现基于Word保护性模板文件的修改,微软Office计算中心,c#,word,开发语言,asp.net,visual studio,microsoft,.net

设计模板内容

比如设计一个审批表,我们可能应用到WORD里的内容控件,使用内容控件,需要设置如下图:

C#实现基于Word保护性模板文件的修改,微软Office计算中心,c#,word,开发语言,asp.net,visual studio,microsoft,.net

选择左侧菜单栏,信息选项,选择自定义功能区,并选择右侧列表里的开发工具菜单项。

这样在编辑WORD文档中,会看到设计开发工具选项,如下图:

C#实现基于Word保护性模板文件的修改,微软Office计算中心,c#,word,开发语言,asp.net,visual studio,microsoft,.net

如图,我们首先绘制一个审批表格,然后在需要将来用户输入文字的地方插入格式文本内容控件,如项目名称、审批事项、经办人、年月日内容等。

限制编辑

设计完成模板内容后,我们最后要设置限制编辑的设置,即仅允许用户输入文本框中的内容,设置如下图所示:

C#实现基于Word保护性模板文件的修改,微软Office计算中心,c#,word,开发语言,asp.net,visual studio,microsoft,.net

选择开发工具选项、限制编辑按钮,在限制编辑功能里,我们选择:

1、限制对选定的样式设置格式

2、仅允许在文档中进行此类型的编辑(填写窗体)

3、是、启动强制保护

C#实现基于Word保护性模板文件的修改,微软Office计算中心,c#,word,开发语言,asp.net,visual studio,microsoft,.net

输入强制保护密码即可,若想停止保护此文档,重新进行编辑,则可以选择停止保护,并输入密码,如下图:

C#实现基于Word保护性模板文件的修改,微软Office计算中心,c#,word,开发语言,asp.net,visual studio,microsoft,.net

当修改完成后,可以继续进行限制保护。至此一个保护性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详细配置介绍,这里不再赘述。 

设计实现

进一步修改模板文件 

通过设置内容控件的一些属性,用程序进行状态和内容的控制,首先修改如下图: 

C#实现基于Word保护性模板文件的修改,微软Office计算中心,c#,word,开发语言,asp.net,visual studio,microsoft,.net

选中内容控件,点击开发工具选项卡中的属性,自定义标记值,并选中无法编辑内容属性。 

设置和取消保护

这是自动化处理的两个关键方法,Protect 和 Unprotect 方法,示例代码如下:

string ProtectPassword="111";
int ProtectLevel=3;  //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.Tag=="tag1"))
   {
       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);

这些选项都可以根据实际的业务进行扩展,我们可以充分发挥自己的想像来进行设计,这里仅作参考,欢迎大家评论指教!文章来源地址https://www.toymoban.com/news/detail-817365.html

到了这里,关于C#实现基于Word保护性模板文件的修改的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C# HSLCommunication 实现设备状态监测与故障诊断,提高设备可靠性和可维护性

    简介: 在工业领域,设备状态的监测和故障诊断对于提高设备可靠性和可维护性至关重要。本文将介绍如何使用C# HSLCommunication库来实现设备状态的监测和故障诊断,并探讨其对设备可靠性和可维护性的具体贡献。我们将详细讨论HSLCommunication库的功能和特点,并提供一个示例

    2024年01月24日
    浏览(35)
  • java 根据word模板生成word文件

    Java可以使用Apache POI库来生成Word文件,并且也可以使用freemarker等模板引擎来实现根据Word模板生成Word文件的功能。 下面是一个简单的示例代码,可以帮助您快速入门。 模板制作:offer,wps都行,我使用wps进行操作  第一步制作模板 CTRL+f9生成域------》鼠标右键编辑域------》选

    2024年02月14日
    浏览(41)
  • 读word模板批量生成制式文件

    创建.docx文件,编写内容 添加编辑域 按Ctrl+F9,创建编辑域 右击,选择编辑域 选择邮件合并,修改 域代码 要注意域代码的格式为: MERGEFIELD ${name} name为需要填充的内容。         依次类推,填上所有的编辑域,调整文档格式等,就完成了word文档准备。         之后

    2024年02月10日
    浏览(34)
  • 【导出Word】如何使用Java+Freemarker模板引擎,根据XML模板文件生成Word文档(只含文本内容的模板)

    这篇文章,主要介绍如何使用Java+Freemarker模板引擎,根据XML模板文件生成Word文档。 目录 一、导出Word文档 1.1、基础知识 1.2、制作模板文件 1.3、代码实现 (1)引入依赖 (2)创建Freemarker工具类 (3)测试案例代码 (4)运行效果 Word文件有两种后缀格式,分别是:doc和docx,

    2024年02月13日
    浏览(51)
  • WORD模板替换,将文件给前端下载

    1.word模板设计填充字段加{{填充字段名}} 2.后端依赖 3.后端代码 3.1工具类 3.2接口类 4.前端事件方法 handleDownload(row) {       this.queryParams = row       console.log(row)       this.download(\\\'system/selection/wordTemplate\\\', {         ...this.queryParams       }, `selection_${new Date().getTime()}.docx`)    

    2024年02月13日
    浏览(36)
  • Java根据word模板生成word文档并转成PDF文件

    定义完我们的模板之后,我们要将文档保存为xml的格式 生成的xml格式看起来比较乱,没有层次感, 所以需要格式化一下 格式化 基础信息的定义 基础信息的定义只要保证我们转化成的xml文件中的${name}等格式没错误即可 表格的定义 遍历实现,表格的数据填充 在xml文件中我们的

    2024年02月09日
    浏览(49)
  • 【C#】当重复使用一段代码倒计时时,使用普通类和静态方法,实现简单的封装性、可扩展性、可维护性

    欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。 温馨提示:博主能力有限,理解水平有限

    2024年02月01日
    浏览(47)
  • word转化为ftl格式文件模板,导出后office提示文件错误

    使用模板,导出word文件,最近在做这个需求,本地环境用的是wps,结合本地的环境快速完成了开发需求之后,有一天客户发现office打开报错,本人深感不接,wps都能打开,各个在线文档也都支持,为何office就不支持,环境不同。 wps是按照office版本迭代开发,照理说office是w

    2024年02月12日
    浏览(41)
  • Java使用ftl模板文件生成Word,以及Word转换图片或Pdf工具类

    一、写在前面 最近在项目中使用打印功能,发现这个功能我已经写过多次了,下面这个文章的发步日期在2020年,不得不感慨时间之快啊。 https://blog.csdn.net/weixin_43238452/article/details/109636200?spm=1001.2014.3001.5501 下面介绍一下应用场景:这次项目依旧是springboot项目,使用ftl模版生

    2024年02月15日
    浏览(48)
  • Android 基于POI库,根据模板导出word文档

    由于项目需求,需要根据用户提供的word模板,填充动态内容生成新的word,为了记录自己的踩坑日记,记录一下。 Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对文档读和写的功能。 这里给出官网链接-POI官网,同时下载版本也在官网链接中,可

    2024年01月18日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包