Я использую некоторый большой код, взятый из StackOverflow и преобразуется в VB NET в:Предотвращение чтения (OpenXMLReader SAX) лопнувшей струны Кусок каждые 1026 Символов
- Извлечение всех строк текста из всех speadsheets в первенствовать формате XLSX file
- Добавить каждую строку в StringBuilder.
Код работает очень хорошо, но мои записи строкостроителя разбиваются каждые 1026 символов. т.е. Текст читает ..выполняется является Sta
ckOverflow .. вместо
«..выполняется это StackOverflow ..» и расщепление при естественном разрыве строки.
Imports System.Text
Imports System.Linq
Imports DocumentFormat.OpenXml
Imports DocumentFormat.OpenXml.Packaging
Imports DocumentFormat.OpenXml.Spreadsheet
Public Class clsParseXLS
Public Shared Sub parseXLSX(strFileName As String, sbTxtFromFile As StringBuilder)
Dim intFirst As Integer = 1
Try
Using spreadsheetDocument__1 As SpreadsheetDocument = SpreadsheetDocument.Open(strFileName, False)
Dim workbookPart As WorkbookPart = spreadsheetDocument__1.WorkbookPart
For Each worksheetPart As WorksheetPart In workbookPart.WorksheetParts
Dim reader As OpenXmlReader = OpenXmlReader.Create(worksheetPart)
While reader.Read()
If reader.ElementType Is GetType(Row) Then
reader.ReadFirstChild()
Do
If reader.ElementType Is GetType(Cell) Then
Dim c As Cell = DirectCast(reader.LoadCurrentElement(), Cell)
If c.DataType IsNot Nothing AndAlso c.DataType.Value.ToString = "SharedString" Then
Dim ssi As SharedStringItem = workbookPart.SharedStringTablePart.SharedStringTable.Elements(Of SharedStringItem)().ElementAt(Integer.Parse(c.CellValue.InnerText))
If Not ssi Is Nothing Then
If intFirst = 1 Then
sbTxtFromFile.Append(ssi.Text.Text)
intFirst = 2
Else
sbTxtFromFile.Append(Environment.NewLine & reader.GetText())
intFirst = 2
End If
End If
Else
If Not c.CellValue Is Nothing Then
If intFirst = 1 Then
sbTxtFromFile.Append(c.CellValue.InnerText)
intFirst = 2
Else
sbTxtFromFile.Append(Environment.NewLine & c.CellValue.InnerText)
intFirst = 2
End If
End If
End If
'Console.Out.Write("{0}: {1} ", c.CellReference, cellValue)
End If
Loop While reader.ReadNextSibling()
'Console.Out.WriteLine()
End If
End While
Next
End Using
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
End Class
Кто-нибудь знает, что я могу сделать, чтобы исправить ситуацию и разделить на строки?
Любая помощь, которую любой может предложить, с благодарностью оценили.
Большое спасибо @Hans за отправку исходного кода, который я использую. Using OpenXmlReader
Прокомментировал, но не достаточно rep –
Привет, Джек, спасибо за ваш ответ. У StringBuilder нет буфера, это то, как SAX читает куски 1026 символов. Я попытался использовать StringBuilder или просто простую старую строку, и результаты те же. – GoodJuJu