Avatar billede ng_tnt Nybegynder
07. januar 2004 - 16:13 Der er 11 kommentarer og
1 løsning

Håndtering af CSV filer efter sortering

Jeg eksportere data ud af mit ERP program til en CSV fil, som så indeholder 28 felter adskilt af semikolonner - MEN når jeg så har brugt Autofilter for at slette hele linier med indhold - fjerner den de sidste 4 semicolonner i alle de resternende linier - upåagtet at jeg selvfølgelig gemmer i csv igen - de sidste ; tegn er originalt blot stående således ;;;; DVS at den kun fjerner disse pga. der intet er i disse "felter" - nogen der har en løsning på dette - da jeg jo gerne ville undgå at skulle manuelt påføre disse igen i notepad og samtidig ER tvunget til at slette en hel del linier i filen ?

Man ku jo håbe ;-)

ng_tnt
Avatar billede bufferzone Praktikant
07. januar 2004 - 16:22 #1
Jeg kan ikke helt overskue hvad problemet er, men hear goes.

Di kan jo importere en ; separeret fil ind i excel. Herinde, vil den fordele de enkelte linier som koloner og stille dataen pænt op i et excel regneark. Hvis du har brug for 4 tomme kolonner, kan disse jo bare laves i excel (de er der allerede), hvis du midlertidigt har brug for at fylde noget i de 4 sidste kolonner, gøres det meget hurtigt ved at skrive et 0 i den øverste celle i de fire sidste kolonner, og så kopiere med musen. Efterfølgende kan du jo eksportere det behandlede regneark til en ny csv fil, med de fire sidste ; med indhold, eller slettet alt efter hvad det er du vil.

Løsningen som jeg forstår den er altså at gå over et mellemstadie som excelregneark
Avatar billede ng_tnt Nybegynder
08. januar 2004 - 09:39 #2
Det er netop det jeg har gjort - men jeg savnede en løsning der IKKE fjernede de tomme felter i linien - det gør Excel'en. når man har lavet lidt i den, bl.a. med Autofilter - gør det pga at felterne er tomme OG står sidst. Jeg har tomme felter midt i recorden som bibeholdes. Korrekt det er som sådan let nok at fylde de fire felter med "0"'er og gemme - men da det er en procedure der kommer til at ske oftere i nærmere fremtid og indtil jeg har et bedre ERP program til eksport - ledte jeg jo efter den hurtigste og letteste løsning. ja det er et mellemstadig at jeg bruger Excel - filen skal sidenhen uploades til diverse Portaler.
Avatar billede bak Forsker
08. januar 2004 - 11:58 #3
Du kan jo prøve denne makro til at gemme med.
Filen skal gemmes i et andet navn og der må ikke være helt tomme linier i dine data.
Data er sat til at starte ved A1

Sub ExportAsCSV()
Const Delim        As String = ";"  'afgrænser (delimiter)
Dim y              As Long          'tæller
Dim x              As Long          'tæller
Dim strTemp        As String        'streng til de enkelte rækker
Dim lRows          As Long          'antal rækker
Dim lCols          As Long          'antal kolonner
Dim lFno            As Long          'fil nummer
Dim RangeToExport  As Range
Dim CVSfilename    As String
Dim ExtraCols      As Long

ExtraCols = 4
csvfilename = Application.GetSaveAsFilename(fileFilter:="CSV Files (*.csv), *.csv")

Set RangeToExport = ActiveSheet.Range("A1").CurrentRegion
Set RangeToExport = RangeToExport.Resize(, RangeToExport.Columns.Count + ExtraCols)
If RangeToExport Is Nothing Then
        MsgBox "ExportRange ikke defineret"
        Exit Sub
End If
lFno = FreeFile
lRows = RangeToExport.Rows.Count
lCols = RangeToExport.Columns.Count
Open csvfilename For Output As #lFno

For x = 1 To lRows
    strTemp = ""
    For y = 1 To lCols
        strTemp = strTemp & RangeToExport(x, y).Text
        If y < lCols Then
            strTemp = strTemp & Delim
        Else
            Print #lFno, strTemp
        End If
    Next
   
