專利名稱:一種Excel文檔的保護(hù)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及信息安全領(lǐng)域,特別涉及一種Excel文檔的保護(hù)方法。
背景技術(shù):
在現(xiàn)有技術(shù)中,對(duì)Excel文檔的保護(hù)方法通常是對(duì)整個(gè)Excel文檔進(jìn)行加密,當(dāng)合法用戶通過(guò)認(rèn)證后對(duì)文檔進(jìn)行解密,恢復(fù)出明文。但有些Excel文檔中會(huì)包含一些復(fù)雜的運(yùn)算和公式,如果使用前面所說(shuō)的Excel文檔保護(hù)方法,當(dāng)解密后公式算法仍然會(huì)暴露給用戶,無(wú)法實(shí)現(xiàn)對(duì)一些核心公式算法的保護(hù)。綜上所述,現(xiàn)有技術(shù)存在以下缺陷只能實(shí)現(xiàn)對(duì)整個(gè)文檔的保護(hù),不能保護(hù)特定的公式算法;核心的公式算法 無(wú)法安全的保存。
發(fā)明內(nèi)容
鑒于現(xiàn)有技術(shù)的不足,為了實(shí)現(xiàn)對(duì)核心算法的安全保護(hù),本發(fā)明提出了一種Excel 文檔中公式算法的保護(hù)方法。本發(fā)明采用的技術(shù)方案如下一種Excel文檔的保護(hù)方法,包括以下步驟第二插件檢測(cè)公式保護(hù)列表中是否存在記錄密文,所述公式保護(hù)列表為預(yù)先在 Excel文檔中創(chuàng)建的隱藏工作表,或者,存儲(chǔ)在加密鎖中的工作表;如果所述公式保護(hù)列表中存在記錄密文,則所述第二插件從所述公式保護(hù)列表中讀取所述記錄密文,獲取根據(jù)所述記錄密文解密得到的記錄明文;所述第二插件根據(jù)所述記錄明文中的公式進(jìn)行計(jì)算,將計(jì)算結(jié)果填寫到所述Excel文檔的相應(yīng)的單元格中;如果所述公式保護(hù)列表中不存在記錄密文,則結(jié)束流程。一種Excel文檔的保護(hù)方法,包括以下步驟第二插件檢測(cè)公式保護(hù)列表中是否存在記錄密文,所述公式保護(hù)列表為預(yù)先在 Excel文檔中創(chuàng)建的隱藏工作表,或者,存儲(chǔ)在加密鎖中的工作表;如果所述公式保護(hù)列表中存在記錄密文,所述加密鎖獲取所述記錄密文,對(duì)所述記錄密文進(jìn)行解密,得到記錄明文,解析所述記錄明文中的公式,得到所述公式包含的單元格地址,將所述單元格地址發(fā)送給所述第二插件;所述第二插件從所述Excel文檔中獲取存儲(chǔ)于所述單元格地址的數(shù)據(jù),將公式運(yùn)算所需的全部數(shù)據(jù)發(fā)送給所述加密鎖;所述加密鎖根據(jù)所述公式運(yùn)算所需的全部數(shù)據(jù)和所述記錄明文中的公式進(jìn)行計(jì)算,將計(jì)算結(jié)果以及與所述計(jì)算結(jié)果相對(duì)應(yīng)的單元格的地址發(fā)送給所述第二插件,清除所述記錄明文;所述第二插件根據(jù)與所述計(jì)算結(jié)果相對(duì)應(yīng)的單元格的地址,將所述計(jì)算結(jié)果填寫到與所述計(jì)算結(jié)果相對(duì)應(yīng)的單元格中;如果所述公式保護(hù)列表中不存在記錄密文,則結(jié)束流程。一種Excel文檔的保護(hù)裝置,其特征在于,包括檢測(cè)模塊,用于檢測(cè)公式保護(hù)列表中是否存在記錄密文,所述公式保護(hù)列表為預(yù)先在Excel文檔中創(chuàng)建的隱藏工作表,或者,存儲(chǔ)在加密鎖中的工作表;獲取模塊,用于在所述檢測(cè)模塊檢測(cè)到所述公式保護(hù)列表中存在記錄密文時(shí),從所述公式保護(hù)列表中讀取所述記錄密文,獲取根據(jù)所述記錄密文解密得到的記錄明文;計(jì)算模塊,用于根據(jù)所述記錄明文中的公式進(jìn)行計(jì)算;填寫模塊,用于將所述計(jì)算模塊計(jì)算得到的計(jì)算結(jié)果填寫到所述Excel文檔的相應(yīng)的單元格中。一種Excel文檔的保護(hù)系統(tǒng),包括第二插件和加密鎖所述第二插件,用于檢測(cè)公式保護(hù)列表中是否存在記錄密文,所述公式保護(hù)列表為預(yù)先在Excel文檔中創(chuàng)建的隱藏工作表,或者,存儲(chǔ)在加密鎖中的工作表;接收來(lái)自所述加密鎖的單元格地址,從所述Excel文檔中獲取存儲(chǔ)于所述單元格地址的數(shù)據(jù),將公式運(yùn)算所需的全部數(shù)據(jù)發(fā)送給所述加密鎖;接收來(lái)自加密鎖的計(jì)算結(jié)果以及與所述計(jì)算結(jié)果相對(duì)應(yīng)的單元格的地址,根據(jù)與所述計(jì)算結(jié)果相對(duì)應(yīng)的單元格的地址,將所述計(jì)算結(jié)果填寫到與所述計(jì)算結(jié)果相對(duì)應(yīng)的單元格中;所述加密鎖,用于在所述公式保護(hù)列表中存在記錄密文時(shí),獲取所述記錄密文,對(duì)所述記錄密文進(jìn)行解密,得到記錄明文,解析所述記錄明文中的公式,得到所述公式包含的單元格地址,將所述單元格地址發(fā)送給所述第二插件;根據(jù)所述公式運(yùn)算所需的全部數(shù)據(jù)和所述記錄明文中的公式進(jìn)行計(jì)算,將計(jì)算結(jié)果以及與所述計(jì)算結(jié)果相對(duì)應(yīng)的單元格的地址發(fā)送給所述第二插件,清除所述記錄明文。本發(fā)明的有益效果在于提高了 Excel文檔中核心算法的安全性。
為了更清楚的說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖廣圖2為本發(fā)明實(shí)施例二提供的Excel文檔的保護(hù)方法中第一插件的工作方法流程圖;圖T圖8為本發(fā)明實(shí)施例三提供的Excel文檔的保護(hù)方法中第二插件的工作方法流程圖;
圖9為本發(fā)明實(shí)施例四提供的一種Excel文檔的保護(hù)裝置的方框圖。
具體實(shí)施例方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。實(shí)施例一本發(fā)明實(shí)施例一提供了插件的安裝過(guò)程,具體包括如下內(nèi)容步驟101 :復(fù)制插件解決方案文件到安裝目錄中;
具體地,所述插件解決方案文件包括清單、程序集以及插件用到的其他文件。步驟102 :安裝系統(tǒng)必備組件;具體地,所述系統(tǒng)必備組件可以隨安裝程序提供,也可以在安裝過(guò)程中按需下載。步驟103 :向注冊(cè)表中寫入特定的注冊(cè)表項(xiàng)。具體地,在本實(shí)施例中所述特定的注冊(cè)表項(xiàng)為Root\Software\Microsoft\ 0ffice\應(yīng)用程序名稱\Addins\外接程序ID。實(shí)施例二本發(fā)明實(shí)施例在實(shí)施例一的基礎(chǔ)上提出了一種Excel文檔的保護(hù)方法,所述方法包括加密公式和解密執(zhí)行公式兩部分,其中加密公式通過(guò)第一插件實(shí)現(xiàn)、解密執(zhí)行公式通過(guò)第二插件實(shí)現(xiàn)。開發(fā)商可以在Excel工作簿中添加一個(gè)宏,由宏程序加載插件公開出來(lái)的對(duì)象, 然后在對(duì)應(yīng)的場(chǎng)景下調(diào)用對(duì)象的方法,所述方法對(duì)應(yīng)的調(diào)用插件中的函數(shù)?;蛘?,開發(fā)商可以通過(guò)重寫RequestService方法在Excel文檔編輯器的工具欄上增加按鈕,當(dāng)發(fā)生所述按鈕的相應(yīng)事件(如單擊事件)時(shí)對(duì)應(yīng)的調(diào)用插件中的函數(shù)。第一插件中設(shè)置有增加公式函數(shù)、加密公式函數(shù);第二插件中設(shè)置有解密執(zhí)行公式函數(shù)。以下詳細(xì)介紹當(dāng)?shù)谝徊寮懈骱瘮?shù)被調(diào)用時(shí)包含的具體操作,當(dāng)?shù)诙寮械慕饷軋?zhí)行公式函數(shù)被調(diào)用時(shí)包含的具體操作將在實(shí)施例三中進(jìn)行闡述。(I)參見圖1,當(dāng)?shù)谝徊寮脑黾庸胶瘮?shù)被調(diào)用時(shí)具體包括步驟201 :第一插件判斷Excel文檔中是否有被選定的單元格,是則順序執(zhí)行下一步,否則提示相應(yīng)信息,結(jié)束操作;具體地,在本實(shí)施例中所述相應(yīng)信息為未選定單元格。步驟202 :第一插件獲取被選定單元格的信息;優(yōu)選地,在本實(shí)施例中,所述信息為被選定單元格的地址以及被選定單元格中的公式,具體獲得某個(gè)被選定單元格中公式的實(shí)現(xiàn)方法為定義一個(gè)Excel. Range類型的對(duì)象,將第一插件的Application. ActiveCell賦值給所述對(duì)象,通過(guò)讀取所述對(duì)象的 formula屬性獲得所述對(duì)象的值,即被選定單元格中的公式。步驟203 :第一插件根據(jù)獲取到的信息按預(yù)定的格式生成相應(yīng)公式記錄;其中,在本實(shí)施例中,被選定的單元格可以是一個(gè)或多個(gè);優(yōu)選地,第一插件根據(jù)從每個(gè)單元格中獲取到的信息對(duì)應(yīng)生成一條公式記錄;例如,被選定的單元格為Excel文檔中Sheetl的Al單元格,且Al單元格中的公式“=A2+A3”,則第一插件生成的公式記錄為 “Formula: Sheetl$Al, =A2+A3,,。步驟204 :第一插件將生成的公式記錄添加到公式保護(hù)列表中,清除被選定單元格的formula屬性。具體地,在本實(shí)施例中清除被選定單元格的formula屬性的同時(shí)還可將被選定單元格的value屬性賦值為O ;
其中,所述公式保護(hù)列表為預(yù)先在Excel文檔中創(chuàng)建的一個(gè)隱藏工作表或存儲(chǔ)于加密鎖中的一個(gè)工作表。(2)參見圖2,當(dāng)?shù)谝徊寮募用芄胶瘮?shù)被調(diào)用時(shí)具體包括
步驟301 :第一插件檢測(cè)公式保護(hù)列表中是否有未加密的公式記錄,是則順序執(zhí)行下一步,否則提示相應(yīng)信息,結(jié)束操作;具體地,在本實(shí)施例中,所述相應(yīng)信息為不存在未加密公式記錄。步驟302 :第一插件讀取公式保護(hù)列表中未加密的公式記錄;步驟303 :第一插件根據(jù)第一預(yù)設(shè)算法對(duì)未加密的公式記錄的相應(yīng)內(nèi)容進(jìn)行加密運(yùn)算,生成記錄密文;具體地,所述第一預(yù)設(shè)算法為預(yù)先存儲(chǔ)在第一插件中的加密算法;其中,所述未加密公式記錄的相應(yīng)內(nèi)容為未加密公式記錄的全部?jī)?nèi)容或?yàn)榧用芄接涗浀墓讲糠?,例如未加密公式記錄為“Formula: Sheetl$Al, =A2+A3”,其公式部分為“=A2+A3”,當(dāng)僅對(duì)未加密公式記錄的公式部分進(jìn)行加密運(yùn)算時(shí),生成的 記錄密文為 “Formula:Sheetl$Al,公式密文”。步驟304 :第一插件清除公式保護(hù)列表中未加密的公式記錄,將生成的記錄密文寫入公式保護(hù)列表中。進(jìn)一步地,所述第一預(yù)設(shè)算法還可以為預(yù)先存儲(chǔ)在加密鎖中的加密算法,相應(yīng)地, 步驟302、步驟303替換為步驟302 '、步驟303 ',步驟302 '、步驟303 '的具體內(nèi)容如下步驟302 ^ :第一插件讀取公式保護(hù)列表中未加密的公式記錄,將讀取到的未加密的公式記錄發(fā)送給加密鎖;步驟303丨:第一插件判斷在預(yù)定時(shí)間內(nèi)是否接收到加密鎖返回的記錄密文,是則順序執(zhí)行下一步,否則提示相應(yīng)信息,結(jié)束操作。具體地,在本實(shí)施例中,所述相應(yīng)信息為加密鎖加密失敗。(3)進(jìn)一步地,所述第一插件中還可設(shè)置有解密函數(shù),參見圖3,當(dāng)?shù)谝徊寮慕饷芎瘮?shù)被調(diào)用時(shí)具體包括步驟401 :第一插件檢測(cè)公式保護(hù)列表中是否有相應(yīng)記錄密文,是則順序執(zhí)行下一步,否則提示相應(yīng)信息,結(jié)束操作;具體地,所述檢測(cè)公式保護(hù)列表中是否有相應(yīng)記錄密文為檢測(cè)公式保護(hù)列表中是否有記錄密文或者是檢測(cè)公式保護(hù)列表中是否有對(duì)應(yīng)指定單元格地址的記錄密文;若為第二種情況,則需在對(duì)未加密公式記錄進(jìn)行加密計(jì)算時(shí)僅對(duì)其公式部分進(jìn)行加密計(jì)算。進(jìn)一步地,在本實(shí)施例中,所述相應(yīng)信息為無(wú)相應(yīng)記錄密文。步驟402 :第一插件讀取相應(yīng)記錄密文;步驟403 :第一插件根據(jù)第二預(yù)設(shè)算法對(duì)讀取到的記錄密文進(jìn)行解密運(yùn)算得到記錄明文;其中,所述第二預(yù)設(shè)算法為預(yù)先存儲(chǔ)在第一插件中的解密算法。步驟404 :第一插件將記錄明文添加到公式保護(hù)列表中。進(jìn)一步地,所述第二預(yù)設(shè)算法還可以為預(yù)先存儲(chǔ)在加密鎖中的解密算法,相應(yīng)地, 步驟403替換為步驟403 ' -I以及步驟403 ' -2,所述步驟403 ' -I以及步驟403 ' -2 具體內(nèi)容如下步驟403丨-I :將讀取到的記錄密文發(fā)送給加密鎖;步驟403 ’ -2:判斷在預(yù)定時(shí)間內(nèi)是否接收到加密鎖返回的記錄明文,是則執(zhí)行步驟404,否則提示相應(yīng)信息,結(jié)束操作。具體地,在本實(shí)施例中,所述相應(yīng)信息為加密鎖解密失敗。實(shí)施例三本發(fā)明實(shí)施例提供了第二插件中的解密執(zhí)行公式函數(shù)被調(diào)用時(shí)包含的具體操作, 具體地,采用不同方法時(shí)包含的具體操作不同,如下方法一本方法中公式保護(hù)列表為預(yù)先在Excel文檔中創(chuàng)建一個(gè)隱藏工作表, 且公式的分析、執(zhí)行過(guò)程由插件完成。參見圖4,當(dāng)插件的解密執(zhí)行公式函數(shù)被調(diào)用時(shí)具體包括步驟501 :第二插件檢測(cè)公式保護(hù)列表中是否有相應(yīng)記錄密文,是則順序執(zhí)行下一步,否則提示相應(yīng)信息,結(jié)束操作;具體地,所述檢測(cè)公式保護(hù)列表中是否有相應(yīng)記錄密文為檢測(cè)公式保護(hù)列表中是否有記錄密文或者是檢測(cè)公式保護(hù)列表中是否有對(duì)應(yīng)指定單元格地址的記錄密文;若為第二種情況,則需在對(duì)未加密公式記錄進(jìn)行加密計(jì)算時(shí)僅對(duì)其公式部分進(jìn)行加密計(jì)算;進(jìn)一步地,在本實(shí)施例中,所述相應(yīng)信息為無(wú)相應(yīng)記錄密文。步驟502 :第二插件讀取公式保護(hù)列表中的記錄密文;步驟503 :第二插件根據(jù)第二預(yù)設(shè)算法對(duì)讀取到的記錄密文進(jìn)行解密運(yùn)算得到記錄明文;具體地,所述第二預(yù)設(shè)算法為預(yù)先存儲(chǔ)在第二插件中的解密算法。步驟504 :第二插件解析所述記錄明文,從Excel文檔中獲取公式運(yùn)算過(guò)程中所需的數(shù)據(jù);例如,記錄明文為“Formula: Sheetl$Al, =A2+A3”,則公式運(yùn)算過(guò)程中所需的數(shù)據(jù)為Sheetl工作表中的A2單元格和A3單元格中的數(shù)據(jù);具體地,獲取已知地址的單元格中的數(shù)據(jù)的具體方法為定義一個(gè)Excel. Range 類型的對(duì)象,如果要獲取Sheetl工作表中A2單元格中的數(shù)據(jù),則將Application. Range (“Sheetl ! A2”)賦值給所述對(duì)象,通過(guò)讀取所述對(duì)象的value屬性獲取所述單元格中的數(shù)據(jù)。步驟505 :第二插件判斷是否成功獲取到公式運(yùn)算過(guò)程中所需的全部數(shù)據(jù),是則順序執(zhí)行下一步,否則提示相應(yīng)信息,結(jié)束操作或執(zhí)行步驟506丨;其中,Excel文檔中的單元格具有value屬性和text屬性,所述判斷是否成功獲取到公式運(yùn)算過(guò)程中所需的全部數(shù)據(jù)具體通過(guò)以下方法實(shí)現(xiàn)①、檢查與第二插件獲得的地址對(duì)應(yīng)的各單元格的value屬性,判斷是否有value 屬性為O的單元格,是則執(zhí)行②,否則判定成功獲取到公式運(yùn)算過(guò)程中所需的全部數(shù)據(jù);②、檢查value屬性為O的單元格的text屬性,判斷是否有text屬性為O的單元格,是則判定未成功獲取到公式運(yùn)算過(guò)程所需的全部數(shù)據(jù),否則判定成功獲取到公式運(yùn)算過(guò)程中所需的全部數(shù)據(jù);進(jìn)一步地,在本實(shí)施例中,所述相應(yīng)信息為未成功獲取到全部數(shù)據(jù)。步驟506 :第二插件根據(jù)記錄明文中的公式和獲取到的數(shù)據(jù)進(jìn)行相應(yīng)計(jì)算,并將計(jì)算結(jié)果填寫到Excel文檔的相應(yīng)單元格中。例如,記錄明文為“Formula: Sheetl$Al, =A2+A3”,則記錄明文中的公式為A2+A3,第二插件根據(jù)獲取到的A2單元格和A3單元格中的數(shù)據(jù)計(jì)算A2+A3的結(jié)果,將結(jié)果填寫到 Al單元格中;具體地,將計(jì)算結(jié)果填寫到Excel文檔的相應(yīng)單元格中的具體方法為定義一個(gè) Excel. Range類型的對(duì)象,如果要將計(jì)算結(jié)果填寫到Sheetl工作表中Al單元格中,則將 Application. Range (“Sheetl ! Al”)賦值給所述對(duì)象,通過(guò)設(shè)置所述對(duì)象的value屬性將計(jì)算結(jié)果填寫到Al單元格中。步驟506 ’ :第二插件根據(jù)記錄明文中的公式和獲取到的數(shù)據(jù)進(jìn)行相應(yīng)計(jì)算,并將計(jì)算結(jié)果填寫到Excel文檔的相應(yīng)單元格中,執(zhí)行步驟507。具體地,在步驟506丨中,可計(jì)算全部公式或者只計(jì)算成功獲取到運(yùn)算過(guò)程所需數(shù)據(jù)的公式,當(dāng)計(jì)算全部公式時(shí),默認(rèn)未成功獲取到的數(shù)據(jù)均為預(yù)設(shè)值,優(yōu)選地,預(yù)設(shè)值為
O0步驟507 :第二插件清除其內(nèi)部的記錄明文。進(jìn)一步地,所述第二預(yù)設(shè)算法還可以為預(yù)先存儲(chǔ)在加密鎖中的解密算法,相應(yīng)地, 步驟503替換為步驟503丨-I以及步驟503丨-2,所述步驟503丨-I以及步驟503丨-2 具體內(nèi)容如下步驟503丨-I :第二插件將讀取到的記錄密文發(fā)送給加密鎖;步驟503 ’ -2 :第二插件判斷在預(yù)定時(shí)間內(nèi)是否接收到所述加密鎖返回的記錄明文,是則執(zhí)行步驟504,否則提示相應(yīng)信息,結(jié)束操作。具體地,在本實(shí)施例中,所述相應(yīng)信息為加密鎖解密失敗。方法二本方法中公式保護(hù)列表為預(yù)先在Excel文檔中創(chuàng)建一個(gè)隱藏工作表,且公式的分析、執(zhí)行過(guò)程由插件完成,與方法一的區(qū)別在于公式的執(zhí)行過(guò)程通過(guò)調(diào)用相應(yīng)單元格的 Calculate方法完成。參見圖5,當(dāng)?shù)诙寮慕饷軋?zhí)行公式函數(shù)被調(diào)用時(shí)具體包括步驟601 :第二插件檢測(cè)公式保護(hù)列表中是否有相應(yīng)記錄密文,是則順序執(zhí)行下一步,否則提示相應(yīng)信息,結(jié)束操作;具體地,所述檢測(cè)公式保護(hù)列表中是否有相應(yīng)記錄密文為檢測(cè)公式保護(hù)列表中是否有記錄密文或者是檢測(cè)公式保護(hù)列表中是否有對(duì)應(yīng)指定單元格地址的記錄密文;若為第二種情況,則需在對(duì)未加密公式記錄進(jìn)行加密計(jì)算時(shí)僅對(duì)其公式部分進(jìn)行加密計(jì)算;進(jìn)一步地,在本實(shí)施例中,所述相應(yīng)信息為無(wú)相應(yīng)記錄密文。步驟602 :第二插件讀取公式保護(hù)列表中的記錄密文;步驟603 :第二插件根據(jù)第二預(yù)設(shè)算法對(duì)讀取到的記錄密文進(jìn)行解密運(yùn)算得到記錄明文;具體地,所述第二預(yù)設(shè)算法為預(yù)先存儲(chǔ)在所述插件中的解密算法。步驟604:第二插件解析所述記錄明文,并將記錄明文中的公式賦值給相應(yīng)單元格的formula屬性;例如,記錄明文為“Formula: Sheet 1$A1, =A2+A3”,則將=A2+A3賦值給Al單元格的 formula 屬性;具體地,將公式賦值給相應(yīng)單元格中的formula屬性的具體方法為定義一個(gè) Excel. Range類型的對(duì)象,如果要將公式=A2+A3賦值給Sheetl工作表中Al單元格的、formula屬性,則將Application. Range (“Sheetl ! Al”)賦值給所述對(duì)象,通過(guò)將所述對(duì)象的formula屬性設(shè)置位=A2+A3實(shí)現(xiàn)將=A2+A3賦值給Al單元格的formula屬性。步驟605 :第二插件調(diào)用所述相應(yīng)單元格的calculate方法進(jìn)行相應(yīng)計(jì)算,并將計(jì)算結(jié)果填寫到Excel文檔的相應(yīng)單元格中;步驟606 :第二插件清空所述相應(yīng)單元格的formula屬性。進(jìn)一步地,所述第二預(yù)設(shè)算法還可以為預(yù)先存儲(chǔ)在加密鎖中的解密算法,相應(yīng)地, 步驟603替換為步驟603 ' -I以及步驟603 ' -2,所述步驟603 ' -I以及步驟603 ' -2 具體內(nèi)容如下步驟603丨-I :第二插件將讀取到的記錄密文發(fā)送給加密鎖;步驟603 ’ -2 :第二插件判斷在預(yù)定時(shí)間內(nèi)是否接收到所述加密鎖返回的記錄明文,是則執(zhí)行步驟604,否則 提示相應(yīng)信息,結(jié)束操作。具體地,在本實(shí)施例中所述相應(yīng)信息為加密鎖解密失敗。方法三本方法中公式保護(hù)列表為預(yù)先在Excel文檔中創(chuàng)建一個(gè)隱藏工作表,且公式的解密、分析、執(zhí)行過(guò)程均由加密鎖完成。參見圖6,當(dāng)?shù)诙寮慕饷軋?zhí)行公式函數(shù)被調(diào)用時(shí)具體包括步驟701 :第二插件檢測(cè)公式保護(hù)列表中是否有相應(yīng)記錄密文,是則順序執(zhí)行下一步,否則提示相應(yīng)信息,結(jié)束操作;具體地,所述檢測(cè)公式保護(hù)列表中是否有相應(yīng)記錄密文為檢測(cè)公式保護(hù)列表中是否有記錄密文或者是檢測(cè)公式保護(hù)列表中是否有對(duì)應(yīng)指定單元格地址的記錄密文;若為第二種情況,則需在對(duì)未加密公式記錄進(jìn)行加密計(jì)算時(shí)僅對(duì)其公式部分進(jìn)行加密計(jì)算;進(jìn)一步地,在本實(shí)施例中,所述相應(yīng)信息為無(wú)相應(yīng)記錄密文。步驟702 :第二插件讀取所述公式保護(hù)列表中的記錄密文;步驟703 :第二插件將讀取到的記錄密文發(fā)送給加密鎖;步驟704 :所述加密鎖根據(jù)第二預(yù)設(shè)算法對(duì)所述記錄密文進(jìn)行解密運(yùn)算得到記錄明文;具體地,所述第二預(yù)設(shè)算法為預(yù)先存儲(chǔ)在所述加密鎖中的解密算法。步驟705 :所述加密鎖解析所述記錄明文,將公式運(yùn)算過(guò)程中涉及的單元格的地址返回給第二插件;步驟706 :第二插件從Excel文檔中獲取公式運(yùn)算過(guò)程所需數(shù)據(jù);步驟707 :第二插件判斷是否成功獲取到公式運(yùn)算過(guò)程所需的全部數(shù)據(jù),是則順序執(zhí)行下一步,否則提示相應(yīng)信息,結(jié)束操作或執(zhí)行步驟708丨;具體地,在本實(shí)施例中,所述相應(yīng)信息為未成功獲取到全部數(shù)據(jù)。其中,判斷是否成功獲取到公式運(yùn)算過(guò)程中所需的全部數(shù)據(jù)的方法與方法一中的判斷方法相同,在此不再贅述。步驟708 :第二插件將讀取到的數(shù)據(jù)發(fā)送給所述加密鎖;步驟708丨:第二插件默認(rèn)未成功獲取到的數(shù)據(jù)為預(yù)設(shè)值,將公式運(yùn)算過(guò)程所需的全部數(shù)據(jù)發(fā)送給所述加密鎖,執(zhí)行步驟709 ;優(yōu)選地,在本實(shí)施例中預(yù)設(shè)值為O。
步驟709 :所述加密鎖根據(jù)記錄明文以及接收到的數(shù)據(jù)進(jìn)行相應(yīng)計(jì)算,并將計(jì)算結(jié)果和與計(jì)算結(jié)果相對(duì)應(yīng)的單元格的地址發(fā)送給第二插件;步驟710 :所述加密鎖清除其內(nèi)部的記錄明文。步驟711 :第二插件將計(jì)算結(jié)果填寫到Excel文檔的相應(yīng)單元格中。方法四本方法中公式保護(hù)列表為存儲(chǔ)在加密鎖中的一個(gè)工作表,且公式的解密、分析、執(zhí)行過(guò)程均由第二插件完成。參見圖7,當(dāng)?shù)诙寮慕饷軋?zhí)行公式函數(shù)被調(diào)用時(shí)具體包括步驟801 :第二插件檢測(cè)公式保護(hù)列表中是否有相應(yīng)記錄密文,是則順序執(zhí)行下一步,否則提示相應(yīng)信息,結(jié)束操作;具體地,所述檢測(cè)公式保護(hù)列表中是否有相應(yīng)記錄密文為檢測(cè)公式保護(hù)列表中是否有記錄密文或者是檢測(cè)公式保護(hù)列表中是否有對(duì)應(yīng)指定單元格地址的記錄密文;若為第二種情況,則需在對(duì)未加密公式記錄進(jìn)行加密計(jì)算時(shí)僅對(duì)其公式部分進(jìn)行加密計(jì)算;
進(jìn)一步地,在本實(shí)施例中,所述相應(yīng)信息為無(wú)相應(yīng)記錄密文。步驟802 :第二插件讀取公式保護(hù)列表中的記錄密文;步驟803 :第二插件根據(jù)第二預(yù)設(shè)算法對(duì)所述記錄密文進(jìn)行解密運(yùn)算得到記錄明文;具體地,所述第二預(yù)設(shè)算法為預(yù)先存儲(chǔ)在第二插件中的解密算法。步驟804 :第二插件解析所述記錄明文,從Excel文檔中獲取公式運(yùn)算過(guò)程中所需的數(shù)據(jù);步驟805 :第二插件判斷是否成功獲取到公式運(yùn)算過(guò)程中所需的全部數(shù)據(jù),是則順序執(zhí)行下一步,否則提示相應(yīng)信息,結(jié)束操作或執(zhí)行步驟806丨;具體地,在本實(shí)施例中,所述相應(yīng)信息為未成功獲取到全部數(shù)據(jù);其中,判斷是否成功獲取到公式運(yùn)行過(guò)程中所需的全部數(shù)據(jù)的方法與方法一中的判斷方法相同,在此不再贅述。步驟806 :第二插件根據(jù)記錄明文以及獲取到的數(shù)據(jù)進(jìn)行相應(yīng)計(jì)算,并將計(jì)算結(jié)果填寫到Excel文檔的相應(yīng)單元格中。步驟806丨:第二插件根據(jù)記錄明文以及獲取到的數(shù)據(jù)進(jìn)行相應(yīng)計(jì)算,并將計(jì)算結(jié)果填寫到Excel文檔的相應(yīng)單元格中,執(zhí)行步驟807。具體地,在步驟806丨中,可計(jì)算全部公式或者只計(jì)算成功獲取到運(yùn)算過(guò)程所需數(shù)據(jù)的公式,當(dāng)計(jì)算全部公式時(shí),默認(rèn)未成功獲取到的數(shù)據(jù)為預(yù)設(shè)值,優(yōu)選地,預(yù)設(shè)值為O。步驟807 :第二插件清除其內(nèi)部的記錄明文。進(jìn)一步地,所述第二預(yù)設(shè)算法還可以為預(yù)先存儲(chǔ)在加密鎖中的解密算法,相應(yīng)地, 步驟801、802、803替換為步驟801 '以及步驟802 ',所述步驟801 '以及步驟802 '的具體內(nèi)容如下步驟801 ’ :第二插件通知加密鎖讀取公式保護(hù)列表中的記錄密文并根據(jù)第二預(yù)設(shè)算法對(duì)其進(jìn)行解密運(yùn)算得到記錄明文;步驟802丨:第二插件判斷在預(yù)定時(shí)間內(nèi)是否接收到加密鎖返回的記錄明文,是則執(zhí)行步驟804,否則提示相應(yīng)信息,結(jié)束操作。
具體地,在本實(shí)施例中,所述相應(yīng)信息為加密鎖解密失敗。方法五本方法中公式保護(hù)列表為存儲(chǔ)于加密鎖中的一個(gè)工作表,且公式的解密、分析、執(zhí)行過(guò)程均由加密鎖完成。參見圖8,當(dāng)?shù)诙寮慕饷軋?zhí)行公式函數(shù)被調(diào)用時(shí)具體包括步驟901 :第二插件檢測(cè)公式保護(hù)列表中是否有相應(yīng)記錄密文,是則順序執(zhí)行下一步,否則提示相應(yīng)信息,結(jié)束操作;具體地,所述檢測(cè)公式保護(hù)列表中是否有相應(yīng)記錄密文為檢測(cè)公式保護(hù)列表中是否有記錄密文或者是檢測(cè)公式保護(hù)列表中是否有對(duì)應(yīng)指定單元格地址的記錄密文;若為第二種情況,則需在對(duì)未加密公式記錄進(jìn)行加密計(jì)算時(shí)僅對(duì)其公式部分進(jìn)行加密計(jì)算;進(jìn)一步地,在本實(shí)施例中,所述相應(yīng)信息為無(wú)相應(yīng)記錄密文。步驟902 :第二插件通知加密鎖對(duì)所述記錄密文進(jìn)行解密;
步驟903 :所述加密鎖根據(jù)第二預(yù)設(shè)算法對(duì)所述記錄密文進(jìn)行解密運(yùn)算得到記錄明文;具體地,所述第二預(yù)設(shè)算法為預(yù)先存儲(chǔ)在所述加密鎖中的解密算法。步驟904 :所述加密鎖解析所述明文記錄,將公式運(yùn)算過(guò)程中涉及的單元格的地址返回給第二插件;步驟905 :第二插件從Excel文檔中獲取公式運(yùn)算過(guò)程中所需數(shù)據(jù);步驟906 :第二插件判斷是否成功獲取到公式運(yùn)算過(guò)程中所需的全部數(shù)據(jù),是則順序執(zhí)行下一步,否則提示相應(yīng)信息,結(jié)束操作或執(zhí)行步驟907丨;具體地,在本實(shí)施例中,所述相應(yīng)信息為未成功獲取到全部數(shù)據(jù);
其中,判斷在預(yù)定時(shí)間內(nèi)是否成功獲取到公式運(yùn)算過(guò)程中所需的全部數(shù)據(jù)的方法與方法一中的判斷方法相同,在此不再贅述。步驟907 :第二插件將讀取到的數(shù)據(jù)發(fā)送給所述加密鎖;步驟907丨:第二插件默認(rèn)未成功讀取到的數(shù)據(jù)為預(yù)設(shè)值,將公式運(yùn)算過(guò)程所需的數(shù)據(jù)發(fā)送給所述加密鎖執(zhí)行步驟908 ;優(yōu)選地,在本實(shí)施例中預(yù)設(shè)值為O。步驟908 :所述加密鎖根據(jù)公式明文以及接收到的數(shù)據(jù)進(jìn)行相應(yīng)計(jì)算,并將計(jì)算結(jié)果和相應(yīng)單元格地址發(fā)送給第二插件;步驟909 :所述加密鎖清除其內(nèi)部的記錄明文。步驟910 :第二插件將所述計(jì)算結(jié)果填寫到Excel文檔的相應(yīng)單元格中。實(shí)施例四參見圖9,本發(fā)明實(shí)施例提供了一種Excel文檔的保護(hù)裝置,所述裝置包括檢測(cè)模塊11、獲取模塊12、解析模塊13、判斷模塊14、計(jì)算模塊15、填寫模塊16、清除模塊17,上述各模塊的具體功能如下檢測(cè)模塊11,用于檢測(cè)公式保護(hù)列表中是否存在記錄密文;具體地,所述公式保護(hù)列表為預(yù)先在Excel文檔中創(chuàng)建的隱藏工作表,或者,存儲(chǔ)在加密鎖中的工作表;所述是否存在記錄密文為是否有記錄密文或者是否有與指定單元格對(duì)應(yīng)的記錄密文。獲取模塊,用于在檢測(cè)模塊檢測(cè)到公式保護(hù)列表中存在記錄密文時(shí),從公式保護(hù)列表中讀取記錄密文,以及獲取根據(jù)記錄密文得到的記錄明文;解析模塊,用于解析記錄明文中的公式,得到公式包含的單元格地址,并從Excel 文檔中獲取存儲(chǔ)與所述單元格地址的數(shù)據(jù);判斷模塊,用于判斷是否成功獲取到所述公式包含的所有單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù);具體地,所述判斷模塊判斷是否成功獲取到所述公式包含的所有單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)具體包括檢測(cè)所述公式包含的單元格地址對(duì)應(yīng)的單元格若所述公式包含的單元格地址對(duì)應(yīng)的單元格中每一單元格的value屬性和text屬性中至少一個(gè)屬性不為0,則判斷成功獲取到所述公式包含的所有單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù);若所述公式包含的單元格地址對(duì)應(yīng)的單元格中每一單元格的value屬性和text屬性均為0,則判斷未成功獲取到所述公式包含的任一單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù);若所述公式包含的單元格地址對(duì)應(yīng)的單元格中部分單元格的value屬性和text屬性中至少一個(gè)屬性不為0,部分單元格的value屬性和text屬性均為0,則判斷成功獲取到所述公式包含的部分單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)。計(jì)算模塊,用于在判斷模塊判斷成功獲取到所述公式包含的所有單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)時(shí),根據(jù)獲取的數(shù)據(jù)和記錄明文中的公式進(jìn)行計(jì)算;或者,在判斷模塊判斷未成功獲取到任一所述公式包含的單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)時(shí),將未成功獲取到的 數(shù)據(jù)賦值為預(yù)設(shè)值,根據(jù)賦值后的數(shù)據(jù)和所述記錄明文中的公式進(jìn)行計(jì)算;或者,在判斷模塊判斷成功獲取到所述公式包含的部分單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)時(shí),經(jīng)未成功獲取到的數(shù)據(jù)賦值為預(yù)設(shè)值,根據(jù)獲取的數(shù)據(jù)、賦值后的數(shù)據(jù)和所述記錄明文中的公式進(jìn)行;填寫模塊,用于將計(jì)算模塊計(jì)算得到的計(jì)算結(jié)果填寫到Excel文檔的相應(yīng)單元格中;清除模塊,用于當(dāng)上述模塊完成其各自功能后清除所述記錄明文;其中,所述裝置可以不包括解析模塊和判斷模塊,則相應(yīng)地,計(jì)算模塊的功能相應(yīng)變?yōu)橛糜诮馕鲇涗浢魑模⒂涗浢魑闹械墓劫x值給Excel文檔的相應(yīng)的單元格的 formula屬性,調(diào)用單元格的calculate方法進(jìn)行計(jì)算;若計(jì)算模塊采用這種方式進(jìn)行計(jì)算,則相應(yīng)地,所述裝置還包括清空模塊,用于清空所述單元格的formula屬性;實(shí)施例五本發(fā)明實(shí)施例提供了一種Excel文檔保護(hù)系統(tǒng),所述系統(tǒng)包括第二插件和加密鎖,具體地,所述第二插件,用于檢測(cè)公式保護(hù)列表中是否存在記錄密文,所述公式保護(hù)列表為預(yù)先在Excel文檔中創(chuàng)建的隱藏工作表,或者,存儲(chǔ)在加密鎖中的工作表;接收來(lái)自所述加密鎖的單元格地址,從所述Excel文檔中獲取存儲(chǔ)于所述單元格地址的數(shù)據(jù),將公式運(yùn)算所需的全部數(shù)據(jù)發(fā)送給所述加密鎖;接收來(lái)自加密鎖的計(jì)算結(jié)果以及與所述計(jì)算結(jié)果相對(duì)應(yīng)的單元格的地址,根據(jù)與所述計(jì)算結(jié)果相對(duì)應(yīng)的單元格的地址,將所述計(jì)算結(jié)果填寫到與所述計(jì)算結(jié)果相對(duì)應(yīng)的單元格中;所述是否存在記錄密文為是否有記錄密文或者是否有與指定單元格對(duì)應(yīng)的記錄密文;其中,所述第二插件將公式運(yùn)算所需的全部數(shù)據(jù)發(fā)送給所述加密鎖之前還包括判斷是否成功獲取到所述公式包含的所有單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù);相應(yīng)地,若包含上述判斷過(guò)程,則所述第二插件將公式運(yùn)算所需的全部數(shù)據(jù)發(fā)送給所述加密鎖具體包括當(dāng)成功獲取到所述公式包含的所有單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)時(shí),將所述數(shù)據(jù)發(fā)送給所述加密鎖;或者,當(dāng)未成功獲取到所述公式包含的單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)時(shí),將未成功獲取到的數(shù)據(jù)賦值為預(yù)設(shè)值,將賦值后的數(shù)據(jù)發(fā)送給所述加密鎖;或者,當(dāng)成功獲取到所述公式包含的部分單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)時(shí),將未成功獲取到的數(shù)據(jù)賦值為預(yù)設(shè)值,將獲取的數(shù)據(jù)和賦值后的數(shù)據(jù)發(fā)送給所述加密鎖。進(jìn)一步地,所述第二插件判斷是否成功獲取到所述公式包含的所有單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)具體包括檢測(cè)所述公式包含的單元格地址對(duì)應(yīng)的單元格若所述公式包含的單元格地址對(duì)應(yīng)的單元格中每一單元格的value屬性和text屬性中至少一個(gè)屬性不為0,則判斷成功獲取到所述公式包含的所有單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù);若所述公式包含的單元格地址對(duì)應(yīng)的單元格中每一單元格的value屬性和text屬性均為0, 則判斷未成功獲取到所述公式包含的任一單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù);若所述公式包含的單元格地址對(duì)應(yīng)的單元格中部分單元格的value屬性和text屬性中至少一個(gè)屬性不為0,部分單元格的value屬性和text屬性均為0,則判斷成功獲取到所述公式包含的部分單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù);所述第二插件還用于將所述計(jì)算結(jié)果填寫到所述指定單元格地址。
所述加密鎖,用于在所述公式保護(hù)列表中存在記錄密文時(shí),獲取所述記錄密文,對(duì)所述記錄密文進(jìn)行解密,得到記錄明文,解析所述記錄明文中的公式,得到所述公式包含的單元格地址,將所述單元格地址發(fā)送給所述第二插件;根據(jù)所述公式運(yùn)算所需的全部數(shù)據(jù)和所述記錄明文中的公式進(jìn)行計(jì)算,將計(jì)算結(jié)果以及與所述計(jì)算結(jié)果相對(duì)應(yīng)的單元格的地址發(fā)送給所述第二插件,清除所述記錄明文;所述系統(tǒng)還包括第一插件,所述第一插件用于判斷所述Excel文檔中是否存在被選定的單元格,在存在被選定的單元格時(shí),獲取所述被選定的單元格的信息,根據(jù)獲取到的信息生成相應(yīng)的公式記錄,將生成的公式記錄添加到所述公式保護(hù)列表中,清除所述被選定的單元格的formula屬性,所述信息為所述被選定的單元格的地址和所述被選定的單元格中的公式。所述第一插件還用于檢測(cè)所述公式保護(hù)列表中是否存在未加密的公式記錄,當(dāng)存在未加密的公式記錄時(shí),讀取所述公式記錄,對(duì)所述公式記錄進(jìn)行加密,生成記錄密文,清除所述公式記錄,將所述記錄密文寫入所述公式保護(hù)列表。以上所述,僅為本發(fā)明的具體實(shí)施方式
,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
權(quán)利要求
1.一種Excel文檔的保護(hù)方法,其特征在于,包括以下步驟第二插件檢測(cè)公式保護(hù)列表中是否存在記錄密文,所述公式保護(hù)列表為預(yù)先在Excel 文檔中創(chuàng)建的隱藏工作表,或者,存儲(chǔ)在加密鎖中的工作表;如果所述公式保護(hù)列表中存在記錄密文,則所述第二插件從所述公式保護(hù)列表中讀取所述記錄密文,獲取根據(jù)所述記錄密文解密得到的記錄明文;所述第二插件根據(jù)所述記錄明文中的公式進(jìn)行計(jì)算,將計(jì)算結(jié)果填寫到所述Excel文檔的相應(yīng)的單元格中;如果所述公式保護(hù)列表中不存在記錄密文,則結(jié)束流程。
2.如權(quán)利要求I所述的方法,其特征在于,所述第二插件根據(jù)所述記錄明文中的公式進(jìn)行計(jì)算,具體為所述第二插件解析所述記錄明文,并將記錄明文中的公式賦值給所述Excel文檔的相應(yīng)的單元格的formula屬性,調(diào)用所述單元格的calculate方法進(jìn)行計(jì)算;所述第二插件將計(jì)算結(jié)果填寫到所述Excel文檔的相應(yīng)的單元格中之后,還包括 所述第二插件清空所述單元格的formula屬性。
3.如權(quán)利要求I所述的方法,其特征在于,所述第二插件根據(jù)所述記錄明文中的公式進(jìn)行計(jì)算之前,還包括所述第二插件解析所述記錄明文,得到所述記錄明文中的公式包含的單元格地址,從所述Excel文檔中獲取存儲(chǔ)于所述單元格地址的數(shù)據(jù);所述第二插件將計(jì)算結(jié)果填寫到所述Excel文檔的相應(yīng)的單元格中之后,還包括 所述第二插件清除所述記錄明文。
4.如權(quán)利要求3所述的方法,其特征在于,所述第二插件根據(jù)所述記錄明文中的公式進(jìn)行計(jì)算之前,還包括所述第二插件判斷是否成功獲取到所述公式包含的所有單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù);所述第二插件根據(jù)所述記錄明文中的公式進(jìn)行計(jì)算,具體為當(dāng)成功獲取到所述公式包含的所有單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)時(shí),所述第二插件根據(jù)獲取的數(shù)據(jù)和所述記錄明文中的公式進(jìn)行計(jì)算;或者,當(dāng)未成功獲取到所述公式包含的任一單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)時(shí),所述第二插件將未成功獲取到的數(shù)據(jù)賦值為預(yù)設(shè)值,根據(jù)賦值后的數(shù)據(jù)和所述記錄明文中的公式進(jìn)行計(jì)算;或者,當(dāng)成功獲取到所述公式包含的部分單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)時(shí),所述第二插件將未成功獲取到的數(shù)據(jù)賦值為預(yù)設(shè)值,根據(jù)獲取的數(shù)據(jù)、賦值后的數(shù)據(jù)和所述記錄明文中的公式進(jìn)行計(jì)算。
5.如權(quán)利要求4所述的方法,其特征在于,所述第二插件判斷是否成功獲取到所述公式包含的所有單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù),具體包括所述第二插件檢測(cè)所述公式包含的單元格地址對(duì)應(yīng)的單元格若所述公式包含的單元格地址對(duì)應(yīng)的單元格中每一單元格的value屬性和text屬性中至少一個(gè)屬性不為O,則判斷成功獲取到所述公式包含的所有單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù);若所述公式包含的單元格地址對(duì)應(yīng)的單元格中每一單元格的value屬性和text屬性均為O,則判斷未成功獲取到所述公式包含的任一單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù);若所述公式包含的單元格地址對(duì)應(yīng)的單元格中部分單元格的value屬性和text屬性中至少一個(gè)屬性不為O,部分單元格的value屬性和text屬性均為O,則判斷成功獲取到所述公式包含的部分單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)。
6.如權(quán)利要求I所述的方法,其特征在于,所述記錄密文,具體為所述公式保護(hù)列表中與指定單元格地址對(duì)應(yīng)的記錄密文; 所述將計(jì)算結(jié)果填寫到所述Excel文檔的相應(yīng)的單元格中,具體為將所述計(jì)算結(jié)果填寫到所述指定單元格地址。
7.如權(quán)利要求I所述的方法,還包括第一插件檢測(cè)所述公式保護(hù)列表中是否存在未加密的公式記錄;如果存在,則所述第一插件讀取所述公式記錄,對(duì)所述公式記錄進(jìn)行加密,生成記錄密文,清除所述公式記錄,將所述記錄密文寫入所述公式保護(hù)列表;如果不存在,則結(jié)束流程。
8.如權(quán)利要求7所述的方法,還包括所述第一插件判斷所述Excel文檔中是否存在被選定的單元格;如果存在,則所述第一插件獲取所述被選定的單元格的信息,根據(jù)獲取到的信息生成相應(yīng)的公式記錄,將生成的公式記錄添加到所述公式保護(hù)列表中,清除所述被選定的單元格的formula屬性,所述信息為所述被選定的單元格的地址和所述被選定的單元格中的公式;如果不存在,則結(jié)束流程。
9.一種Excel文檔的保護(hù)方法,其特征在于,包括以下步驟第二插件檢測(cè)公式保護(hù)列表中是否存在記錄密文,所述公式保護(hù)列表為預(yù)先在Excel 文檔中創(chuàng)建的隱藏工作表,或者,存儲(chǔ)在加密鎖中的工作表;如果所述公式保護(hù)列表中存在記錄密文,所述加密鎖獲取所述記錄密文,對(duì)所述記錄密文進(jìn)行解密,得到記錄明文,解析所述記錄明文中的公式,得到所述公式包含的單元格地址,將所述單元格地址發(fā)送給所述第二插件;所述第二插件從所述Excel文檔中獲取存儲(chǔ)于所述單元格地址的數(shù)據(jù),將公式運(yùn)算所需的全部數(shù)據(jù)發(fā)送給所述加密鎖;所述加密鎖根據(jù)所述公式運(yùn)算所需的全部數(shù)據(jù)和所述記錄明文中的公式進(jìn)行計(jì)算,將計(jì)算結(jié)果以及與所述計(jì)算結(jié)果相對(duì)應(yīng)的單元格的地址發(fā)送給所述第二插件,清除所述記錄明文;所述第二插件根據(jù)與所述計(jì)算結(jié)果相對(duì)應(yīng)的單元格的地址,將所述計(jì)算結(jié)果填寫到與所述計(jì)算結(jié)果相對(duì)應(yīng)的單元格中;如果所述公式保護(hù)列表中不存在記錄密文,則結(jié)束流程。
10.如權(quán)利要求9所述的方法,其特征在于,所述第二插件將公式運(yùn)算所需的全部數(shù)據(jù)發(fā)送給所述加密鎖之前,還包括所述第二插件判斷是否成功獲取到所述公式包含的所有單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù);所述第二插件將公式運(yùn)算所需的全部數(shù)據(jù)發(fā)送給所述加密鎖,具體為當(dāng)成功獲取到所述公式包含的所有單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)時(shí),所述第二插件將所述數(shù)據(jù)發(fā)送給所述加密鎖;或者,當(dāng)未成功獲取到所述公式包含的任一單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)時(shí),所述第二插件將未成功獲取到的數(shù)據(jù)賦值為預(yù)設(shè)值,將賦值后的數(shù)據(jù)發(fā)送給所述加密鎖;或者,當(dāng)成功獲取到所述公式包含的部分單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)時(shí),所述第二插件將未成功獲取到的數(shù)據(jù)賦值為預(yù)設(shè)值,將獲取的數(shù)據(jù)和賦值后的數(shù)據(jù)發(fā)送給所述加密鎖。
11.如權(quán)利要求10所述的方法,其特征在于,所述第二插件判斷是否成功獲取到所述公式包含的所有單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù),具體包括所述第二插件檢測(cè)所述公式包含的單元格地址對(duì)應(yīng)的單元格若所述公式包含的單元格地址對(duì)應(yīng)的單元格中每一單元格的value屬性和text屬性中至少一個(gè)屬性不為O,則判斷成功獲取到所述公式包含的所有單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù);·若所述公式包含的單元格地址對(duì)應(yīng)的單元格中每一單元格的value屬性和text屬性均為0,則判斷未成功獲取到所述公式包含的任一單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù);若所述公式包含的單元格地址對(duì)應(yīng)的單元格中部分單元格的value屬性和text屬性中至少一個(gè)屬性不為0,部分單元格的value屬性和text屬性均為0,則判斷成功獲取到所述公式包含的部分單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)。
12.如權(quán)利要求9所述的方法,其特征在于,所述記錄密文,具體為所述公式保護(hù)列表中與指定單元格地址對(duì)應(yīng)的記錄密文;所述第二插件將計(jì)算結(jié)果填寫到所述Excel文檔的相應(yīng)的單元格中,具體為所述第二插件將所述計(jì)算結(jié)果填寫到所述指定單元格地址。
13.如權(quán)利要求9所述的方法,其特征在于,還包括所述第一插件檢測(cè)所述公式保護(hù)列表中是否存在未加密的公式記錄;如果存在,則所述第一插件讀取所述公式記錄,對(duì)所述公式記錄進(jìn)行加密,生成記錄密文,清除所述公式記錄,將所述記錄密文寫入所述公式保護(hù)列表;如果不存在,則結(jié)束流程。
14.如權(quán)利要求13所述的方法,其特征在于,還包括所述第一插件判斷所述Excel文檔中是否存在被選定的單元格;如果存在,則所述第一插件獲取所述被選定的單元格的信息,根據(jù)獲取到的信息生成相應(yīng)的公式記錄,將生成的公式記錄添加到所述公式保護(hù)列表中,清除所述被選定的單元格的formula屬性,所述信息為所述被選定的單元格的地址和所述被選定的單元格中的公式;如果不存在,則結(jié)束流程。
15.一種Excel文檔的保護(hù)裝置,其特征在于,包括檢測(cè)模塊,用于檢測(cè)公式保護(hù)列表中是否存在記錄密文,所述公式保護(hù)列表為預(yù)先在 Excel文檔中創(chuàng)建的隱藏工作表,或者,存儲(chǔ)在加密鎖中的工作表;獲取模塊,用于在所述檢測(cè)模塊檢測(cè)到所述公式保護(hù)列表中存在記錄密文時(shí),從所述公式保護(hù)列表中讀取所述記錄密文,獲取根據(jù)所述記錄密文解密得到的記錄明文;計(jì)算模塊,用于根據(jù)所述記錄明文中的公式進(jìn)行計(jì)算;填寫模塊,用于將所述計(jì)算模塊計(jì)算得到的計(jì)算結(jié)果填寫到所述Excel文檔的相應(yīng)的單元格中。
16.如權(quán)利要求15所述的裝置,其特征在于,所述計(jì)算模塊,具體用于解析所述記錄明文,并將記錄明文中的公式賦值給所述Excel 文檔的相應(yīng)的單元格的formula屬性,調(diào)用所述單元格的calculate方法進(jìn)行計(jì)算;所述裝置,還包括清空模塊,用于清空所述單元格的formula屬性。
17.如權(quán)利要求15所述的裝置,其特征在于,還包括解析模塊,用于解析所述記錄明文中的公式,得到所述公式包含的單元格地址,從所述 Excel文檔中獲取存儲(chǔ)于所述單元格地址的數(shù)據(jù);清除模塊,用于清除所述記錄明文。
18.如權(quán)利要求17所述的裝置,其特征在于,還包括判斷模塊,用于判斷是否成功獲取到所述公式包含的所有單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù);所述計(jì)算模塊,具體用于在所述判斷模塊判斷成功獲取到所述公式包含的所有單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)時(shí),根據(jù)獲取的數(shù)據(jù)和所述記錄明文中的公式進(jìn)行計(jì)算;或者,在所述判斷模塊判斷未成功獲取到所述公式包含的單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)時(shí),將未成功獲取到的數(shù)據(jù)賦值為預(yù)設(shè)值,根據(jù)賦值后的數(shù)據(jù)和所述記錄明文中的公式進(jìn)行計(jì)算;或者,在所述判斷模塊判斷成功獲取到所述公式包含的部分單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)時(shí),將未成功獲取到的數(shù)據(jù)賦值為預(yù)設(shè)值,根據(jù)獲取的數(shù)據(jù)、賦值后的數(shù)據(jù)和所述記錄明文中的公式進(jìn)行計(jì)算。
19.如權(quán)利要求18所述的裝置,其特征在于,所述判斷模塊,具體用于檢測(cè)所述公式包含的單元格地址對(duì)應(yīng)的單元格若所述公式包含的單元格地址對(duì)應(yīng)的單元格中每一單元格的value屬性和text屬性中至少一個(gè)屬性不為0,則判斷成功獲取到所述公式包含的所有單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù);若所述公式包含的單元格地址對(duì)應(yīng)的單元格中每一單元格的value屬性和text屬性均為0,則判斷未成功獲取到所述公式包含的任一單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù);若所述公式包含的單元格地址對(duì)應(yīng)的單元格中部分單元格的value屬性和text屬性中至少一個(gè)屬性不為0,部分單元格的value屬性和text屬性均為0,則判斷成功獲取到所述公式包含的部分單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)。
20.如權(quán)利要求15所述的裝置,其特征在于,所述記錄密文,具體為所述公式保護(hù)列表中與指定單元格地址對(duì)應(yīng)的記錄密文;所述填寫模塊,具體用于將所述計(jì)算結(jié)果填寫到所述指定單元格地址對(duì)應(yīng)的單元格中。
21.—種Excel文檔的保護(hù)系統(tǒng),包括第二插件和加密鎖,其特征在于,所述第二插件,用于檢測(cè)公式保護(hù)列表中是否存在記錄密文,所述公式保護(hù)列表為預(yù)先在Excel文檔中創(chuàng)建的隱藏工作表,或者,存儲(chǔ)在加密鎖中的工作表;接收來(lái)自所述加密鎖的單元格地址,從所述Excel文檔中獲取存儲(chǔ)于所述單元格地址的數(shù)據(jù),將公式運(yùn)算所需的全部數(shù)據(jù)發(fā)送給所述加密鎖;接收來(lái)自加密鎖的計(jì)算結(jié)果以及與所述計(jì)算結(jié)果相對(duì)應(yīng)的單元格的地址,根據(jù)與所述計(jì)算結(jié)果相對(duì)應(yīng)的單元格的地址,將所述計(jì)算結(jié)果填寫到與所述計(jì)算結(jié)果相對(duì)應(yīng)的單元格中;所述加密鎖,用于在所述公式保護(hù)列表中存在記錄密文時(shí),獲取所述記錄密文,對(duì)所述記錄密文進(jìn)行解密,得到記錄明文,解析所述記錄明文中的公式,得到所述公式包含的單元格地址,將所述單元格地址發(fā)送給所述第二插件;根據(jù)所述公式運(yùn)算所需的全部數(shù)據(jù)和所述記錄明文中的公式進(jìn)行計(jì)算,將計(jì)算結(jié)果以及與所述計(jì)算結(jié)果相對(duì)應(yīng)的單元格的地址發(fā)送給所述第二插件,清除所述記錄明文。
22.如權(quán)利要求21所述的系統(tǒng),其特征在于, 所述第二插件,具體用于判斷是否成功獲取到所述公式包含的所有單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù);當(dāng)成功獲取到所述公式包含的所有單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)時(shí),將所述數(shù)據(jù)發(fā)送給所述加密鎖;或者,當(dāng)未成功獲取到所述公式包含的單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)時(shí),將未成功獲取到的數(shù)據(jù)賦值為預(yù)設(shè)值,將賦值后的數(shù)據(jù)發(fā)送給所述加密鎖;或者,當(dāng)成功獲取到所述公式包含的部分單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)時(shí),將未成功獲取到的數(shù)據(jù)賦值為預(yù)設(shè)值,將獲取的數(shù)據(jù)和賦值后的數(shù)據(jù)發(fā)送給所述加密鎖。
23.如權(quán)利要求22所述的系統(tǒng),其特征在于,所述第二插件,具體用于檢測(cè)所述公式包含的單元格地址對(duì)應(yīng)的單元格若所述公式包含的單元格地址對(duì)應(yīng)的單元格中每一單元格的value屬性和text屬性中至少一個(gè)屬性不為O,則判斷成功獲取到所述公式包含的所有單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù);若所述公式包含的單元格地址對(duì)應(yīng)的單元格中每一單元格的value屬性和text屬性均為O,則判斷未成功獲取到所述公式包含的任一單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù);若所述公式包含的單元格地址對(duì)應(yīng)的單元格中部分單元格的value屬性和text屬性中至少一個(gè)屬性不為O,部分單元格的value屬性和text屬性均為O,則判斷成功獲取到所述公式包含的部分單元格地址對(duì)應(yīng)的單元格中的數(shù)據(jù)。
24.如權(quán)利要求21所述的系統(tǒng),其特征在于,所述記錄密文,具體為所述公式保護(hù)列表中與指定單元格地址對(duì)應(yīng)的記錄密文; 所述第二插件,具體用于將所述計(jì)算結(jié)果填寫到所述指定單元格地址對(duì)應(yīng)的單元格中。
25.如權(quán)利要求21所述的系統(tǒng),其特征在于,還包括第一插件,用于檢測(cè)所述公式保護(hù)列表中是否存在未加密的公式記錄,當(dāng)存在未加密的公式記錄時(shí),讀取所述公式記錄,對(duì)所述公式記錄進(jìn)行加密,生成記錄密文,清除所述公式記錄,將所述記錄密文寫入所述公式保護(hù)列表。
26.如權(quán)利要求25所述的系統(tǒng),其特征在于,所述第一插件,還用于判斷所述Excel文檔中是否存在被選定的單元格,在存在被選定的單元格時(shí),獲取所述被選定的單元格的信息,根據(jù)獲取到的信息生成相應(yīng)的公式記錄, 將生成的公式記錄添加到所述公式保護(hù)列表中,清除所述被選定的單元格的formula屬性,所述信息為所述被選定的單元格的地址和所述被選定的單元格中的公式。
全文摘要
本發(fā)明公開一種Excel文檔的保護(hù)方法,涉及信息安全領(lǐng)域,所述方法包括第二插件檢測(cè)公式保護(hù)列表中是否存在記錄密文,所述公式保護(hù)列表為預(yù)先在Excel文檔中創(chuàng)建的隱藏工作表,或者,存儲(chǔ)在加密鎖中的工作表;如果所述公式保護(hù)列表中存在記錄密文,則所述第二插件從所述公式保護(hù)列表中讀取所述記錄密文,獲取根據(jù)所述記錄密文解密得到的記錄明文;所述第二插件根據(jù)所述記錄明文中的公式進(jìn)行計(jì)算,將計(jì)算結(jié)果填寫到所述Excel文檔的相應(yīng)的單元格中;如果所述公式保護(hù)列表中不存在記錄密文,則結(jié)束流程。
文檔編號(hào)G06F21/24GK102722682SQ201210134550
公開日2012年10月10日 申請(qǐng)日期2012年4月28日 優(yōu)先權(quán)日2012年4月28日
發(fā)明者于華章, 陸舟 申請(qǐng)人:飛天誠(chéng)信科技股份有限公司