TestWorksheetProtection.zip (15.8 KB)
Attached is a zip of 3 files:
- Excel document before changes (TestProtection-Before.xlsx)
- Excel document after changes (TestProtection-After.xlsx)
- JSON the browser sends to my server to be converted to an excel document using Syncfusion
The worksheet password is “testing”
After I load the “after” excel document to a filestream, I send it to the following method to grab the “before” workbook and copy the protection settings:
private async Task<Result<FileStreamResult>> RestoreWorksheetProtection(FileStreamResult currentVersion, Aspose.Cells.SaveFormat saveFormat)
{
//Get the previous excel file version to compare worksheet protection and re-apply
Result<TempFileDTO> previousVersionResult = await GetSpreadsheetAsync("C:\Temp\TestProtection-Before.xlsx");
if (previousVersionResult.HasErrors)
return new Result<FileStreamResult>(previousVersionResult.Errors.ToArray());
try
{
Stream prevVersion;
if (previousVersionResult.Value.InMemory)
prevVersion = new MemoryStream(previousVersionResult.Value.Data);
else
prevVersion = new FileStream(previousVersionResult.Value.TempFullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite, 81920, FileOptions.DeleteOnClose);
currentVersion.FileStream = AsposeHelper.RestoreWorksheetProtection(prevVersion, currentVersion.FileStream, saveFormat);
prevVersion.Close();
return new Result<FileStreamResult>(currentVersion);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
internal static Stream RestoreWorksheetProtection(Stream prevVersion, Stream currentVersion, Aspose.Cells.SaveFormat saveFormat)
{
Workbook prevWorkbook = new Workbook(prevVersion);
Workbook currentWorkbook = new Workbook(currentVersion);
bool changesMade = false;
foreach (Worksheet currentWorksheet in currentWorkbook.Worksheets)
{
Worksheet prevWorksheet = prevWorkbook.Worksheets[currentWorksheet.Name];
if (prevWorksheet != null)
{
currentWorksheet.Protection.Copy(prevWorksheet.Protection);
changesMade = true;
}
}
if (changesMade)
{
currentWorkbook.Save(currentVersion, saveFormat);
currentVersion.Position = 0;
}
return currentVersion;
}