检查Excel文件是否具有“表格保护”或“单元格中的自定义属性”

给定一个Excel(* .xls,* .xlsx,* .xlsm)文件,是否可以读取其属性,并查明是否有任何工作表受到保护,或者是否有任何单元格具有自定义属性。

我无法find哪个库用于这个目的。

我需要知道这些信息,然后才能决定使用Office Web Apps显示Excel文件的预览。

您可以使用Open XML SDK分析和修改现代“Open XML”(* .xlsx)格式。

下面是如何找出表单是否受保护的示例:

using System.Linq; using System.Collections.Generic; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadsheet; class Test { static void Main() { string filePath = @"C:\MyProtectedSheet.xlsx"; using (var spreadSheetDocument = SpreadsheetDocument.Open(filePath, true)) { var workbookPart = spreadSheetDocument.WorkbookPart; var sheets = spreadSheetDocument.WorkbookPart.Workbook.GetFirstChild<Sheets>().Elements<Sheet>(); string relationshipId = sheets.First().Id.Value; var worksheetPart = (WorksheetPart)spreadSheetDocument.WorkbookPart.GetPartById(relationshipId); var workSheet = worksheetPart.Worksheet; var protections = worksheet.Elements<SheetProtection>(); if(protections.Any())) { Console.WriteLine("Sheet is protected."); } } } } 

使用SDK查找定制的属性也是可能的。 我build议你用OpenXML SDK Productivity Tool (SDK的一部分)打开一个最小的示例文件,并find相关的标签/属性。 然后,您可以按照上面的示例中的模式并尝试在文档树中find它们。

处理像*.xls这样的传统格式要困难得多。 您可以使用COM自动化来查找有关保护的信息,但是需要在您的代码应运行的计算机上安装Excel。 或者,您可以诉诸像Apose Cells这样的商业第三方组件。

尝试使用Microsoft.Office.Interop.Excel

 using Excel = Microsoft.Office.Interop.Excel; 

然后打开一个文件,并获得一个范围(file.range)。 在

 range.locked 

你可以find,如果单元格被locking。 还有其他成员可能是有用的:

https://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.range_members(VS.80).aspx