This module uses the DevExpress Spreadsheet API to securely load Excel documents with protection against potentially harmful content. You can process the predefined sample file or supply your own document. To do the latter, select Upload a File in the file selection drop-down menu.
Configure security constraints in the Security Settings section: set limits for the number of worksheets, rows per worksheet, cells per worksheet, and charts per document. In the Content Settings section, select content types to remove (ActiveX Content, Custom XML Parts, External Connections, External Workbooks, Macros, OLE Objects, Pivot Caches, Restricted Formulas, Restricted Links).
Use the Convert Document to dropdown button to select the output format, process the document, and download the result.
using DevExpress.Spreadsheet;
using DevExpress.Office;
Stream TryLoadDocument(Stream inputStream, WorkbookSecurityLoadingLimits securityLoadingLimits,
WorkbookSecurityLoadingOptions securityLoadingOptions, out string loadErrorMessage, DocumentFormat outputFormat) {
using var workbook = new Workbook();
var workbookSecurityLoadingOptions = workbook.Options.SecurityLoadingOptions;
workbookSecurityLoadingOptions.RemoveActiveXContent = securityLoadingOptions.RemoveActiveXContent;
workbookSecurityLoadingOptions.RemoveCustomXMLParts = securityLoadingOptions.RemoveCustomXMLParts;
workbookSecurityLoadingOptions.RemoveExternalConnections = securityLoadingOptions.RemoveExternalConnections;
workbookSecurityLoadingOptions.RemoveExternalWorkbooks = securityLoadingOptions.RemoveExternalWorkbooks;
workbookSecurityLoadingOptions.RemoveMacros = securityLoadingOptions.RemoveMacros;
workbookSecurityLoadingOptions.RemoveOleObjects = securityLoadingOptions.RemoveOleObjects;
workbookSecurityLoadingOptions.RemovePivotCaches = securityLoadingOptions.RemovePivotCaches;
workbookSecurityLoadingOptions.RemoveRestrictedFormulas = securityLoadingOptions.RemoveRestrictedFormulas;
workbookSecurityLoadingOptions.RemoveRestrictedLinks = securityLoadingOptions.RemoveRestrictedLinks;
var workbookSecurityLoadingLimits = workbook.Options.SecurityLoadingLimits;
workbookSecurityLoadingLimits.MaxChartCount = securityLoadingLimits.MaxChartCount;
workbookSecurityLoadingLimits.MaxFileSize = securityLoadingLimits.MaxFileSize;
workbookSecurityLoadingLimits.MaxSheetCellCount = securityLoadingLimits.MaxSheetCellCount;
workbookSecurityLoadingLimits.MaxSheetRowCount = securityLoadingLimits.MaxSheetRowCount;
workbookSecurityLoadingLimits.MaxWorksheetCount = securityLoadingLimits.MaxWorksheetCount;
workbookSecurityLoadingLimits.MaxXmlElementCount = securityLoadingLimits.MaxXmlElementCount;
workbookSecurityLoadingLimits.MaxXmlElementDepth = securityLoadingLimits.MaxXmlElementDepth;
workbook.SecurityLoadingLimitExceeded += (o, ea) => {
// Use the SecurityLoadingLimitExceeded event to log information about the security loading limits
// Set the "Handled" parameter to true to load a document even if it exceeds the specified limits
};
workbook.SecurityLoadingOptionsViolation += (o, ea) => {
// Use the SecurityLoadingOptionsViolation event to log information about the security loading options violation
// Set the "Handled" parameter to true to ignore the violation and load a document even if it contains unsafe content
};
loadErrorMessage = "";
try {
workbook.LoadDocument(inputStream);
// Save document
var outputStream = new MemoryStream();
workbook.SaveDocument(outputStream, outputFormat);
outputStream.Position = 0;
return outputStream;
}
catch(SecurityLoadingLimitExceededException limitExceededException) {
loadErrorMessage = limitExceededException.Message;
return new MemoryStream();
}
}