FAQ 0109: Wie kann ich eine Excel-Tabelle als Textdatei abspeichern?
von Helge Rex
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
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.