IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Lecture d'un classeur Excel via Open XML SDK


Sujet :

VB.NET

  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juillet 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Juillet 2015
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Lecture d'un classeur Excel via Open XML SDK
    Bonjour à tous,

    J'essaye de lire un énorme fichier excel (plusieurs centaines de Mo) via OpenXML.

    J'ai trouvé la méthode SAX qui semble parfaite pour ce cas de figure mais je coince sur la récupération des données de type string.

    Le programme énumère bien les données présente dans les feuilles sélectionnées
    mais je n'arrive pas a récuperer les véritables données qui se trouvent dans la SharedStringTable.

    Du coup le programme ne me remonte que des séries de chiffres au lieu des valeurs que je cherche.
    Je coince un peu sur cette partie.

    Si quelqu'un a une piste pour moi...

    Je vous remercie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    Public Class StockedItems
     
        Public Sub ReadExcelFileSAX(ByVal fileName As String)
            Using spreadsheetDocument As SpreadsheetDocument = SpreadsheetDocument.Open(fileName, False)
                Dim workbookPart As WorkbookPart = spreadsheetDocument.WorkbookPart
                Dim worksheetPart As WorksheetPart
                Dim text As String
                Dim reader As OpenXmlReader
                Dim objWriter As System.IO.StreamWriter
     
                For Each s As Sheet In workbookPart.Workbook.Sheets
                    If s.Name = "Products" Then
                        worksheetPart = workbookPart.GetPartById(s.Id)
                        reader = OpenXmlReader.Create(worksheetPart)
                        'Dim stringTable = workbookPart.GetPartsOfType(Of SharedStringTable).FirstOrDefault()
     
                        While reader.Read()
                            If reader.ElementType = GetType(CellValue) Then
                                text = reader.GetText()
                                Debug.Print(text)
                            End If
                        End While
                        MsgBox("Products complete")
                    ElseIf s.Name = "Contract Pricing" Then
                        worksheetPart = workbookPart.GetPartById(s.Id)
                        reader = OpenXmlReader.Create(worksheetPart)
                        While reader.Read()
                            If reader.ElementType = GetType(CellValue) Then
                                text = reader.GetText()
                            End If
                        End While
                        MsgBox("Price complete")
                    End If
                Next
            End Using
        End Sub
     
    End Class
    G

  2. #2
    Membre régulier
    Homme Profil pro
    .
    Inscrit en
    Février 2014
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2014
    Messages : 50
    Points : 97
    Points
    97
    Par défaut
    Pour travailler sur des fichiers Excel xlsx avec .Net j'utilise ClosedXML (OpenXML) ( https://closedxml.codeplex.com/ ) ce qui simplifie le code.

  3. #3
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juillet 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Juillet 2015
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    ReBonjour,

    Je suis parvenu a une pseudo solution ...

    Le rendu est désormais bien ce que j'attends mais en revanche les performances sont désastreuses maintenant :///

    Toujours preneur si vous avez des pistes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    Public Class StockedItems
     
        Public Sub ReadExcelFileSAX(ByVal fileName As String)
            Using spreadsheetDocument As SpreadsheetDocument = SpreadsheetDocument.Open(fileName, False)
                Dim workbookPart As WorkbookPart = spreadsheetDocument.WorkbookPart
                Dim stringTable = workbookPart.GetPartsOfType(Of SharedStringTablePart).FirstOrDefault()
                Dim worksheetPart As WorksheetPart
                Dim cell As Cell
                Dim value As String
                Dim reader As OpenXmlReader
     
                'Dim objWriter As System.IO.StreamWriter
     
                For Each s As Sheet In workbookPart.Workbook.Sheets
                    If s.Name = "Products" Then
                        worksheetPart = workbookPart.GetPartById(s.Id)
                        reader = OpenXmlReader.Create(worksheetPart)
                        While reader.Read()
     
                            If reader.ElementType = GetType(Cell) Then
                                cell = reader.LoadCurrentElement()
                                If cell.DataType IsNot Nothing Then
                                    Select Case (cell.DataType.Value)
                                        Case CellValues.SharedString
                                            If stringTable IsNot Nothing Then
                                                value = stringTable.SharedStringTable.ElementAt(Integer.Parse(cell.InnerText)).InnerText
                                            End If
                                        Case CellValues.Boolean
                                            Select Case cell.InnerText
                                                Case "0"
                                                    value = "FALSE"
                                                Case Else
                                                    value = "TRUE"
                                            End Select
                                    End Select
                                Else
                                    value = cell.InnerText
                                End If
                            End If
     
                        End While
     
     
                        MsgBox("Products complete")
     
     
                    ElseIf s.Name = "Contract Pricing" Then
                        worksheetPart = workbookPart.GetPartById(s.Id)
                        reader = OpenXmlReader.Create(worksheetPart)
                        While reader.Read()
                            If reader.ElementType = GetType(CellValue) Then
                                value = reader.GetText()
                            End If
                        End While
                        MsgBox("Price complete")
                    End If
     
                Next
            End Using
        End Sub
    End Class
    G

Discussions similaires

  1. Réponses: 7
    Dernier message: 11/09/2015, 15h09
  2. Réponses: 1
    Dernier message: 26/02/2010, 17h13
  3. formats fichiers Excel XML Open XML
    Par arkhamon dans le forum Excel
    Réponses: 2
    Dernier message: 25/05/2007, 21h55
  4. ouvrir un classeur excel via un code sql
    Par chamus dans le forum Access
    Réponses: 19
    Dernier message: 10/01/2007, 17h54
  5. Réponses: 15
    Dernier message: 21/11/2006, 10h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo