使用openXML读取C#中的excel单元格validation下拉值

我正在编写一个C#控制台应用程序,它将使用OpenXML从Excel电子表格中读取值并创build一个DataTable。 该应用程序能够读取除包含下拉列表的单元格之外的所有值。 有没有办法让OpenXML读取这些单元格,并确定select哪个值? 任何build议,非常感谢。 提前致谢。

当前代码:

public static string GetValue(Cell cell, SharedStringTablePart stringTablePart) { if (cell.ChildElements.Count == 0) return null; //get cell value string value = cell.ElementAt(0).InnerText;//CellValue.InnerText; //Look up real value from shared string table if ((cell.DataType != null) && (cell.DataType == CellValues.SharedString)) value = stringTablePart.SharedStringTable.ChildElements[Int32.Parse(value)].InnerText; return value; } public static void ReadData(string xlsxFilePath, string sheetName) { DataTable dt = new DataTable(); using (SpreadsheetDocument myWorkbook = SpreadsheetDocument.Open(xlsxFilePath, true)) { //Access the main Workbook part, which contains data WorkbookPart workbookPart = myWorkbook.WorkbookPart; WorksheetPart worksheetPart = null; if (!string.IsNullOrEmpty(sheetName)) { Sheet ss = workbookPart.Workbook.Descendants<Sheet>().Where(s => s.Name == sheetName).SingleOrDefault<Sheet>(); worksheetPart = (WorksheetPart)workbookPart.GetPartById(ss.Id); } else { worksheetPart = workbookPart.WorksheetParts.FirstOrDefault(); } SharedStringTablePart stringTablePart = workbookPart.SharedStringTablePart; if (worksheetPart != null) { Row lastRow = worksheetPart.Worksheet.Descendants<Row>().LastOrDefault(); IEnumerable<Row> firstRows = worksheetPart.Worksheet.Descendants<Row>().Skip(10); Row firstRow = firstRows.FirstOrDefault(); int numColumns = 0; //Row firstRow = worksheetPart.Worksheet.Descendants<Row>().FirstOrDefault(); if (firstRow != null) { foreach (Cell c in firstRow.ChildElements) { string value = GetValue(c, stringTablePart); dt.Columns.Add(value); numColumns++; } } if (lastRow != null) { for (int i = 11; i <= lastRow.RowIndex; i++) { DataRow dr = dt.NewRow(); bool empty = true; Row row = worksheetPart.Worksheet.Descendants<Row>() .Where(r => i == r.RowIndex).FirstOrDefault(); int j = 0; if (row != null) { foreach (Cell c in row.ChildElements) { //Get cell value string value = GetValue(c, stringTablePart); if (string.IsNullOrEmpty(value) && value == " ") dr[j] = ""; //if (!string.IsNullOrEmpty(value) && value != " ") // empty = false; else dr[j] = value; Console.Write(dr[j] + "\t"); j++; if (j == numColumns-1) { Console.Write("\n"); break; } } //if (empty) // break; dt.Rows.Add(dr); } } } } } }