Avatar billede stigc Nybegynder
26. februar 2007 - 17:46 Der er 9 kommentarer

Tekst repræsenteres som tekst.

Jeg skal ændre i en .CSV file med føglede format.

kontonummer;value
A33333333333333333333;100
B33333333333333333333;101
333333333333333333333;102

Problemet er at Excel, når jeg åbner filen, gætter på at kolonne 1 række 3 er et tal og derfor formaterer efter det (også selv om andre rækker i netop denne kolonne indeholde bogstaver). Hvis jeg derfor gemmer igen har jeg mistet data, da Excel ikke kan repræsenterer så stort et tal. Smart!

Kan jeg sætte Excel op til altid at åbne .csv filer som tekst? Løsningen skal gerne være en engangs opsætning, da jeg har masser af filer der skal rettes løbende.
Avatar billede supertekst Ekspert
26. februar 2007 - 18:06 #1
Tag en kopi af CSV-filen
Omdøb den til .TXT
Åbnen Excel
Data / Importer eksterne data
I Guiden ; som skilletegn  - Kolonne 1 som tekst
Avatar billede stigc Nybegynder
26. februar 2007 - 19:10 #2
Det er alt for mange skridt. Løsningen virker fint, men det er alt for langsom. Jeg ønsker at kunne dobbeltklikke på en fil.
Avatar billede supertekst Ekspert
26. februar 2007 - 23:24 #3
Der er noget på vej...
Avatar billede bak Seniormester
26. februar 2007 - 23:32 #4
Så må vi jo tvinge excel til at gøre det.
For at gøre det skal vi bruge en workbook der altid er åben når excel åbnes. Dette kunne være Person.xls

Opret et class-modul (Class1) i denne og indsæt følgende

Public WithEvents MyApp As Application
       

Private Sub myApp_WorkbookOpen(ByVal Wb As Workbook)
If InStr(1, Wb.Name, ".csv") > 0 Then
    Wb.Sheets(1).Cells.Clear
    Wb.Sheets(1).Cells.NumberFormat = "@"
    getfile (Wb.FullName)
End If
End Sub

Sub getfile(FileIn)
Dim F1 As Long
Dim X As Long
Dim strText As String
Dim Temp As Variant

F1 = FreeFile
Open FileIn For Input As #F1
While Not EOF(F1)
        X = X + 1
      Line Input #F1, strText
      Temp = Split(strText, ";")
      Range("A" & X).Resize(, UBound(Temp)) = Temp
Wend
Close #F1
End Sub


OPret så et almindelig modul i den og indsæt følgende

Dim X As New Class1

Sub auto_open()
    Set X.MyApp = Application
End Sub


Gem person.xls og kør makroen  auto_open

Nu kan du dobbelklikke på en csv-fil
Den vil åbne sig og alt vil være tekst.
Dette sker ved at filen åbnes, alt slettes og filen indlæses som textfil linie for linie.
Avatar billede stigc Nybegynder
27. februar 2007 - 10:38 #5
Super. Det er en løsning som er noget nemmere.

Alle mine csv filer har headers. Har du også et script så Excel ved at den første række er en header?
Avatar billede stigc Nybegynder
27. februar 2007 - 11:04 #6
Scriptet er nu ikke særlig robust. Jeg kan jo have tegnet ; i en kolonneværdi.
Avatar billede stigc Nybegynder
27. februar 2007 - 17:22 #7
Kunne man ikke lave den sådan, at Excel starter en makro i stedet for som udfører hvad "supertekst" skriver?
Så er den jo 100% robust over for sjove tegn og linieskift.
Avatar billede supertekst Ekspert
28. februar 2007 - 00:02 #8
Måske et alternativ:
Sub konv1()
Dim csv As Object, linie As String, id As Variant
    filnavn = Application.GetOpenFilename
     
    Columns("A:A").Select
    Selection.NumberFormat = "@"
    Range("A1").Select

    Set csv = CreateObject("excel.Application")
    With csv
        .Workbooks.Open (filnavn)
       
        For ræk = 1 To 4
            linie = .Cells(ræk, 1)
            p = InStr(linie, ";")
            If p > 0 Then
                With ActiveWorkbook.Sheets(1)
                    .Cells(ræk, 1) = Left(linie, p - 1)
                    .Cells(ræk, 2) = Mid(linie, p + 1)
                End With
            End If
        Next ræk
    End With
    csv.Quit
    Set csv = Nothing
   
    Columns.AutoFit
   
End Sub
Avatar billede supertekst Ekspert
01. marts 2007 - 00:09 #9
Bidrag 2:
Rem Anvendelse af Import-Guide
Rem ==========================
Resultat efter import
'kontonummer Value
'A33333333333333333333 100
'B33333333333333333333 101
'333333333333333333333 102                      'uden markering af tal som tekst

Sub konv2()
    filNavn = Application.GetOpenFilename      'vælg CSV-fil
    importerCSV filNavn
   
    Columns.AutoFit
End Sub
Private Sub importerCSV(filNavn)
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & filNavn, Destination:=Range("A1"))
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 850
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = True
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(2, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub
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