Удаление защиты листа OpenXMLC#

Место общения программистов C#
Ответить
Anonymous
 Удаление защиты листа OpenXML

Сообщение Anonymous »

Я столкнулся со странным поведением API OpenXML.
Мне нужно написать простое приложение для Lock, < em>Разблокировать и Проверить (если заблокировано/разблокировано) листы Excel.
Я использую этот код для блокировки:

Код: Выделить всё

    using (SpreadsheetDocument document = SpreadsheetDocument.Open(report, true))
{
foreach (var part in document.WorkbookPart.WorksheetParts)
{
SheetProtection protection = new SheetProtection()
{
Sheet = true,
Objects = true,
Scenarios = true,
Password = hexKey
};

part.Worksheet.InsertAfter(protection, part.Worksheet.Descendants().LastOrDefault());
part.Worksheet.Save();
}
}
чтобы разблокировать:

Код: Выделить всё

    using (SpreadsheetDocument document = SpreadsheetDocument.Open(report, true))
{
foreach (var part in document.WorkbookPart.WorksheetParts)
{
part.Worksheet.RemoveAllChildren();
part.Worksheet.Save();
}
}
и это нужно проверить:

Код: Выделить всё

    try
{
using (SpreadsheetDocument document = SpreadsheetDocument.Open(report, false))
{
foreach (var part in document.WorkbookPart.WorksheetParts)
{
var protections = part.Worksheet.Elements();

if (protections.Any())
return Protection.Locked;
}
}
}
catch (System.IO.FileFormatException)
{
return Protection.Crypted;
}

return Protection.Unlocked;
Он отлично работает для того объема тестов, который я провел, за исключением одного случая (когда он работает частично, но я не понимаю почему):
Я создал файл Excel с помощью внешнего приложения, которое имеет аналогичную функцию для блокировки файла (NI LabView / NI Report Toolkit для Microsoft Office ).
Если я проверю файл, я найду его заблокированным, а если я попытаюсь его разблокировать, функция сработает успешно, и последующие проверки вернут его как разблокированный.
Но если я попытаюсь открыть файл с помощью Excel, мне придется спрашивать пароль.
Я также пытался распаковать Excel. em> после его разблокировки, и ни один из подфайлов не содержит тег SheetProtection, который должен отвечать за функцию защиты листа, отображаемую в Excel.
Итак... чего мне не хватает?
Ссылка на файл Excel (пароль Excel).
Вот полный репозиторий кода.< /п>

Подробнее здесь: https://stackoverflow.com/questions/790 ... on-removal
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»