Avatar billede funstuff.dk Nybegynder
09. marts 2006 - 21:38 Der er 2 kommentarer og
1 løsning

Import / eksport af csv fil

Hej.

Har en side med en database over en masse produkter, kunne godt tænke mig og får en asp fil til at lave noget eksport af nogle data som gemmes i en csv fil så det hele kan rettes i exel og senere uploades igen. Men hvordan gør man sådan noget? Nogle der kan hjælpe.

Min server køre asp med en ms sql db.

På forhånd tak
Avatar billede eagleeye Praktikant
09. marts 2006 - 22:25 #1
Her er noget kode som kan skrive en cvs fil, koden benytter filesysmteobject til at skive til filen, du kan angive navnet på filen i denne linie:
csvfile = server.Mappath ("filnavnet.csv")

I koden er vbCrLf valgt som "ny post" og komma valgt som kolonne skille tegn som kan ændre i disse to linier:
cvsLinieSkift = vbCrLf
skilleTegn = "," 'typisk skille tegn er komma


I koden kan du også vælge om du ønsker første i linie cvs filen skal være kolonnenavne på kolonner i database og kan slås til/fra i denne linie:
skrivKolonneNavne = true ' hvis du ikke ønsker kolonnenanve sæt til false


Koden er lavet sådan den tager alle kolonner som er i recordsetet og ligger i cvs filen så du kan bruge SQL sætningen til at begrænse dem du ønsker, hvis du ikke ønsker dem alle sammen.


Lige nu er connection stringen til en access database fil, og den skal naturligvis rettes til så den passer med din MSSQL db.


Her er koden:

<%
'CVS filen som der skal gemme data i
csvfile = server.Mappath ("filnavnet.csv")

'Definer linie skift (ny post) tegnet til cvs filen normalt bruges LineFeed (vbLf) eller
'Carriage Return og Line Feed (vbCrLf), andre tegn kan også bruges
cvsLinieSkift = vbCrLf
skilleTegn = "," 'typisk skille tegn er komma

'Benytter FSO til at skrive til filen
set FSO = Server.CreateObject("Scripting.FilesystemObject")
set fil = FSO.OpenTextFile(csvfile, 2, true)

'Opretter connection til databasen den skal rettes til så den passer med din datase
Set rs = Server.CreateObject("ADODB.RecordSet")
Set conn = Server.CreateObject("ADODB.Connection")
strDSN = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("db1.mdb")
Conn.Open strDSN

'Henter alt fra tabllen
SQL = "SELECT * FROM tabelnavn"
Set rs = Conn.Execute(SQL)

'Skriver føste række i filen og det er kolonnenavne
skrivKolonneNavne = true ' hvis du ikke ønsker kolonnenanve sæt til false
if skrivKolonneNavne then
  if not rs.EOF then
    tmp = ""'
    for each f in rs.Fields
      tmp = tmp & "," & f.name
    next
    tmp = mid(tmp,2) & cvsLinieSkift
    fil.Write (tmp)
  end if
end if
'Skriver data til filen
do while not rs.EOF
  tmp = ""
  for each f in rs.Fields
    s=f
    ao = false
    'Hvis der er , eller " i strengen skal der " omkring data. Samt " i teksten skal udskiftes med ""
    if inStr(1, s, """") > 0 then
      s = replace(s, """", """""")
      ao = true
    end if
    if inStr(1, s, skilleTegn) > 0 then
      ao = true
    end if
    if ao then
      s = """" & s & """"
    end if   
    tmp = tmp & "," & s
  next
  tmp = mid(tmp,2) & cvsLinieSkift
  fil.Write (tmp)

  rs.MoveNext
loop

rs.Close
fil.Close
Conn.Close

%>
Avatar billede eagleeye Praktikant
09. marts 2006 - 22:56 #2
Hmm der er lige noget som skal rettes den magler at tage højde for return i teksten:


<%
'CVS filen som der skal gemme data i
csvfile = server.Mappath ("filnavnet.csv")

'Definer linie skift (ny post) tegnet til cvs filen normalt bruges LineFeed (vbLf) eller
'Carriage Return og Line Feed (vbCrLf), andre tegn kan også bruges
cvsLinieSkift = vbCrLf
skilleTegn = "," 'typisk skille tegn er komma

'Benytter FSO til at skrive til filen
set FSO = Server.CreateObject("Scripting.FilesystemObject")
set fil = FSO.OpenTextFile(csvfile, 2, true)

'Opretter connection til databasen den skal rettes til så den passer med din datase
Set rs = Server.CreateObject("ADODB.RecordSet")
Set conn = Server.CreateObject("ADODB.Connection")
strDSN = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("db1.mdb")
Conn.Open strDSN

'Henter alt fra tabllen
SQL = "SELECT * FROM tabelnavn"
Set rs = Conn.Execute(SQL)

'Skriver føste række i filen og det er kolonnenavne
skrivKolonneNavne = true ' hvis du ikke ønsker kolonnenanve sæt til false
if skrivKolonneNavne then
  if not rs.EOF then
    tmp = ""'
    for each f in rs.Fields
      tmp = tmp & "," & f.name
    next
    tmp = mid(tmp,2) & cvsLinieSkift
    fil.Write (tmp)
  end if
end if
'Skriver data til filen
do while not rs.EOF
  tmp = ""
  for each f in rs.Fields
    s=f
    ao = false
    'I nogle tilfælde skal der " omkring data. Samt " i teksten skal udskiftes med ""
    if inStr(1, s, """") > 0 then
      s = replace(s, """", """""")
      ao = true
    end if
    if inStr(1, s, skilleTegn, 1) > 0 then
      ao = true
    end if
    if inStr(1, s, vbCrLf) > 0 then
      ao = true
    end if
    if left(s, 1) = " " or right(s, 1) = " " then
    ao = true
  end if
  if ao then
    s = """" & s & """"
  end if   
  tmp = tmp & "," & s
  next
  tmp = mid(tmp,2) & cvsLinieSkift
  fil.Write (tmp)

  rs.MoveNext
loop

rs.Close
fil.Close
Conn.Close

%>



koden skulle gerne følge denne guide:
http://www.creativyst.com/Doc/Articles/CSV/CSV01.htm
Avatar billede funstuff.dk Nybegynder
10. marts 2006 - 16:52 #3
tak for hjælpen. så fik jeg lært det.. Har fundet noget kode der sku ku importere filen. Så det er bare og rode lidt med det..
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