Next
Close #lFno
End Sub
Avatar billede ng_tnt Nybegynder
09. januar 2004 - 11:26 #4
>BAK

Det er jo genialt - har dog lidt kvaler med at få den til at tage alle kolonner og alle linier - hvordan retter jeg dette ?
Avatar billede bak Forsker
09. januar 2004 - 11:42 #5
Den tager udgangspunkt i A1 og går til højre til første tomme kolonne og nedad til første tomme række. Resten kommer ikke med.
Dette kan dog nemt fikses enten ved lave makroen således at du skal markere området eller at den chekker på sidste celle.
Hvad ønsker du ?
Avatar billede ng_tnt Nybegynder
09. januar 2004 - 12:41 #6
>BAK

Ok - det er så fordi jeg har tomme felter(kolonner) indimellem. Undrer mig også over den starter filen med at skrive selve macroen - hvad har jeg gjort galt ?

Må så nok ha den til at anvende udskriftsområdet ! Hvad mener du med sidste celle ? Ku man forestille sig man ku taste det antal felter man ved recorden skal være ?

Takker

ng_tnt
Avatar billede bak Forsker
09. januar 2004 - 14:12 #7
Sådan, test så igen denne makro

Sub ExportAsCSV()
Const Delim        As String = ";"  'afgrænser (delimiter)
Dim y              As Long          'tæller
Dim x              As Long          'tæller
Dim strTemp        As String        'streng til de enkelte rækker
Dim lRows          As Long          'antal rækker
Dim lCols          As Long          'antal kolonner
Dim lFno            As Long          'fil nummer
Dim RangeToExport  As Range
Dim CSVfilename    As String
Dim ExtraCols      As Long

ExtraCols = 4
CSVfilename = Application.GetSaveAsFilename(fileFilter:="CSV Files (*.csv), *.csv")
Set RangeToExport = Range("A1", LastCell(ActiveSheet).Address)
Set RangeToExport = RangeToExport.Resize(, RangeToExport.Columns.Count + ExtraCols)
If RangeToExport Is Nothing Then
        MsgBox "ExportRange ikke defineret"
        Exit Sub
End If
lFno = FreeFile
lRows = RangeToExport.Rows.Count
lCols = RangeToExport.Columns.Count
Open CSVfilename For Output As #lFno

For x = 1 To lRows
    strTemp = ""
    For y = 1 To lCols
        strTemp = strTemp & RangeToExport(x, y).Text
        If y < lCols Then
            strTemp = strTemp & Delim
        Else
            Print #lFno, strTemp
        End If
    Next
   
Next
Close #lFno
End Sub

Function LastCell(ws As Worksheet) As Range
  Dim LastRow&, LastCol%
  On Error Resume Next
  With ws
    LastRow& = .Cells.Find(What:="*", _
      SearchDirection:=xlPrevious, _
      SearchOrder:=xlByRows).Row
    LastCol% = .Cells.Find(What:="*", _
      SearchDirection:=xlPrevious, _
      SearchOrder:=xlByColumns).Column

  End With
  Set LastCell = ws.Cells(LastRow&, LastCol%)
End Function
Avatar billede ng_tnt Nybegynder
09. januar 2004 - 14:51 #8
>BAK

Simpelthen GENIALT....

Mange tak for hjælpen !
Avatar billede ng_tnt Nybegynder
09. januar 2004 - 14:51 #9
UPS - smid lige et svar BAK
Avatar billede bak Forsker
09. januar 2004 - 15:01 #10
ok, glad for, at du kan bruge det
Avatar billede ng_tnt Nybegynder
09. januar 2004 - 15:10 #11
en lille sidste ting - hvordan fan gemmer jeg macroen så den gælder fremtidige filer - skal oprette den for hver gang jeg åbner Excel (Office XP)

;-)
Avatar billede bak Forsker
09. januar 2004 - 15:17 #12
Du skal gemme den i person.xls
hvis du ikke kan finde den i VBA editoren er det måske fordi den ikke er der.
Så opretter du den ved at indspille en ny makro og der hvor der Gem makroen i vælger du Personligt makroark.
Afslut indspilning og du har så person.xls til rådighed. Den er skjult og vil altid åbnes sammen med excel for eftertiden.
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