OpenXML: Как получить список проверенных флажков в листе Excel?

Я пытаюсь прочитать документ Excel, чтобы получить список проверенных флажков.

  • Я нашел решение здесь для определения флажков в документах Word с помощью OpenXML, но не смог повторно использовать это для флажков в Excel. Кажется, что класс CheckBox зарезервирован для документов WordProcessing, а не для Excel.

Код ниже показывает список всех флажков, но независимо от того, что я делаю, я не могу получить доступ к их значению. Есть идеи?

Код C #:

using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(@"C:\test.xlsx", false)) { WorkbookPart workBookPart = spreadsheetDocument.WorkbookPart; foreach (Sheet s in workBookPart.Workbook.Descendants<Sheet>()) { if (s.Name.ToString().Equals("Sheet1")) { WorksheetPart wsPart = workBookPart.GetPartById(s.Id) as WorksheetPart; foreach (DocumentFormat.OpenXml.Spreadsheet.Control cb in wsPart.Worksheet.Descendants<DocumentFormat.OpenXml.Spreadsheet.Control>()) { if (cb.Name.ToString().IndexOf("CheckBox") > -1) { textBox1.AppendText(cb.Name + "\n"); } } } } } 

ОБНОВИТЬ:

Оказывается, мы используем элементы управления Active X. Следующий код способен правильно определять флажки, очень малоэффективное решение, но не используя OpenXML:

 var xlApp = new Excel.Application(); var xlWorkbook = xlApp.Workbooks.Open(xlFileName); var xlSheet = xlWorkbook.Worksheets["Sheet1"] as Excel.Worksheet; StringBuilder x = new StringBuilder(); try { Excel.OLEObjects oleObjects = xlSheet.OLEObjects() as Excel.OLEObjects; foreach (Excel.OLEObject item in oleObjects) { if (item.progID == "Forms.CheckBox.1") { VBE.CheckBox xlCB = item.Object as VBE.CheckBox; if (xlCB.get_Value()) x.Append(item.Name + ": checked"); else x.Append(item.Name + ": not checked"); Marshal.ReleaseComObject(xlCB); xlCB = null; } } Marshal.ReleaseComObject(oleObjects); oleObjects = null; } catch (Exception ex){ } Marshal.ReleaseComObject(xlSheet); xlSheet = null; xlWorkbook.Close(false, Missing.Value, Missing.Value); Marshal.ReleaseComObject(xlWorkbook); xlWorkbook = null; if (xlApp != null) xlApp.Quit(); Marshal.ReleaseComObject(xlApp); xlApp = null; 

Какие-нибудь дополнительные предложения?

Предполагая, что вы используете Form Controls CheckBox, что-то в этих строках должно помочь:

 //s is the Sheet WorksheetPart wsPart = workBookPart.GetPartById(s.Id) as WorksheetPart; foreach (var control in wsPart.ControlPropertiesParts) { string ctrlId = wsPart.GetIdOfPart(control); Console.Write("Control Id: {0}", ctrlId); if (control.FormControlProperties.Checked != null) Console.Write("Checked"); Console.WriteLine(); } 

В отличие от MS Word, Excel имеет элементы управления формой и элементы Active X. Вы можете прочитать о различии здесь

  • Как сгенерировать образцы SpreasheetML для всех трех параметров совместимости дат из Excel 2010?
  • OpenXmlElement, как узнать его значение, - Date / DateTime
  • Open XML 2.5 извлекает информацию о стиле ячейки
  • openxml как читать inlineStr с помощью OpenXmlReader
  • кто добавит изображение в excel Heder и нижний колонтитул, используя PHP_XLSXWriter
  • OpenXML SDK (C #): копировать все комментарии из одной книги Excel в другую
  • Как добавить строку в Excel с помощью OpenXML SDK 2.0?
  • OpenXML C # - Что определяет имя «sheet.xml» в структуре открытых офисных файлов?
  • Как выводить таблицу Excel с изображениями из ASP.net
  • Как обновить внешние ссылки в Excel с помощью OpenXML
  • Как производительность Open XML SDK для чтения большого файла excel?
  • Interesting Posts

    Excel Webcraping

    Макрос для поиска по столбцу (пользовательский ввод) для определенных символов, затем поместить (ввод данных пользователя) в соседний столбец

    Используйте vba для копирования значения ячейки в другую ячейку

    возможно ли создать коллекцию массивов в vba?

    Создайте командную кнопку и назначьте ей событие в программе

    Диапазон дат для уникальных значений в Excel?

    Макро Объяснение

    excel копировать значение ячейки на новый лист, если столбец a = "x"

    Как разрешить только просмотр таблицы, но все остальные могут только пользовательские формы?

    Добавление HTML-тегов на основе шрифта не работает во всех ячейках

    Сохраните каждый рабочий лист из книги как отдельные pdf-файлы

    Excel VBA скрыть / показать / переместить форму

    Серии Excel Diagramm в VBA

    Как я могу найти / заменить несколько строк в XML-файле?

    Excel VBA записывает в файл для многомерных данных

    Давайте будем гением компьютера.