私のコードは OpenXML スプレッドシートを生成します。操作の変更や削除から保護したいと考えています。私の解決策はうまくいっているようですが、Excelで開くと、「レビュー」パネルで「保護解除」ボタンを押すことができ、Excelはパスワードを要求せずに選択したシートの保護を解除します。どうすればこれを回避できますか?
String password = Guid.NewGuid().ToString().Replace("-", string.Empty).Substring(0, 16);
using (SpreadsheetDocument excelDoc = SpreadsheetDocument.Open(input, true))
{
foreach (WorksheetPart worksheetPart in excelDoc.WorkbookPart.WorksheetParts)
{
SheetProtection sp = new SheetProtection()
{
Sheet = true,
SelectLockedCells = false,
SelectUnlockedCells = false,
Password = password,
Objects = true,
Scenarios = true,
// AlgorithmName = "SHA-256"
};
foreach (OpenXmlElement currentChildElement in worksheetPart.Worksheet.ChildElements)
{
if (currentChildElement is SheetData)
{
worksheetPart.Worksheet.InsertAfter(sp, currentChildElement);
worksheetPart.Worksheet.Save();
}
}
}