Avatar billede snoopidoo Praktikant
11. juli 2007 - 11:25 Der er 8 kommentarer og
1 løsning

Indlæse stor kolon sepereret txt-fil

Jeg håber at nogle kan hjælpe mig.
Jeg har en txtfil på 1,2 mio linjer, som jeg skal indlæse i excell, da hver ark kun kan have omkring 65000 linjer, skal den indlæse videre på næste ark, men stadig i samme fil.

Da den er kolonsepereret skal den i regnearket også være opdelt i kollonner herefter.
11. juli 2007 - 11:33 #1
Det lyder mere som en database-opgave.

Skal du ikke kunne håndtere alle rækker under et?
Avatar billede gider_ikke_mere Nybegynder
11. juli 2007 - 11:45 #2
Du skulle måske kigge på Office 2007. Der kan Excel indeholde lidt over 1 million linier.
Avatar billede supertekst Ekspert
11. juli 2007 - 12:02 #3
Skulle nok være muligt via vba at fortsætte på de næste ark - prøv evt. at sende en håndfuld af textfilen til: pb@supertekst-it.dk
Avatar billede gider_ikke_mere Nybegynder
11. juli 2007 - 12:06 #4
... eller blot her hvor andre kan være med.
Avatar billede snoopidoo Praktikant
11. juli 2007 - 12:10 #5
Programmet som skal bruge filen bagefter er ikke 2007 kompatibel endnu, så der må ikke være mere end de ca. 65000 linjer på hvert ark.
Avatar billede snoopidoo Praktikant
11. juli 2007 - 12:15 #6
Jeg har fået dette kode fra et andet spørgsmål, som lidt lød som noget jeg kunne bruge:
"Sub OpenAndSplitFile()
Dim lngRow As Long
Dim test As Integer
Dim txt As String

Const RowsPerSheet = 65000  'Angiv antal rækker per faneblad (Max er 65536)

myFile = Application.GetOpenFilename("Text Files,*.txt")
Application.ScreenUpdating = False
Workbooks.OpenText Filename:=myFile, ConsecutiveDelimiter:=True, Tab:=True, StartRow:=1
With ThisWorkbook
    ActiveSheet.Move after:=.Worksheets(.Worksheets.Count)
End With
ActiveSheet.Name = "Ark2"
Rows(RowsPerSheet + 1 & ":65536").Delete
Application.DisplayAlerts = False
Workbooks.OpenText Filename:=myFile, ConsecutiveDelimiter:=True, Tab:=True, StartRow:=RowsPerSheet + 1
Application.DisplayAlerts = True
ActiveSheet.Move after:=ThisWorkbook.Worksheets(1)
ActiveSheet.Name = "Ark3"
Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub"

men det fungere ikke helt, Jeg ved ikke om det er fordi der vil skulle være flere end 2 ark.


Filen er bygget op af emner som dette:

Recipients      : {aaaaa@bbbbb.dk}
RecipientStatus : {550 5.1.1 RESOLVER.ADR.RecipNotFound; not found}
ServerIp        :
Sender          : MicrosoftExchange329f71bc88ae4615bbc36ab6cf41109e@mailsender.
                  biz
Avatar billede supertekst Ekspert
11. juli 2007 - 16:03 #7
Forslag:
Const RækkerPrArk = 65000  'Angiv antal rækker per faneblad (Max er 65536)
Const tekstFilNavn = "Test.txt"        '<<<<---- Justeres
Dim xSti
Dim antalArk, ark, linie, række, linieNr
Sub TekstFilTilArk()                    '<<<---- Start VBA
On Error GoTo fejl

Rem Indlæser sti
    xSti = ActiveWorkbook.Path
    If Right(xst, 1) <> "\" Then
        xSti = xSti + "\"
    End If
   
    linieNr = 0
   
    Application.ScreenUpdating = False
   
Rem Aktuelle ark
    ark = 1
    række = 1
   
Rem Begynd med Ark 1 til lagring
    ActiveWorkbook.Sheets(ark).Activate
   
Rem  - Åbn filen
    Open xSti + tekstFilNavn For Input As #1
    While Not EOF(1)
        Line Input #1, linie
        adskilOpdaterLinie linie, række
        linieNr = linieNr + 1
       
        Application.ScreenUpdating = True
        Application.StatusBar = "Linie: " & CStr(linieNr)
        Application.ScreenUpdating = False
       
        række = række + 1
        If række > RækkerPrArk Then
            Columns.AutoFit
           
Rem Skift til nyt ark
            række = 1
            ActiveWorkbook.Sheets.Add After:=Sheets(ark)
            ark = ark + 1
            ActiveSheet.Name = "Ark" + CStr(ark)
        End If
    Wend
    Close #1
   
    Columns.AutoFit
   
    Application.ScreenUpdating = True
    MsgBox ("Kørsel afsluttet")
    Exit Sub
   
fejl:
    On Error Resume Next
    Close #1
    MsgBox ("Fejl - afbrydes - kontakt udvikler")
End Sub
Private Sub adskilOpdaterLinie(lin, række)    'adskil og indsæt i ark
Dim p, celle, kolonne
    kolonne = 1
    If Right(lin, 1) <> ":" Then
        lin = lin + ":"
    End If
   
    While InStr(lin, ":") > 0
        p = InStr(lin, ":")
        If p > 0 Then
            celle = Left(lin, p - 1)
            ActiveSheet.Cells(række, kolonne) = celle
            kolonne = kolonne + 1
            lin = Mid(lin, p + 1)
        End If
    Wend
End Sub
Avatar billede snoopidoo Praktikant
11. juli 2007 - 19:31 #8
hej super tekst.
Det var vist lige hvad jeg skulle bruge.
Den skal bare lige også skrive kolonnet ind i arkene i en celle for sig selv, så der er 3 kollonner, men det skulle jeg nok kunne finde ud af.

giver du lige et svar, så kan du få pointene.
Avatar billede supertekst Ekspert
11. juli 2007 - 22:57 #9
Det får du her - skulle det være en anden gang...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester