2016-10-25 4 views
2

ich brauche, um verschiedene Dinge zu tun, basierend auf welches Feld (Spalte) die Daten in ist.Wie kann ich die richtige Spalte angeben?

  For Each row As DocumentFormat.OpenXml.Spreadsheet.Row In 
       worksheet.Descendants(Of DocumentFormat.OpenXml.Spreadsheet.Row) 
        For Each cell As DocumentFormat.OpenXml.Spreadsheet.Cell In row 
         Select Case True 
          Case cell.CellReference.Value Like "C*" 
           'if this cell is in column C 
          Case cell.CellReference.Value Like "A*" 
           'if this cell is in column A 
          Case Else 
         End Select 
        Next 
      Next 

Dies funktioniert gut, solange es nicht mehr als 26 Felder in einer bestimmten Tabelle.

Wie stelle ich sicher, dass mein Like "A*" nicht auf Spalte AA, AB, etc. reagiert?

Beachten Sie, dass das OpenXML-SDK immer eine vollständige Zellreferenz für den .cellreference.value und nicht nur die Spalte zurückgibt. Und ich muss angeben, dass ich nicht versuche, jede Spalte größer als 26 zu werfen, aber ich versuche sicherzustellen, dass ich eine bestimmte Spalte angeben. Es ist möglich, dass die untersuchte Spalte abhängig von der Firma, die das spezifische Quellenblatt erstellt hat, möglicherweise AA oder AB wird. Ich habe auf eine Eigenschaft gehofft, oder, anders gesagt, wie andere Leute gelernt haben, auf bestimmte Spalten in openxml zu verweisen.

+0

Können Sie die Spalte aus der Zelle abrufen? – ChrisF

+0

@ChrisF Vielen Dank. Soweit ich weiß, ist die einzige Möglichkeit, die Spalte zu erhalten, der 'cellreference.value', der eine Zeichenkette zurückgibt. Wenn es einen anderen Weg gibt, die Referenz zu bekommen, vielleicht in einem anderen Format, scheint es nicht in MSDN dokumentiert zu sein. – CWilson

+0

Ich habe nicht an die Daten gedacht, sondern nur den Spaltenbereich der Referenz. – ChrisF

Antwort

2

Durch Hinzufügen eines # nach dem/den Spaltenbuchstaben, die Sie abgleichen möchten, teilt der Matcher mit, dass nach dem Buchstaben eine Nummer stehen muss. Dies verhindert, dass Ihre Prüfung auf A übereinstimmt, wenn die Spalte tatsächlich AA ist.

Select Case True 
    Case cell.CellReference.Value Like "C#*" 
    'if this cell is in column C 
    Case cell.CellReference.Value Like "A#*" 
    'if this cell is in column A 
    Case cell.CellReference.Value Like "AA#*" 
    'if this cell is in column AA 
    Case Else 
End Select 

Vom documentation wird die # "Jede einzelne Ziffer (0-9)" entsprechen.

Verwandte Themen