最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#實現(xiàn)一個Word保護性模板文件

 更新時間:2024年01月22日 16:45:37   作者:初九之潛龍勿用  
這篇文章主要為大家詳細介紹了C#如何實現(xiàn)一個Word保護性模板文件,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的小伙伴可以參考一下

制作一個保護性模板文件

在類似一些OA的自動化處理或?qū)徟愊到y(tǒng)里,經(jīng)常會用到模板類文件,比如WORD保護性模板。設(shè)置保護性,比如文檔打開密碼、保護性密碼,是為了防止標(biāo)準(zhǔn)化文字內(nèi)容、敏感信息內(nèi)容不被修改,對于可修改內(nèi)容則由程序進行控制。

給文件設(shè)置保護密碼 

創(chuàng)建或打開一個WORD文件,選擇左側(cè)菜單欄,信息選項,右側(cè)選擇保護文檔按鈕,并選擇用密碼進行加密菜單項。

設(shè)計模板內(nèi)容

比如設(shè)計一個審批表,我們可能應(yīng)用到WORD里的內(nèi)容控件,使用內(nèi)容控件,需要設(shè)置如下圖:

選擇左側(cè)菜單欄,信息選項,選擇自定義功能區(qū),并選擇右側(cè)列表里的開發(fā)工具菜單項。

這樣在編輯WORD文檔中,會看到設(shè)計開發(fā)工具選項,如下圖:

如圖,我們首先繪制一個審批表格,然后在需要將來用戶輸入文字的地方插入格式文本內(nèi)容控件,如項目名稱、審批事項、經(jīng)辦人、年月日內(nèi)容等。

限制編輯

設(shè)計完成模板內(nèi)容后,我們最后要設(shè)置限制編輯的設(shè)置,即僅允許用戶輸入文本框中的內(nèi)容,設(shè)置如下圖所示:

選擇開發(fā)工具選項、限制編輯按鈕,在限制編輯功能里,我們選擇:

1、限制對選定的樣式設(shè)置格式

2、僅允許在文檔中進行此類型的編輯(填寫窗體)

3、是、啟動強制保護

輸入強制保護密碼即可,若想停止保護此文檔,重新進行編輯,則可以選擇停止保護,并輸入密碼,如下圖:

當(dāng)修改完成后,可以繼續(xù)進行限制保護。至此一個保護性WORD模板文件已經(jīng)制作完成。 

進一步的需求

這種模板文件滿足了基本的設(shè)計要求,但在層級審批實際業(yè)務(wù)中,不能滿足需要,還需要進一步的改進,包括如下功能:

1、以保護性模板文件為起始流程,僅允許申請者填寫項目名稱、審批事項和提請理由

2、經(jīng)辦人和處理時間由系統(tǒng)自動填寫。

3、備注由審批人填寫。

因此實際操作中,需要用后臺程序?qū)ξ募M行多次處理

范例運行環(huán)境

操作系統(tǒng): Windows Server 2019 DataCenter

操作系統(tǒng)上安裝 Office Word 2016 ,客戶端使用的 Office Word 2019

.net版本: .netFramework4.7.1 或以上

開發(fā)工具:VS2019  C#

Office DCOM 配置

請參考我的文章《C# 讀取Word表格到DataSet》有對Office DCOM詳細配置介紹,這里不再贅述。 

設(shè)計實現(xiàn)

進一步修改模板文件

通過設(shè)置內(nèi)容控件的一些屬性,用程序進行狀態(tài)和內(nèi)容的控制,首先修改如下圖: 

選中內(nèi)容控件,點擊開發(fā)工具選項卡中的屬性,自定義標(biāo)記值,并選中無法編輯內(nèi)容屬性。 

設(shè)置和取消保護

這是自動化處理的兩個關(guān)鍵方法,Protect 和 Unprotect 方法,示例代碼如下:

string ProtectPassword="111";
int ProtectLevel=3;  //3只填寫窗體,可參照列表對應(yīng),理論是1-4
 
/取得Word文件保存路徑
string _lastfile="";  //模板文件的路徑
            object filename = _lastfile;
            //創(chuàng)建一個名為WordApp的組件對象
            Word.Application WordApp = new Word.Application();
 
            //創(chuàng)建一個名為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);

通過保護機制的撤銷與設(shè)置,實現(xiàn)由系統(tǒng)對關(guān)鍵內(nèi)容的修改。

遍歷WORD內(nèi)容控件

ArrayList ranges = new ArrayList();  //備份Range對象
ArrayList rangetexts = new ArrayList(); //備份Range對象的文本內(nèi)容
//遍歷內(nèi)容控件
foreach (Word.ContentControl cc in WordDoc.ContentControls)
{
//判斷格式文本內(nèi)容控件,并判斷自定義屬性
   if (cc.Type == Word.WdContentControlType.wdContentControlText && (cc.Tag=="tag1"))
   {
       cc.MultiLine = true;             //允許多行內(nèi)容
       cc.LockContentControl = false;   //解除鎖定內(nèi)容
       cc.LockContents = false;         //解除鎖定控件
                       
       cc.Type = Word.WdContentControlType.wdContentControlRichText;  //設(shè)置富文本控件
       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++;
}

總結(jié)

以上是實現(xiàn)的一些關(guān)鍵方法和屬性,總體的設(shè)計思路即遵循以下流程:

1、自定義控件的TAG屬性,以標(biāo)識程序控制識別,如TAG1為申請人標(biāo)識,TAG2為審批人標(biāo)識

2、在流程節(jié)點讀取對應(yīng)的標(biāo)識,備份內(nèi)容,然后刪除控件,以防止再次修改填寫的內(nèi)容

3、在刪除控件的光標(biāo)位置,恢復(fù)原錄入內(nèi)容,以保持文件內(nèi)容的完整性,以備下一節(jié)點審批

另外,我們還可以操作WORD的一些變量來滿足應(yīng)用的擴展,示例代碼如下:

string DocVar_Value = "123";
//遍歷WORD變量
 foreach (Word.Variable ov in WordDoc.Variables)
 {
      if (ov.Name == "Sys_Custom_DocVar")  //判斷變量名稱,假設(shè)為 Sys_Custom_DocVar
      {
          // ov.Value  可訪問的值
          ov.Delete();   //找到要設(shè)置的變量,刪除
      }
 }
//添加WORD變量
 WordDoc.Variables.Add("Sys_Custom_DocVar", DocVar_Value);

這些選項都可以根據(jù)實際的業(yè)務(wù)進行擴展,我們可以充分發(fā)揮自己的想像來進行設(shè)計!

以上就是C#實現(xiàn)一個Word保護性模板文件的詳細內(nèi)容,更多關(guān)于C# Word保護性模板文件的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#中 const 和 readonly 的不同

    C#中 const 和 readonly 的不同

    const 和 readonly 的區(qū)別,總是不太清楚,于是查了查資料。
    2013-04-04
  • C#使用DropDownList綁定添加新數(shù)據(jù)的方法匯總

    C#使用DropDownList綁定添加新數(shù)據(jù)的方法匯總

    這篇文章主要介紹了C#使用DropDownList綁定添加新數(shù)據(jù)的方法匯總的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • C#使用XmlDocument或XDocument創(chuàng)建xml文件

    C#使用XmlDocument或XDocument創(chuàng)建xml文件

    這篇文章主要為大家詳細介紹了C#使用XmlDocument或XDocument創(chuàng)建xml文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • C#從畫刷創(chuàng)建畫筆的方法

    C#從畫刷創(chuàng)建畫筆的方法

    這篇文章主要介紹了C#從畫刷創(chuàng)建畫筆的方法,涉及C#圖形繪制的基本技巧,需要的朋友可以參考下
    2015-06-06
  • C# 中類型轉(zhuǎn)換方式之顯式轉(zhuǎn)換和 as 運算符

    C# 中類型轉(zhuǎn)換方式之顯式轉(zhuǎn)換和 as 運算符

    在 C# 中,有兩種常見的類型轉(zhuǎn)換方式:顯式轉(zhuǎn)換和as 運算符,它們用于在不同類型之間進行轉(zhuǎn)換,以下是對這兩種轉(zhuǎn)換方式的詳細解釋和示例說明,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • C#實現(xiàn)設(shè)置電腦顯示器參數(shù)

    C#實現(xiàn)設(shè)置電腦顯示器參數(shù)

    這篇文章主要為大家詳細介紹了如何利用C#實現(xiàn)設(shè)置電腦顯示器參數(shù),文中的示例代碼講解詳細,對我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12
  • Winform項目中TextBox控件DataBindings屬性

    Winform項目中TextBox控件DataBindings屬性

    這篇文章介紹了Winform項目中TextBox控件DataBindings屬性的用法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • 詳解c# AutoMapper 使用方式

    詳解c# AutoMapper 使用方式

    本篇文章主要介紹了詳解c# AutoMapper 使用方式 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • C#使用隨機樞軸實現(xiàn)快速排序的方法

    C#使用隨機樞軸實現(xiàn)快速排序的方法

    本文探討了如何使用隨機樞軸實現(xiàn)快速排序,介紹了Lomuto和Hoare兩種分區(qū)方案,并提出了一種不使用傳統(tǒng)分區(qū)方案的實現(xiàn)方法,需要的朋友可以參考下
    2026-04-04
  • C#?線程簡單介紹及使用詳情

    C#?線程簡單介紹及使用詳情

    這篇文章主要介紹了C#?線程簡單介紹及使用詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08

最新評論

镇雄县| 司法| 平舆县| 磐安县| 搜索| 泾阳县| 台湾省| 油尖旺区| 天全县| 商洛市| 乡城县| 夏河县| 玉田县| 柏乡县| 高平市| 依安县| 都兰县| 潮安县| 博客| 施甸县| 汝南县| 七台河市| 南丹县| 黔东| 十堰市| 全南县| 保山市| 巴中市| 佛坪县| 改则县| 台中县| 宣武区| 呈贡县| 门源| 军事| 石楼县| 杂多县| 台东县| 西宁市| 万安县| 尤溪县|