Avatar billede hostgirl Nybegynder
08. august 2005 - 11:55 Der er 12 kommentarer og
1 løsning

Importere fra Excel til datagrid og eksportere til Access

Hej alle

Jeg har et problem, og det er:

Jeg kan godt finde ud af at impotere en masse indhold fra en excel fil til et datagrid. Derudover kan jeg også godt få data hentet fra en access database til datagrid og opdatere denne data. Dvs. jeg kan godt få fyldt dataset'ne, men er uviden om hvordan jeg skal forsætte

Det jeg ikke kan, er at hente informationen fra Excel til datagrid og gemme dataen i Access database. Hvordan kan dette nemmeste gøres? Antal kolonner er det samme i excel og access databasen.

Håber der er nogen som kan hjælpe eller kan give en alternativ løsning til hvordan dette kan gøres. Evt en løsning til hvordan man copy paste fra excel til et datagrid som har dataset fra Access

På forhånd tak
Avatar billede arne_v Ekspert
08. august 2005 - 12:21 #1
Var det ikke nemmere at læse fra Excel med en DataReader og skrive til
Access med INSERT sætninger ?
Avatar billede hostgirl Nybegynder
08. august 2005 - 12:55 #2
Jo, det kunne vidst godt ske, havde jeg ikke tænkt over.

Hvilke imports skal man have, og hvordan kan jeg vælge et bestemt område i excel filen?
Avatar billede arne_v Ekspert
08. august 2005 - 13:29 #3
række 1 i Excel betragtes normalt som felt navne, så du kan vælge kolonner
i select listen

rækker kan du vælge med en where betingelse
Avatar billede hostgirl Nybegynder
08. august 2005 - 14:20 #4
strSQL = "SELECT * FROM [Sheet1$]"
    objConn = New OleDb.OleDbCommand(strSQL, objConn)
    objConn.Open()
    Try
      drOLE = objConn.ExecuteReader(CommandBehavior.Default)
    Catch ex As Exception
      MsgBox(ex.Message)
      End
    End Try
    If drOLE.HasRows Then
      drOLE.Read()
      Do
        Try
          'INSERT INTO TABEL osv.
        Catch ex As Exception
          MsgBox(ex.Message)
          End
        End Try
      Loop While drOLE.Read
    End If

Sådan ser min kode ud nu, men hvis jeg nu kun ønsker den skal tage a4 til c7. Den har namerange "Ordrelinjer" kan man bruge det istedet for [sheet1$], plus excel filen kan have flere sheets, som fx. ordre 1, ordre2. Hvordan skal SELECT metoden se ud?  ordre 1.#Ordrelinjer# eller? er rimelig ny indefor det med excel og vb :)
Avatar billede arne_v Ekspert
08. august 2005 - 14:51 #5
k1    k2    k3    k4
1    2    3    4
5    6    7    8
9    10    11    12
13    14    15    16

using System;
using System.Data.OleDb;

class MainClass
{
    public static void Main(string[] args)
    {
        OleDbConnection con = new OleDbConnection( @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Book2.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""");
        con.Open();
        OleDbCommand cmd = new OleDbCommand("SELECT k2,k3 FROM [sheet1$] WHERE k1 >= 2", con);
        OleDbDataReader rdr = cmd.ExecuteReader();
        while(rdr.Read()) {
            double k2 = (double)rdr[0];
            double k3 = (double)rdr[1];
            Console.WriteLine(k2 + " " + k3);
        }
        con.Close();
    }
}

6 7
10 11
14 15
Avatar billede arne_v Ekspert
08. august 2005 - 14:52 #6
jeg kan ikke få en AND til at virke i WHERE - det må du nok pusle lidt med
Avatar billede arne_v Ekspert
08. august 2005 - 15:38 #7
sorry det var C# - her kommer VB.NET:

Imports System
Imports System.Data.OleDb

Class MainClass
    Public Shared Sub Main(ByVal args As String())
        Dim con As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Book2.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""")
        con.Open
        Dim cmd As OleDbCommand = New OleDbCommand("SELECT k2,k3 FROM [sheet1$] WHERE k1 >= 2", con)
        Dim rdr As OleDbDataReader = cmd.ExecuteReader
        While rdr.Read
            Dim k2 As Double = CType(rdr(0), Double)
            Dim k3 As Double = CType(rdr(1), Double)
            Console.WriteLine(k2 & " " & k3)
        End While
        con.Close
    End Sub
End Class
Avatar billede hostgirl Nybegynder
08. august 2005 - 16:01 #8
Jeg takker endnu engang for din hjælp, jeg har dog ikke testet det endnu, men hvis du ligger et svar giver jeg respons imorgen.
Avatar billede arne_v Ekspert
08. august 2005 - 16:02 #9
svar
Avatar billede hostgirl Nybegynder
09. august 2005 - 09:09 #10
hmm arne v. Selv koden fungere fint, men den "æder" eller springer den første linje over i excel dokumentet. Hvis jeg fx. har 19 rækker tager din kode kun de 18 rækker, hvad kan det skyldes?
Avatar billede arne_v Ekspert
09. august 2005 - 09:45 #11
du er opmærksom på at øverste række bruges til kolonne navne ??
Avatar billede arne_v Ekspert
09. august 2005 - 10:25 #12
hvis ikke du har det skal du bruge HDR=No og nogle andre feltnavne
(mit setup vælger tilsyneladende at kalde felterne f1,f2,f3,f4)
Avatar billede hostgirl Nybegynder
09. august 2005 - 10:59 #13
oki, derfor så :) Tusind tak for hjælpen
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