Avatar billede starf Nybegynder
15. september 2011 - 14:18 Der er 3 kommentarer og
1 løsning

cvs data ind i excel template

Er det muligt at have en template i excel, hvor data skal stå bestemte steder, og have dette blive fyldt ud automatisk fra en cvs fil ?

Hvordan evt?
Avatar billede supertekst Ekspert
15. september 2011 - 14:52 #1
Kunne være via VBA..
Avatar billede starf Nybegynder
15. september 2011 - 15:05 #2
Har du nogle eksempler på hvordan dette gøres?
Avatar billede supertekst Ekspert
15. september 2011 - 15:15 #3
Prøv at uploade/sende en model af csv-filen og hvordan placeringen skal være i Excel-arket.

@-adresse under min profil
Avatar billede supertekst Ekspert
16. september 2011 - 11:36 #4
Indlæsning af CSV-fil

Public Sub indlæsCSV()
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;C:\Users\peter\Desktop\CSV_Excel\order_export_20110915_123759 - Copy.csv" _
        , Destination:=Range("$A$1"))                                                      '<--- justeres
        .Name = "order_export_20110915_123759 - Copy_1"                                    '<--- justeres
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 65001                                    '<---- UNICODE UTF-8
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = False
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = True
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, _
        1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

Opbygning af template på basis af CSV-fil

Dim csvArk As Object
Const csvArkNavn = "indlæstCsv"                          '<--- evt. justeres
Dim antalCsvRæk As Long

Dim templArk As Worksheet
Const skabelonArkNavn = "Skabelon"                  '<--- evt. justeres

Dim hovedFelter As Variant, hovedKoordinater As Variant

Const startRækkeDetail = 10                        '<--- evt. justeres
Const totalRække = 30                              '<--- evt. justeres
Public Sub udfyldSkabelon()
    Application.ScreenUpdating = False
   
Rem clear detailrækker
    Range("A10:I30").Select
    Selection.ClearContents
    Range("B1").Select

Rem Hent antal rækker på csv
    Set csvArk = ActiveWorkbook.Sheets(csvArkNavn)
    csvArk.Activate
    antalCsvRæk = ActiveCell.SpecialCells(xlLastCell).Row
   
    Set templArk = ActiveWorkbook.Sheets(skabelonArkNavn)
    templArk.Activate
   
    opbygHovedData
   
    opbygDetaildata
   
    Application.ScreenUpdating = True
End Sub
Private Sub opbygHovedData()
Dim f As Byte
    hovedFelter = Array("Billing Name", "Customer Email", "Billing Phone Number", "Billing Zip", "Billing City")
    hovedKoordinater = Array("B1", "B2", "B3", "B6", "C6")
   
    For f = 0 To UBound(hovedFelter)
        With templArk
            .Range(hovedKoordinater(f)) = csvArk.Cells(2, findKolonne(hovedFelter(f)))
        End With
    Next f

End Sub
Private Sub opbygDetaildata()
Dim startRæk As Long, totalRæk As Long, total As Double
Dim ræk As Byte, detailRæk As Byte

Dim dkBeløb As String
Const DKKiDENT = "DKK"
Const momsProcent = "25%"
   
    total = 0
    detailRæk = startRækkeDetail
   
    For ræk = 2 To antalCsvRæk
        With templArk
            .Range("A" & detailRæk) = csvArk.Cells(ræk, findKolonne("Item Name"))
           
            dkBeløb = csvArk.Cells(ræk, findKolonne("Item Price"))
            dkBeløb = Replace(dkBeløb, DKKiDENT, "")
            .Range("C" & detailRæk) = Trim(dkBeløb)
           
            .Range("D" & detailRæk) = csvArk.Cells(ræk, findKolonne("Item Qty Ordered"))
           
            .Range("E" & detailRæk) = Range("C" & detailRæk) * Range("D" & detailRæk)
           
            dkBeløb = csvArk.Cells(ræk, findKolonne("Item Tax"))
            dkBeløb = Replace(dkBeløb, DKKiDENT, "")
            .Range("F" & detailRæk) = Trim(dkBeløb)
           
            .Range("G" & detailRæk) = momsProcent
           
            dkBeløb = csvArk.Cells(ræk, findKolonne("Item Discount"))
            dkBeløb = Replace(dkBeløb, DKKiDENT, "")
            .Range("H" & detailRæk) = Trim(dkBeløb)
           
            dkBeløb = csvArk.Cells(ræk, findKolonne("Item Total"))
            dkBeløb = Replace(dkBeløb, DKKiDENT, "")
            .Range("I" & detailRæk) = Trim(dkBeløb)
           
            total = total + .Range("I" & detailRæk)
        End With
       
        detailRæk = detailRæk + 1
    Next ræk
   
    Range("I" & totalRække) = total
End Sub
Private Function findKolonne(søgeOrd)
    With ActiveWorkbook.Sheets(csvArkNavn).Range("A1:IV1")
        Set c = .Find(søgeOrd, LookIn:=xlValues, LookAt:=xlWhole)
        If Not c Is Nothing Then
            findKolonne = c.Column
        Else
            findKolonne = 0
        End If
    End With
End Function
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