Die Community zu .NET und Classic VB.
Menü

FAQ 0109: Wie kann ich eine Excel-Tabelle als Textdatei abspeichern?

 von 

Frage 

Wie kann ich eine Excel-Tabelle als Textdatei abspeichern?

Antwort  

pks hatte folgenden Code gepostet, mit dem dieses häufig geschilderte Problem gelöst werden kann:

Option Explicit

Private Sub Command1_Click()

   Dim Rs As ADODB.Recordset
   Dim ExcelFile As String, Tabelle As String
   
      'ExcelFile und Tabelle festlegen
      ExcelFile = "c:\test\graz.xls"
      Tabelle = "Tabelle1"
      
      'Excel auslesen
      Set Rs = ExcelSheet2Recordset(ExcelFile, Tabelle)
      
      'Listview in Reportansicht
      With ListView1
         .View = lvwReport
         .LabelEdit = lvwManual
         .GridLines = True
         .FullRowSelect = True
      End With
         
      'Recordset in Listview abbilden
      ListViewFillFromRs Rs, ListView1, , False
      
      'Speicher freigeben
      Set Rs = Nothing
End Sub

'ExcelFile/Tabelle als Recordset liefern
Public Function ExcelSheet2Recordset(ExcelFile As String, _
                                     Tabelle As String) _
                                     As ADODB.Recordset
   
   Dim Cn As ADODB.Connection
   Dim Rs As ADODB.Recordset
   Dim myTab As String
   Dim i As Long
   
      'Connection zu einer Excelfile
      Set Cn = New ADODB.Connection
      With Cn
         .CursorLocation = adUseClient
         .Mode = adModeShareDenyNone
         .Provider = "Microsoft.Jet.OLEDB.4.0"
         .ConnectionString = "Data Source=" & ExcelFile & _
          ";Extended Properties=Excel 8.0"
         .Open
      End With
      
      'einen Sheet auslesen
      Set Rs = New ADODB.Recordset
      'Tabellenname in Klammern mit einem $-Zeichen
      myTab = "[" & Tabelle & "$]"
      With Rs
         .CursorLocation = adUseClient
         .CursorType = adOpenKeyset
         .LockType = adLockReadOnly
         .ActiveConnection = Cn
         .Open "Select * From " & myTab
      End With
      
      'Recordset abhängen
      Set Rs.ActiveConnection = Nothing
      
      'Connection schliessen, Speicher freigeben
      Cn.Close
      Set Cn = Nothing
      
      'Recordset übergeben
      Set ExcelSheet2Recordset = Rs
      
      'Speicher freigeben
      Set Rs = Nothing
End Function

'ein ListView aus einem Recordset füllen
'optional kann die Feldnummer einer ID übergeben werden
'optional wird das Item nicht als Textträger genutzt
Public Sub ListViewFillFromRs(Rs As ADODB.Recordset, Lvw As ListView, _
                              Optional ID_FieldNumber As Long = -1, _
                              Optional OnlySubItems As Boolean = True)

   Dim i As Long
   Dim Li As ListItem
   
      With Lvw
         .ColumnHeaders.Clear
         .ListItems.Clear
         
         'Header = FieldName
         If OnlySubItems Then
            .ColumnHeaders.Add , , , 0
         End If
         For i = 0 To Rs.Fields.Count - 1
            .ColumnHeaders.Add , , Rs.Fields(i).Name
         Next

         Rs.MoveFirst
         'Recorset durchlaufen
         Do While Not Rs.EOF
            'Item
            Set Li = .ListItems.Add
            'optional die ID des Records alphanumerisch in den Key
            If ID_FieldNumber >= 0 Then
               Li.Key = ID_FieldNumber & "x"
            End If
            If Not OnlySubItems Then
               Li.Text = Rs.Fields(0).Value & vbNullString
            End If
            
            'SubItems
            If OnlySubItems Then
               For i = 0 To Rs.Fields.Count - 1
                  Li.SubItems(i + 1) = Rs.Fields(i).Value & vbNullString
               Next
            Else
               For i = 1 To Rs.Fields.Count - 1
                  Li.SubItems(i) = Rs.Fields(i).Value & vbNullString
               Next
            End If
            Rs.MoveNext
         Loop
      End With
End Sub

Listing 1: Excel-Tabelle als textdatei abspeichern

Nach dem Aufruf von "ExcelSheet2Recordset" hat man ein Recordset, welches man in eine Datei schreiben kann.

Ihre Meinung  

Falls Sie Fragen zu dieser FAQ haben, Ihre Erfahrung mit anderen Nutzern austauschen möchten oder auf eine Ergänzung hinweisen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.