2016-09-20 16 views
0

Я использую некоторый большой код, взятый из 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

ответ

0

Должно быть, когда StringBuilder сбрасывает свой буфер, вам нужно использовать String Builder?

+0

Прокомментировал, но не достаточно rep –

+0

Привет, Джек, спасибо за ваш ответ. У StringBuilder нет буфера, это то, как SAX читает куски 1026 символов. Я попытался использовать StringBuilder или просто простую старую строку, и результаты те же. – GoodJuJu