IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API, COM et SDKs Delphi Discussion :

Comment importer donnees d'une page excel


Sujet :

API, COM et SDKs Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Par défaut Comment importer donnees d'une page excel
    Bonjour,
    Voilà, j'ai ce côde qui marche très bien, mais il sert à exporter données d'une base paradox 7 vers une page excel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    procedure TForm1.Export1Click(Sender: TObject);
    var
    XLApp:Variant;
    NbLigne:Integer;
    begin
        if MessageDlg('Confirmez l''exportation du fichier vers excel?',mtConfirmation,[mbOK, mbCancel],0)=mrOk then
        begin
        Try XLApp:=CreateOleObject('Excel.Application');
        except
        ShowMessage('Démarrage de Excel impossible');
        Exit;
        end;
        XLApp.Visible:=True;
        XLApp.Workbooks.Add;
        //Les champs suivants seront exportés
        XLApp.Cells[1,1].Value:='Champ1';
        XLApp.Cells[1,2].Value:='Champ2';
        XLApp.Cells[1,3].Value:='Champ3';
        XLApp.Cells[1,3].Value:='Champ4';
        XLApp.Cells[1,3].Value:='Champ5';
     
        NbLigne:=3;
        with Table1 do
        begin
        first;
        while not(EOF) do
        begin
        //Remplissage des champs
    XLApp.Cells[NbLigne,1].Value := FieldByName(' Champ1').AsString;
    XLApp.Cells[NbLigne,2].Value := FieldByName(' Champ2').AsString;
    XLApp.Cells[NbLigne,3].Value := FieldByName(' Champ3').AsString;
    XLApp.Cells[NbLigne,4].Value := FieldByName(' Champ4').AsString;
    XLApp.Cells[NbLigne,5].Value := FieldByName(' Champ5').AsString;
     
        inc (NbLigne);
        Next;
        end;
        end;
    end;
    end;
    Maintenant, je souhaite pouvoir IMPORTER donnees à partir d'une page excel. Comment faire????

    Merci d'avance pour toute aide!!

  2. #2
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Tu inverses les affectations ???

    bon d'accord, il faut mettre ta table en edition, éventullement crééer ou se positionner sur des enreg de la table...


    mais as-tu réellement creusé la question et compris le code que tu as posté ?
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Par défaut
    Non, si j'avais compris tout ça, ce serait probablèment plus simple, mais je fais comme je peux...
    Donc, si tu peux me faire cette "inversion", je te remercie par avance.

  4. #4
    Membre expérimenté

    Profil pro
    Personnel
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Personnel

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Par défaut
    Salut,
    Pour placer des données du tableur vers la BD, il est impératif, déjà, de connaitre le type des données... si tu colle un string dans champ integer...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    var
      XlsPage: _Worksheet;
      XlsWork: _workbook;
    // init de la page:
    // XlsPage := XlsWork.Worksheets['feuille 1'] as _worksheet;
    // voir la FAQ Delphi...
     
    procedure TForm1.lireXls;
     var
      iCol, iLine: integer;  // ref sur cellule XLS
      iVal1, iVal2: integer  // pour remplir champ de BD
      sNom, sPNom: string;  // pour remplir champ de bD
      bFin: boolean;  // sortie de boucle
     begin
      iLine := 1;  // ligne début XLS
      bFin := false;  // pour boucler la lecture des lignes
      // lecture des colonnes
      Repeat
        for iCol := 1 to 4 do begin
          if R_XlsCell(iLine, 1) = '' then begin
            // Cellule vide = fin des données XLS
            bFin := true;
            Break;  
          end;  // if
          Value := R_XlsCell(iLine, iCol);  // lire Cells XLS
          Case iCol of
            1: sNom := Uppercase(Value);
            2: sPNom := Uppercase(Value);
            3: iVal1 := Value;
            4: iVal2 := Value;
          End;
          // sauvegarde dans la BD
          SaveInBD(sNom, sPNom, iVal1, iVal2);
        end;  // for
        Inc(iLine);  // ligne suivante tableur
      Until bFin;
     end;
    // lecture du fichier XLS
    function TForm1.R_XlsCell(Line, Col: integer): variant;
     begin
       Result := XlsPage.Cells.Item[Line, Col].Value;
     end;
    // Ecrire dans la BD
    procedure TForm1.SaveInBD(sNom, sPNom: string; iVal1, iVal2: integer);
     begin
      with datamodule.table1 do begin
        Filtered := false;
        Open;
        // on vérifie si les données existent déjà
        SetKey;
        FieldByName('Nom').AsString := sNom;
        FieldByName('Prenom').AsString := sPNom;
        if GotoKey then  // si table indexée
          Edit  // pour éviter violation de clef
        else
          Append;  // n'existe pas = ajoute
        FieldByName('Nom').AsString := sNom;
        FieldByName('Prenom').AsString := sPNom;
        FieldByName('Valeur 1').AsInteger := iVal1;
        FieldByName('Valeur 2').AsInteger := iVal2;
        Post;
        Close;
     end;
    Par exemple...
    @+
    Fabrice

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Par défaut
    En effet, dans ma base tous les champs sont "string". Je n'arrive pas faire fonctionner ce côde! Peux-tu poster Unit1 entier? Car, sinon, je ne m'ensortirai pas...

    Merci beaucoup.

  6. #6
    Membre expérimenté

    Profil pro
    Personnel
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Personnel

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Par défaut
    Ce code n'est qu'un exemple ! Je n'ai pas d'unit correspondante...
    Le principe:
    _ Ouverture du fichier Excel (TExcelApplication ou par OLE)
    _ Ouvrir le classeur (XlsWork: _WorkBook)
    _ Se connecter à la page (XlsPage: _WorkSheet)
    _ Boucle de Lecture les données XLS, soit par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Valeur := XlsPage.Range['E1','E3'].Value;
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Valeur := XlsPage.Cells.Item[Ligne, Colonne].Value;
    _ Ecrire les valeurs dans la BD
    _ boucler tant que les valeurs existent dans XLS...
    >> Voir la FAQ Delphi aussi...
    Si tu ne comprends pas, dis moi quoi, ou passe une partie de ton code...
    @+
    Fabrice

  7. #7
    Membre expérimenté

    Profil pro
    Personnel
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Personnel

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Par défaut
    Salut
    Donc je t'ai fait une petite applic qui ouvre un fichier XLS existant: Classeur1.Xls (même dossier que l'applic), la 1ère Feuille est nommée 'Feuil1' par défaut.
    L'applic permet de lire et écrire dans la 1ère Cellule [1,1].
    La form comporte
    _ 4 Button
    _ 2 Edit
    _ 1 composant Serveur TExcelApplication

    Voilà le fichier Text de la Fiche Unit1.dfm, pour décrire les composants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    object Form1: TForm1
      Left = 540
      Top = 453
      Width = 591
      Height = 427
      Caption = 'Ole avec Excel'
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -14
      Font.Name = 'MS Sans Serif'
      Font.Style = []
      OldCreateOrder = False
      PixelsPerInch = 120
      TextHeight = 16
      object btnCloseExcel: TButton
        Left = 167
        Top = 10
        Width = 139
        Height = 31
        Caption = 'Fermer Excel'
        TabOrder = 0
        OnClick = btnCloseExcelClick
      end
      object OpenXls: TButton
        Left = 8
        Top = 10
        Width = 139
        Height = 30
        Caption = 'Lancer / Ouvrir XLS'
        TabOrder = 1
        OnClick = OpenXlsClick
      end
      object edRCell: TEdit
        Left = 167
        Top = 258
        Width = 139
        Height = 24
        TabOrder = 2
      end
      object btnWriteCell: TButton
        Left = 10
        Top = 207
        Width = 139
        Height = 31
        Caption = 'Insérer du texte'
        TabOrder = 3
        OnClick = btnWriteCellClick
      end
      object edWCell: TEdit
        Left = 167
        Top = 211
        Width = 139
        Height = 24
        TabOrder = 4
      end
      object btnReadCell: TButton
        Left = 10
        Top = 255
        Width = 139
        Height = 31
        Caption = 'Lire du texte'
        TabOrder = 5
        OnClick = btnReadCellClick
      end
      object XlsApp: TExcelApplication
        AutoConnect = False
        ConnectKind = ckRunningOrNew
        AutoQuit = False
        Left = 140
        Top = 52
      end
    end
    Et le code de l'unité Unit1.pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
     
    UNIT Unit1;
     
    INTERFACE
     uses
    	Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    	StdCtrls, ComObj, Variants, OleServer, Excel2000, ActiveX;
     
     type
    	TForm1 = class(TForm)
    		btnCloseExcel: TButton;
    		OpenXls: TButton;
    		edRCell: TEdit;
    		btnWriteCell: TButton;
    		edWCell: TEdit;
    		btnReadCell: TButton;
    		XlsApp: TExcelApplication;
    		procedure btnCloseExcelClick(Sender: TObject);
    		procedure OpenXlsClick(Sender: TObject);
    		procedure btnWriteCellClick(Sender: TObject);
    		procedure btnReadCellClick(Sender: TObject);
    	private
    		function XlsInit(var lcid: integer; var XlsApp: TExcelApplication; var XlsWork: _workbook; var XlsPage: _Worksheet;
    									sFile, sNameWork: string; bVisible: boolean): boolean;
    		procedure XlsClose(XlsApp: TExcelApplication; XlsWork: _workbook; bSave: boolean);
    		function Xls_RCell(Line, Col: integer): variant;
    		procedure Xls_WCell(Line, Col: integer; Value: variant);
     
    	public
    		{ Déclarations publiques }
    	end;
     
     var
    	Form1: TForm1;
     
    IMPLEMENTATION
     
    {$R *.DFM}
     var
    	lcid: integer;
    	XlsWBook: _workbook;	// classeur
    	XlsPage: _Worksheet;	// Feuille
     
    procedure TForm1.btnCloseExcelClick(Sender: TObject);
     var
    	bSaveXls: boolean;
     begin
    	// Fermer Excel
    	bSaveXls := false;	// pas de sauvegarde
    	XlsClose(XlsApp, XlsWBook, bSaveXls);
     end;
     
    procedure TForm1.OpenXlsClick(Sender: TObject);
     var
    	sFile: string;
    	bVisibleXls: boolean;
    	sNameFeuille: string;
     begin
    	// Lancer Excel + Open Xls
    	sFile := 	ExtractFilePath(Application.ExeName) + 'Classeur1.XLS';
    	bVisibleXls := false;	// Voir Excel
    	sNameFeuille := 'Feuil1';
    	XlsInit(lcid, XlsApp, XlsWBook, XlsPage, sFile, sNameFeuille, bVisibleXls);
     end;
     
    procedure TForm1.btnReadCellClick(Sender: TObject);
     var
    	iLine, iCol: integer;
     begin
    	// lecture d'une cellule
    	iLine := 1;
    	iCol := 1;
    	edRCell.Text := Xls_RCell(iLine, iCol);
     end;
     
    procedure TForm1.btnWriteCellClick(Sender: TObject);
     var
    	iLine, iCol: integer;
    	oValue: variant;
     begin
    	//Insére du texte dans la première cellule [1,1]
    	iLine := 1;
    	iCol := 1;
    	ovalue := edWCell.Text;
    	Xls_WCell(iLine, iCol, oValue);
     end;
     
    // lancer / ouvrir fichier XLS
    function TForm1.XlsInit(var lcid: integer; var XlsApp: TExcelApplication; var XlsWork: _workbook; var XlsPage: _Worksheet;
    									sFile, sNameWork: string; bVisible: boolean): boolean;
     begin
    	Result := true;
    	CoInitialize(nil);
    	TRY
    		lcid := GetUserDefaultLCID; 			// Identifiant local
    		XlsApp.Visible[lcid]:= bVisible; 	// lance Excel
    		XlsWork := XlsApp.Workbooks.Open(sFile, False,False, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
    																		 EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,0);
    	EXCEPT
    		ShowMessage('Excel indisponible, ou fichier occupé... Ré-essayer plus tard !');
    		if XlsWork <> nil then
    			XlsApp.Quit;
    		Result := false;
    		Exit;
    	END;
    	XlsPage := XlsWork.Worksheets[sNameWork] as _worksheet;
     end;
    // fermer Excel
    procedure TForm1.XlsClose(XlsApp: TExcelApplication; XlsWork: _workbook; bSave: boolean);
     begin
    	XlsWork.Close(bSave, emptyparam, emptyparam, lcid);
    	XlsApp.Quit;
     end;
    // Lecture d'une cellule
    function TForm1.Xls_RCell(Line, Col: integer): variant;
     begin
    	Result := XlsPage.Cells.Item[Line, Col].Value;
     end;
    // Ecriture dans une cellule
    procedure TForm1.Xls_WCell(Line, Col: integer; Value: variant);
     begin
    	if Value <> NULL then
    		XlsPage.Cells.Item[Line, Col] := Value;
     end;
     
    END.
    Essaie de comprendre et de l'adapter suivant tes besoins...
    @+
    Fabrice[/code]

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Par défaut
    MERCI BEAUCOUP, MFDev!!! C'est seulement de cette manière que je peux arriver à bout de ce problème qui est assez complexe pour moi. Je te remercie très, très beaucoup!!! Actuellement je ne peux pas tester tout ça, mais demain je le teste et si tout va bien, je serais extremmement happy!
    Bonne continuation!

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Par défaut
    Ca marche!!
    Maintenant, dans le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm1.btnReadCellClick(Sender: TObject);
    var
       iLine, iCol: integer;
     begin
       // lecture d'une cellule
       iLine := 1;
       iCol := 1;
       edRCell.Text := Xls_RCell(iLine, iCol);
     end;
    comment faire une boucle pour dire: "tous les lignes de la colonne A de cette page excel -> copier (lire) vers ma base (paradox7) et les mettre dans la valeur "nom" (je veux pouvoir par un click du bouton copier les données d'une colonne excel vers ma base). J'ai un composant DBGrid1 et la première colonne est la valeur "NOM".
    Après, je peux me débrouiller pour le reste... enfin... j'espère!
    Merci encore.

  10. #10
    Membre expérimenté

    Profil pro
    Personnel
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Personnel

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Par défaut
    Si tu connais le nombre colonnes, une boucle for...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    procedure TForm1.btnReadCellClick(Sender: TObject);
    var
      iMaxCol: integer;  // Nb max de colonnes à lire dans XLS
      iLine, iCol: integer;  // réf des ligens / colonnes XLS
      aoValue1: array[0..2] of variant;  // mémo des valeurs des colonnes de la ligne en cours
      bFin: boolean;  // test fin de traitement atteinte
     begin
      { la table 'datamodule.table1' a été ouverte par Open.
         Je considère une table avec 3 champs de type string, par ex:
         Fields[0].asString;  // ou FieldByName('Nom').asString;
         Fields[1].asString;  // ou FieldByName('Prénom').asString;
         Fields[2].asString;  // ou FieldByName('Genre').asString;
         Index primaire sur les champs 0 et 1. = tri de la table sur Nom/ Prénom
         IndexName := '';  // table index primaire activé
         Sur la fiche rajouter une TListBox, pour afficher des infos, pour la démonstration uniquement.
      }
      iMaxcol := 3;  // définir le max de colonnes à lire
      iLine := 1;  // 1ère ligne
      bFin := false;
      // boucle de lecture des lignes
      repeat
        for iCol := 1 to iMaxCol do
          // lecture d'une cellule et mémo dans le tableau
          oValue[i - 1] := Xls_RCell(iLine, iCol); // mémo valeur
        // colonnes lues, on transfère dans la table
        CopyToBD(aoValue, iMaxCol - 1, iLine);
        Inc(iLine);  // ligne suivante
        // test ligne suivante si dernière de ligne atteinte
        if Xls_RCell(iLine, iCol) = '' then
          bFin := true;  // Cellule vide = fin des données Excel
          // bFin := true, ou Break; = sortie de la boucel
      until bFin;
     end; 
     
    procedure CopyToBD(aoValue: array of variant; iNb, iLine: integer);
     begin
      /: écriture dans la table
      with datamodule.Table1 do begin
        /: on recherce en 1er lieu si les valeurs existent déjà
        SetKey;
        Fields[0].asString := aoValue[0];    
        Fields[1].asString := aoValue[1];
        if Gotokey then begin
          { valeurs trouvées, si on écrit cette valeur dans la table indexée, 
             on aura une violation de clef, les tables indexées n'acceptant pas    
             de doublons.
          }
          listBox1.Items.Add('valeurs en double L:' + IntToStr(iLine) + ' = '  + aoValue[0] + ' - ' + aoValue[1] + ' - ' + aoValue[2]);
          {si l'on veut écraser les valeurs existantes de la table, il suffit de faire
            Edit;
            Les nouvelles valeurs remplaceront les anciennes
          }
        end
        else
          // valeurs inexistantes, on ajoute
          Append;
          for i := 0 to iNb do
            // copy du tableau dans la table
            Fields[i].asString := aoValue[i];
          { ou autre métohde:
            Fields[0].asString := aoValue[0]; // ou  FieldByName('Nom').asString := oValue;  
            Fields[1].asString := aoValue[1]; // ou  FieldByName('Prénom').asString := oValue;
            Fields[2].asString := aoValue[2]; // ou  FieldByName('Genre').asString := oValue;
          }
          Post;
        end;  // if    
      end;  // with
     end;
    Voilà, par exemple...
    Il faut se servir de l'aide F1, des FAQ, et essayer d'étudier des programmes fait par d'autres...
    @+
    Fabrice

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Par défaut
    Malheureusement, j'obtiens une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Identificateur non déclaré: 'oValue'
    Et si je "regle" celui-ci, j'ai une autre erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Identificateur non déclaré: 'i'
    Et si je "regle" celui-ci, j'ai une autre erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Identificateur non déclaré: 'CopyToBD'
    [/code]

  12. #12
    Membre expérimenté

    Profil pro
    Personnel
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Personnel

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Par défaut
    Effectivement il y a des erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    aoValue1: array 
     >> à remplacer par aoValue: array
    ...
    for iCol := 1 to iMaxCol do
          // lecture d'une cellule et mémo dans le tableau
          oValue[i - 1] := Xls_RCell(iLine, iCol); // mémo valeur 
    >> remplace oValue par aovalue[
    ...
    procedure CopyToBD(aoValue: array of variant; iNb, iLine: integer); 
    >> à modifier: procedure TForm1.CopyToBD(aoValue: array of variant; iNb, iLine: integer); 
    >> et tu déclares dans la partie Private de l'entête de Unit1:
    procedure CopyToBD(aoValue: array of variant; iNb, iLine: integer); 
     
    >> pour le 'i' non déclaré, tu le fais come cela:
    procedure TForm1.CopyToBD(aoValue: array of variant; iNb, iLine: integer); 
     var
      i: integer
     begin
    ...
    Désolé, mais cela a été écrit de tête sans vérif dans Delphi. Mais si tu as corrigé les erreurs c'est pas mal.
    @+
    Fabrice

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Par défaut
    Je n'arrive pas faire marcher ceci, mais PAS GRAVE: j'ai trouvé la solution:
    Il faut simpement copier la page excel vers dbgrid1!
    Donc, pour simplifier, je modifie ma question: comment dire "ce qui se trouve dans la colonne "a" de la page excel, copier vers la colonne "a" ("nom") de ma dbgrid1?

    Voilà, après ça, tout sera resolu!

  14. #14
    Membre expérimenté

    Profil pro
    Personnel
    Inscrit en
    Septembre 2003
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France, Meuse (Lorraine)

    Informations professionnelles :
    Activité : Personnel

    Informations forums :
    Inscription : Septembre 2003
    Messages : 142
    Par défaut
    Ton DBGrid est connecté à la base de donnée, et reflète donc les données qui s'y trouvent. Pour modifier / ajouter tu as 2 solutions:
    _ écrire directement dans la base de données, c'est la meilleure méthode, celle que je t'ai proposé.
    _ écrire dans le DBgrid, qui mettra à jour la base de donnée. avec ce genre de bricolage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	Table1.Append;
    	DBGrid1.Fields[0].AsString := Valeur;
    	Table1.Post;
    Dans ces 2 cas, sert toi de l'aide de Delphi, trés bien faite.
    Comme il te manque quelques bases de la gestion des BD, va voir aussi:
    http://lberne.developpez.com/delpdox/delphibdd/
    http://delphi.developpez.com/cours/sgbd/article/
    et l'excellente fAQ:
    http://delphi.developpez.com/faq/
    Bon courage
    @+
    Fabrice

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Par défaut
    Merci beaucoup Fabrice, notamment pour ta patience avec moi...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment appeler une page excel avec JSF
    Par rabebIF5 dans le forum JSF
    Réponses: 3
    Dernier message: 02/06/2009, 08h12
  2. [VBA-E]Comment faire pour écrire dans une page excel existante ?
    Par pauletta22 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/05/2006, 13h54
  3. Importer donnees texte d'une page Excel vers la base Paradox
    Par kikica dans le forum Bases de données
    Réponses: 10
    Dernier message: 29/03/2006, 10h01
  4. Comment créer et executer une page jsp sur eclipse et tomcat
    Par debutantjak dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 16/03/2006, 18h21
  5. Réponses: 1
    Dernier message: 22/12/2005, 17h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo