Avatar billede lisette Praktikant
08. marts 2005 - 20:28 Der er 4 kommentarer og
1 løsning

Konvertere xls-fil til txt-fil med fixed format

Hej med jer !

Jeg skal konvertere en masse data fra en xls-fil til en txt-fil, men det skal være med fixed interval.
Fx.

Hundehus      Kødben    Fido
Hundegård      Tyggeben  Anton
Kattelem      Guffer    Mille

Altså fx. kolonne 1 skal være præcis 15 karakterer lang osv.

Jeg kan få det til at fungere ved at mingelere med kolonnebredderne, men det er et frygteligt pilleri, at få det til at passe.

Er der nogen, som har en god ide ???

Glæder mig til at høre fra jer - Lisette
Avatar billede bak Forsker
08. marts 2005 - 20:54 #1
hvor mange kolonner drejer det sig om ?
Hvor starter om slutter dine data ?
Er det et eengang-job ?
Avatar billede kabbak Professor
08. marts 2005 - 21:03 #2
hvis du har Hundehus  stående i A1 og det er 3 kolonner, sæt så koden ind i feks. E1, træk den så til højre intil der ikke er flere kolonner, træk den derefter nedad til slut række.

=A1 & GENTAG(" ";15 -LÆNGDE(A1))


Marker og kopier så alle felter med formlen i vælg indsæt specielt, vælg værdier, så nu er formlen væk og alle felter er 15 tegn lange.
Avatar billede bak Forsker
08. marts 2005 - 22:29 #3
Hvis man forestiller sig at dine data ligger i tabelform, startende ved A1, vil denne makro kunne gøre det meget hurtigt.
Forudsætningen er at du indsætter en ny række øverst og i denne række skriver det antal karakterer du ønsker for hver kolonne.

Du skal køre makroen testme, evt ændre filnavnet først.

Sub testme()
    maketext "c:\mytext.txt", "A1"
End Sub

Sub maketext(sfilename, startcell)
Dim y                      As Long                    'tæller
Dim x                      As Long                    'tæller
Dim strTemp            As String                  'streng til de enkelte rækker
Dim strTemp2          As String
Dim lRows                As Long                    'antal rækker
Dim lCols                As Long                    'antal kolonner
Dim lFno                  As Long                    'fil nummer
Dim vsize                As Variant
Dim rgTbl                As Range
Dim vTbl
   
    Set rgTbl = Range(startcell).CurrentRegion
    vsize = Range(startcell, Cells(1, rgTbl.Columns.Count))
    Set rgTbl = rgTbl.Offset(1, 0).Resize(rgTbl.Rows.Count - 1, _
                                          rgTbl.Columns.Count)

    If rgTbl Is Nothing Then
        MsgBox "ExportRange ikke defineret"
        Exit Sub
    End If
    vTbl = rgTbl
    lFno = FreeFile
    lRows = rgTbl.Rows.Count
    lCols = rgTbl.Columns.Count
    Open sfilename For Output As #lFno

    For x = 1 To lRows
        strTemp = ""
        For y = 1 To lCols
            strTemp2 = Space(vsize(1, y))
            Mid(strTemp2, 1) = vTbl(x, y)
            strTemp = strTemp & strTemp2
        Next
        Print #lFno, strTemp
    Next
    Close #lFno
End Sub
Avatar billede lisette Praktikant
09. marts 2005 - 08:27 #4
bak: Jeg er imponeret !!!  Det virker bare perfekt. Vil du ligge et svar så jeg kan give dig point??

kabbak: Jeg har ikke prøvet om din løsning virker, da jeg skal have forskellige længder - og bak's løsning danner jo txt-filen i et hug !!

Mange tak for jeres hjælp - jer ka' man sgu' altid regne med  ;-)

Mvh Lisette
Avatar billede bak Forsker
09. marts 2005 - 08:41 #5
velbekomme :-)
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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