Анализ данных с листа xlsx возвращает неверные данные (Open XML SDK) - PullRequest
0 голосов
/ 24 января 2020

Я использовал пример кода с веб-сайта (Open XML SDK), и он открывает файл и читает данные, но возвращает обратные значения, но они не являются значениями в ячейках. Я приложил свой код и ссылку на образец файла xlsx.

https://file-examples.com/wp-content/uploads/2017/02/file_example_XLSX_10.xlsx

Private Sub ReadExcelFileDOM(ByVal fileName As String)
        Using spreadsheetDocument As SpreadsheetDocument = SpreadsheetDocument.Open(fileName, False)
            Dim workbookPart As WorkbookPart = spreadsheetDocument.WorkbookPart
            Dim worksheetPart As WorksheetPart = workbookPart.WorksheetParts.First()
            Dim sheetData As SheetData = worksheetPart.Worksheet.Elements(Of SheetData)().First()
            Dim text As String
            For Each r As Row In sheetData.Elements(Of Row)()
                For Each c As Cell In r.Elements(Of Cell)()
                    text = c.CellValue.Text
                    Console.Write(text & " ")
                Next
            Next
            Console.WriteLine()
            Console.ReadKey()
        End Using
    End Sub

1 Ответ

0 голосов
/ 25 января 2020

Аналогичный вопрос был задан здесь: Получите проблему значения ячейки с открытым xml sdk

И в вашем случае вот решение:

В ссылка , которую вы предоставили, у вас есть комментарий в коде:

// Note that the code below works only for cells that contain numeric values.

И ваш пример файла содержит строковые значения. Если вы хотите получить ненулевое значение c, вам следует использовать SharedStringTable - Работа с SharedStringTable .

Вы должны добавить оператор if / switch в ваш код, здесь у вас есть пример, основанный на этой статье :

If c.DataType.Value == Excel.CellValues.SharedString Then
   Dim stringTable As SharedStringTable = workbookPart.GetPartsOfType<SharedStringTablePart>().FirstOrDefault().SharedStringTable
   text = stringTable.ElementAt(int.Parse(c.InnerText)).InnerText
...