Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查Excel文件是否具有“工作表保护”或“单元格中自定义的属性”_C#_Excel - Fatal编程技术网

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

C# 检查Excel文件是否具有“工作表保护”或“单元格中自定义的属性”,c#,excel,C#,Excel,给定Excel*.xls、*.xlsx、*.xlsm文件,是否可以读取其属性并确定是否有任何工作表受到保护,或者是否有任何单元格具有自定义定义的属性 我找不到用于此目的的图书馆 我需要知道这些信息,以便根据这些信息,我可以决定使用Office Web Apps显示Excel文件的预览。尝试使用Microsoft.Office.Interop.Excel using Excel = Microsoft.Office.Interop.Excel; 然后打开一个文件并使用file.range获取一个

给定Excel*.xls、*.xlsx、*.xlsm文件,是否可以读取其属性并确定是否有任何工作表受到保护,或者是否有任何单元格具有自定义定义的属性

我找不到用于此目的的图书馆


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

尝试使用Microsoft.Office.Interop.Excel

using Excel = Microsoft.Office.Interop.Excel;
然后打开一个文件并使用file.range获取一个范围。在

range.locked 
如果单元格被锁定,您可以找到。还有其他一些成员可能很有用:


您可以使用分析和修改现代开放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查找自定义定义的属性。我建议您使用OpenXMLSDK生产力工具打开一个最小的示例文件 作为SDK的一部分,并查找相关标记/属性。然后,您可以按照上面示例中的模式,尝试在文档树中找到它们

处理*.xls这样的遗留格式要困难得多。您可以使用COM自动化来了解有关保护的信息,但这需要在您的代码应该运行的计算机上安装Excel。或者,您可以求助于商业第三方组件,如