Проверьте, есть ли в файле Excel «Защита листа» или «Пользовательские определенные свойства в ячейках»

Учитывая файл Excel (*. Xls, * .xlsx, * .xlsm), можно ли прочитать его свойства и выяснить, защищены ли какие-либо из рабочих листов или какие из ячеек имеют пользовательские определенные свойства.

Я не смог найти, какую библиотеку использовать для этой цели.

Мне нужно знать эту информацию, поэтому на основе этого я могу решить показать Предварительный просмотр файла Excel с помощью Office Web Apps.

Вы можете анализировать и изменять современные форматы Open XML (* .xlsx) с помощью Open XML SDK .

Вот пример того, как узнать, защищен ли лист:

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 .

Попробуйте использовать 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

  • Экспорт DataGridView в Excel с использованием фильтров c #
  • Редактирование вставленного изображения в текстовом документе с использованием c # interop
  • Открыть файл excel для ручного издания и сохранения
  • Измените значения ячеек в файлах excel и скопируйте изменения в новый столбец с помощью c #
  • Обновите Excel, чтобы обновить сводную таблицу Epplus
  • Не удалось подключиться к SQL Server, но настройки Excel и ODBC могут
  • Почему добавление AutoFilter искажает мой файл excel в этом примере?
  • Так что я действительно не могу использовать Excel Object Model для использования на стороне сервера?
  • Написание листа распространения Excel в c ++
  • Открытие листа Excel с полным доступом в c #
  • Excel Interop Secondary AxisGroup появляется только иногда
  • Давайте будем гением компьютера.