C# 检查Excel文件是否具有“工作表保护”或“单元格中自定义的属性”
给定Excel*.xls、*.xlsx、*.xlsm文件,是否可以读取其属性并确定是否有任何工作表受到保护,或者是否有任何单元格具有自定义定义的属性 我找不到用于此目的的图书馆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获取一个
我需要知道这些信息,以便根据这些信息,我可以决定使用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。或者,您可以求助于商业第三方组件,如