首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

OpenXml获取被保护Sheet的密码并革除保护

2013-01-23 
OpenXml获取被保护Sheet的密码并解除保护using Systemusing System.Collections.Genericusing System.Li

OpenXml获取被保护Sheet的密码并解除保护

using System;using System.Collections.Generic;using System.Linq;using System.Text;using DocumentFormat.OpenXml.Spreadsheet;using com.mksword.Net.OpenXmlTools;using com.mksword.OpenXmlUtil_log4netTool;using DocumentFormat.OpenXml.Packaging;namespace ConsoleApplication5{    class Class1 : ExcelTool    {        public override void Action()        {            if (_Core.HandOpenSpreadsheetDocumentOnLoacl(UnProtectCell, true))            {                SetLog("UnProcted", OXULogType.INFO);            }            else            {                SetLog("Operation Failed", OXULogType.FATAL);            }        }        private bool UnProtectCell(SpreadsheetDocument SSD)        {            bool result = false;            WorkbookPart WBP = SSD.WorkbookPart;            Workbook WB = WBP.Workbook;            Sheet S = WB.Descendants<Sheet>().Where(SH => SH.Name == "Sheet1")                .FirstOrDefault();            if (S != null)            {                WorksheetPart WSP = WBP.GetPartById(S.Id) as WorksheetPart;                Worksheet WS = WSP.Worksheet;                SheetProtection SP = WS.Descendants<SheetProtection>()                    .FirstOrDefault();                if (SP != null)                {                    SetLog(SP.Password.Value, OXULogType.FATAL);                    SP.Remove();                    WS.Save();                    result = true;                }                else                    SetLog("SheetProtection in NULL", OXULogType.FATAL);            }            else                SetLog("Sheet is NULL", OXULogType.FATAL);            return result;        }        public String GetSheetPassword(String password)        {            Int32 pLength = password.Length;            Int32 hash = 0;            if (pLength == 0) return hash.ToString("X");            for (Int32 i = pLength - 1; i >= 0; i--)            {                hash = hash >> 14 & 0x01 | hash << 1 & 0x7fff;                hash ^= password[i];            }            hash = hash >> 14 & 0x01 | hash << 1 & 0x7fff;            hash ^= 0x8000 | 'N' << 8 | 'K';            hash ^= pLength;            return hash.ToString("X");        }    }}

热点排行