Importera textfiler med
fler poster än 65536
(ADO & DAO & FSO)
I detta tips visas hur vi kan importera data från textfiler där antalet poster överstiger ett arbetsblad totala rader om 65536.
ADO-exemplet är testat med en textfil innehållande 242000 rader och 1 kolumn i versionerna 2000 och 2002. Sammantaget skapas 4 st arbetsblad.
DAO-exemplet är testat med en textfil innehållande 242000 rader och 1 kolumn i versionerna 97, 2000 och 2002. Sammantaget skapas 4 st arbetsblad.
Se också följande tips:
- Exportera cellområdesdata till textfil
- Hantering av textfiler
- Lista cellinnehåll i textfil
- Rensa och konvertera importerad textdata
Följande procedur fungerar endast i versionerna 2000 och 2002. Detta då vi här använder oss av metoden CopyFromRecordset i ADO, vilken inte är tillgänglig i 97. För att exemplet ska fungera krävs att en referens sätts till Microsoft ADO och till Microsoft Scripting Runtime.
Option Explicit
Sub Importera_Stora_Textfiler_ADO()
'© 2003 Alla rättigheter XL-Dennis
Dim stSokVag As String, stFilnamn As String, stHamtaFil As String
Dim cnt As ADODB.Connection, rst As ADODB.Recordset,
Dim fsoObj As Object
'Användarna väljer textfil för import.
stHamtaFil = Application.GetOpenFilename("Textfiler (*.txt),*.txt", , "Välj en textfil...")
'Om användaren klickar på Avbryt-knappen.
If stHamtaFil = "Falskt" Then Exit Sub
Application.ScreenUpdating = False
'Här används s k late binding.
Set fsoObj = CreateObject("Scripting.FileSystemObject")
stSokVag = fsoObj.GetFile(stHamtaFil).ParentFolder.Path
stFilnamn = fsoObj.GetFile(stHamtaFil).Name
'Öppnar en ADO-anslutning till den angivna mappen
Set cnt = CreateObject("ADOdb.Connection")
cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & stSokVag & ";" & _
"Extended Properties=""text;HDR=Yes;FMT=Delimited"""
Set rst = CreateObject("ADOdb.Recordset")
'Öppnar den valda textfilen och importera den till Excel.
rst.Open "SELECT * FROM " & stFilnamn, cnt, 3, 1, 1
While Not rst.EOF
Worksheets.Add
ActiveSheet.Range("A1").CopyFromRecordset rst, 65536
Wend
rst.Close
cnt.Close
Set rst = NothingSet cnt = Nothing
Application.ScreenUpdating = True
End Sub
Följande procedur fungerar i versionerna 97, 2000 och 2002. Här använder vi oss av ADO och vi behöver därför ange referenser till Microsoft DAO 3.51 samt till Microsoft Scripting Runtime.
Option Explicit
Sub Importera_Stora_Textfiler_DAO()
'© 2002 Alla rättigheter XL-Dennis
Dim stSokVag As String, stFilnamn As String, stHamtaFil As String
Dim Db As DAO.Database
Dim Rst As DAO.Recordset
Dim fsoObj As Object
'Användarna väljer textfil för dataimport
stHamtaFil = Application.GetOpenFilename("Textfiler (*.txt),*.txt", , "Välj en textfil...")
'Om användaren klickar på Avbryt-knappen.
If stHamtaFil = "Falskt" Then Exit Sub
Application.ScreenUpdating = False
'Här används s k late binding.
Set fsoObj = CreateObject("Scripting.FileSystemObject")
stSokVag = fsoObj.GetFile(stHamtaFil).ParentFolder.Path
stFilnamn = fsoObj.GetFile(stHamtaFil).Name
'Här skapas DAO-kopplingen och textfilen öppnas.
Set Db = OpenDatabase(stSokVag, False, True, "Text;")
Set Rst = Db.OpenRecordset("SELECT * FROM " & stFilnamn)
'Textfilens innehåll läggs till den aktiva arbetsboken och arbetsblad läggs till.
While Not Rst.EOF
Worksheets.Add
ActiveSheet.Range("A1").CopyFromRecordset Rst, 65536
Wend
Rst.Close
Db.Close
Set Rst = Nothing
Set Db = Nothing
Application.ScreenUpdating = True
End Sub