Avatar billede saxtus Nybegynder
03. september 2004 - 11:51 Der er 9 kommentarer og
1 løsning

Tekstfil til excel

Efter at have forsøgt på 117 forskellige måde har det endnu ikke lykkeds mig at få konverteret en tekstfil til noget der er opdelt i kollonner i excel.

min tekstfil er opbygget på den her måde

22041 HH-Wandsbek Wandsbek 340

Og jeg skal bruge det føreste tal 22041 og det sidste tal 340, så den skal bare skilde ved det første mellemrum og tage den tekst og så bagefter tage fra det sidste mellemrum og så den tekst.

Hvordan kan jeg få lavet det??
og den skal bare køre i lykke til "end of file"
Avatar billede overchord Nybegynder
03. september 2004 - 12:07 #1
Det er umiddelbar nemmere at goere med en makro direkte i Excel:

Workbooks.OpenText FileName:="MinFil.txt",Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, Semicolon:=False,Comma:=False, Space:=True, Other:=False

Herefter kan du maniuplere de enkelte kolonner og slette dem i midten hvis det kun er foerste og sidte du er interesseret i
Avatar billede kedde65 Praktikant
03. september 2004 - 12:16 #2
Her kommer der en kode der kan gøre det direkte.

    Dim oExcel As Excel.Application
    Dim oWorkbook As Excel.Workbook
    Dim txt As String
    Dim i As Integer
    Dim fso As FileSystemObject
    Dim filStream As TextStream
    Set oExcel = New Excel.Application
    Set oWorkbook = oExcel.Workbooks.Open("c:\tal.xls")
    Set fso = New FileSystemObject
    Set filStream = fso.OpenTextFile("c:\tal.txt", ForReading)
    i = 0
    While Not filStream.AtEndOfStream
        arr = Split(filStream.ReadLine, " ")
        oWorkbook.ActiveSheet.Range("a1").Offset(i, 0).Value = arr(0)
        oWorkbook.ActiveSheet.Range("a1").Offset(i, 1).Value = arr(3)
        i = i + 1
    Wend
   
    filStream.Close
    oWorkbook.Close
    Set fso = Nothing
   
    Set oWorkbook = Nothing
    Set oExcel = Nothing

Det kræver tekst filen ligger på c: og hedder tal.txt og der også ligger en Excelfil på c: der hedder tal.xls

Desuden skal der i Visual Basic sættes en reference til Microsoft scripting Runtime og til Microsoft Excel Object Library

VH CK
Avatar billede saxtus Nybegynder
03. september 2004 - 12:50 #3
kedde65 hvordan sætter man så det op, altså "Desuden skal der i Visual Basic sættes en reference til Microsoft scripting Runtime og til Microsoft Excel Object Library"

og hvordan skal jeg køre det?? skal det køres direkte fra Excel eller fra et andet program??
Avatar billede saxtus Nybegynder
03. september 2004 - 12:51 #4
der ud over brokekr den sig også over

Set oExcel = New Excel.Application
Avatar billede kedde65 Praktikant
03. september 2004 - 12:52 #5
Ja den fejl du får er fordi du ikke har sat de referencer jeg sagde. Jeg har lavet koden til at køre fra ren Visual Basic programmerings sproget. Det kan sagtens laves om så det kan køre fra Excel VBA istedet.

Referencer I Visual Basic skal sættes i menuen Project - references

VH CK
Avatar billede saxtus Nybegynder
03. september 2004 - 13:39 #6
hvordan laves det så om så det kan køre i excel??
Avatar billede martin_moth Mester
03. september 2004 - 18:12 #7
Hvis du har prøvet 117 gange er det ærgeligt at du har undgået at prøve det mest nærliggende:

optag en macro der gør hvad du vil.

Koden kommer til at se således ud:

    Workbooks.OpenText Filename:="C:\test.txt", Origin:=xlWindows, StartRow:= _
        1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
        ConsecutiveDelimiter:=True, Tab:=False, Semicolon:=False, Comma:=False _
        , Space:=True, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array _
        (3, 1), Array(4, 1))
    Columns("B:C").Select
    Selection.Delete Shift:=xlToLeft

copy-paste koden ind som en ny macro i Excel
Avatar billede kedde65 Praktikant
03. september 2004 - 23:45 #8
Hermed koden til Excel VBA. Der skal stadig sættes en reference til Microsoft Scripting Runtime gøre i menuen Tools - references

Sub loadText()
    Dim txt As String
    Dim i As Integer
    Dim fso As FileSystemObject
    Dim filStream As TextStream
    Set fso = New FileSystemObject
    Set filStream = fso.OpenTextFile("c:\tal.txt", ForReading)
    i = 0
    While Not filStream.AtEndOfStream
        arr = Split(filStream.ReadLine, " ")
        Range("a1").Offset(i, 0).Value = arr(0)
        Range("a1").Offset(i, 1).Value = arr(3)
        i = i + 1
    Wend
   
    filStream.Close
    Set fso = Nothing
End Sub

VH CK
Avatar billede saxtus Nybegynder
06. september 2004 - 08:13 #9
Martin prøvede det og der gik 2 sek så virked det bare - mange tak for hjlæpen.
Avatar billede saxtus Nybegynder
06. september 2004 - 08:13 #10
i andere skal selvfølgelig også have tak for hjælpen
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
Kategori
Kurser inden for grundlæggende programmering

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