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

时间:2015-04-15 09:04:27

标签: c# excel

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

我无法找到用于此目的的图书馆。

我需要知道这些信息,以便在此基础上我可以决定使用Office Web Apps显示Excel文件的预览。

2 个答案:

答案 0 :(得分:2)

您可以使用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也可以查找自定义属性。我建议您使用OpenXML SDK Productivity Tool (SDK的一部分)打开一个最小的示例文件,并找到相关的标签/属性。然后,您可以按照上面示例中的模式进行操作,并尝试在文档树中找到它们。

处理*.xls等遗留格式要困难得多。您可以使用COM自动化来了解保护,但这需要在您的代码应该运行的机器上安装Excel。或者,您可以使用Apose Cells等商业第三方组件。

答案 1 :(得分:1)

尝试使用Microsoft.Office.Interop.Excel

using Excel = Microsoft.Office.Interop.Excel;

然后打开一个文件并获取一个范围(带有file.range)。在

range.locked 

如果细胞被锁定,你可以找到。还有其他成员可能有用:

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