给定Excel(*。xls,*。xlsx,* .xlsm)文件,是否可以读取其属性并查明是否有任何工作表受到保护,或者是否有任何单元格具有自定义属性。< / p>
我无法找到用于此目的的图书馆。
我需要知道这些信息,以便在此基础上我可以决定使用Office Web Apps显示Excel文件的预览。
答案 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