Вопрос по passwords, excel, protection, openxml – Защита паролем файла Excel с помощью Open XML SDK

1

Я использую Open XML SDK для создания файлов Excel.

Я хочу защитить их паролем.

Знаете ли вы в любом случае для защиты файла Excel с помощью пароля с помощью Open XML SDK?

Я знаю "ком» Объектный способ защитить их, однако, не подходит для моего приложения. Мне нужно защитить файл с помощью Open XML SDK или другим способом.

Ваш Ответ

1   ответ
4

Создание пароля Excel для защиты книги или листа возможно с помощью открытого XML.

Следующие примеры кода являются предложениями Винсента (http://spreadsheetlight.com/about/) (https://stackoverflow.com/users/12984/vincent-tan) (еще раз большое ему спасибо :)

        using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(docname,true))
        {
            foreach (var worksheet in spreadSheet.WorkbookPart.WorksheetParts)
           {
                worksheet.Worksheet.Append(new SheetProtection(){ Password = “CC”});
               // add this in case it still doesn’t work. This makes sure the data is saved.
               //worksheet.Worksheet.Save();
           }
        }

Если у вас есть диаграмма или что-то

Следующие примеры кода являются предложениями Винсента (http://spreadsheetlight.com/about/) (https://stackoverflow.com/users/12984/vincent-tan) (еще раз большое ему спасибо :)

bool bFound;
OpenXmlElement oxe;
SheetProtection prot;
using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open("OtoPark.xlsx", true))
{
    foreach (var worksheet in spreadSheet.WorkbookPart.WorksheetParts)
    {
        prot = new SheetProtection();
        prot.Password = "CC";
        // these are the "default" Excel settings when you do a normal protect
        prot.Sheet = true;
        prot.Objects = true;
        prot.Scenarios = true;

        // Open up Excel and do a password protect yourself and use the
        // Productivity Tool to see the property values of the resulting Excel file.
        // Consider not using the Password property and use:
        //prot.AlgorithmName = "SHA-512";
        //prot.HashValue = "somehashvaluebythealgorithm";
        //prot.SaltValue = "somesalt";
        //prot.SpinCount = 100000;

        bFound = false;
        oxe = worksheet.Worksheet.FirstChild;
        foreach (var child in worksheet.Worksheet.ChildElements)
        {
            // start with SheetData because it's a required child element
            if (child is SheetData || child is SheetCalculationProperties)
            {
                oxe = child;
                bFound = true;
            }
        }

        if (bFound)
        {
            worksheet.Worksheet.InsertAfter(prot, oxe);
        }
        else
        {
            worksheet.Worksheet.PrependChild(prot);
        }

        worksheet.Worksheet.Save();
    }
}

Эти методы обеспечивают защиту от случайного изменения данных любым пользователем. Тем не менее, если вы не хотите, чтобы пользователь, который неЕсли вы не знаете пароль, вы можете использовать следующую библиотеку:

http://dotnetzip.codeplex.com/

У вас есть защищенный паролем заархивированный файл, содержащий ваш файл excel.xlsx с помощью библиотеки dotnetzip.

Пример:

public void RNCreateZipFile(string ExcelDocName,string PassWord, string ZipDocName)
{
    // create a zip
    using (var zip = new ZipFile())
    {
        zip.Password = PassWord;
        zip.AddFile(ExcelDocName, "");
        zip.Save(ZipDocName);
    }
}

Похожие вопросы