1 pièce(s) jointe(s)
importer des données excel dans une application delphi
Bonjour,
J'ai un fichier Excel qui se compose de trois lignes et cinquante colonnes, j'ai créé un code avec Delphi 6 pour l'ouvrir et copier le contenu dans un memo, jusqu'au la tout va bien.
Code:
1 2 3 4 5 6 7 8
| XLApp := CreateOleObject('Excel.Application');
XLApp.Visible := True;
WorkBook:=XLApp.Workbooks.Open('C:\Program Files\Borland\MABASE DE DONNE .xls');
Sheets := XLApp.Workbooks[1].Worksheets['Feuil1'];
Sheets := XLApp.Sheets;
Sheets.Item['Feuil1'].Activate;
Sheets.Item['Feuil1'].UsedRange.copy;
Memo1.PasteFromClipboard; |
Ce que je veux faire par la suite c'est de faire un offset dans la lecture du fichier Excel à partir de la dixième colonne.
c-à-d le code cité en haut doit lire à partir de la dixième colonne et copie les colonnes jusqu'à 50 colonnes du (10 au 50 COLONNE) dans le memo verticalement avec un offset avec cette commande cité ci-dessous :
Code:
Seek File(FileHandle, 0,0)
Dans le cas ou c'est faisable est ce que avec un seul bouton click je peux remplir trois memo,
Memo1 reçoit la ligne 1 avec un offset de lecture dans un fichier Excel à partir de la dixième colonne, et affiche les données de la collone 10 jusqu'à 50 dans memo1 verticalement (1)
Memo2 reçoit la ligne 2 avec le même principe que (1).
Memo3 reçoit la ligne 3 avec le même principe que (1).
Comment faire mes frères, j'attends votre aide.
2/ après deux jours j'ai trouvé ce qui suit :
J'ai trouvé un code qui cache les colonnes sélectionés , veuillez touver ci-dessous le nouveau code :
Code:
1 2 3 4 5 6 7 8 9
| XLApp := CreateOleObject('Excel.Application');
XLApp.Visible := True;
WorkBook:=XLApp.Workbooks.Open('C:\Program Files\Borland\doc .xls');
Sheets := XLApp.Workbooks[1].Worksheets['Feuil1'];
Sheets := XLApp.Sheets;
Sheets.Item['Feuil1'].Activate;
Sheets.Item['Feuil1'].Range['A1','J1'].EntireColumn.Hidden:=True;
Sheets.Item['Feuil1'].UsedRange.copy;
Memo1.PasteFromClipboard; |
Et ça marche bien , seulment sur la première ligne qui a 50 colonne .
Comment faire pour la deuxième et la troisième ligne ?
Je veux que memo2 recoit la ligne2 et memo3 recoit la ligne3 avec un seul bouton clic , s'il y a d'autre suggéstion veuillez m'aider
2/ Est ce que l'utilisation d'un stringgrid est souhaitable, si ces le cas merci de m'éclaircir le chemin à suivre
NB: le fichier joint donne plus d'information .
Merci d'avance
importer des données excel dans une application delphi
Bonjour,
Merci pour votre réponse.
Je vais essayer d'utiliser votre suggestion et tu seras informé le plutôt possible.
J'ai trouvé un code qui affiche le contenu de mon fichier joint, en utilisant seulement un button clic et un stringgrid.
Ci-dessous le code :
Code:
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
| function Xls_To_StringGrid(AGrid: TStringGrid; AXLSFile: string): Boolean;
const
xlCellTypeLastCell = $0000000B;
var
XLApp, Sheet: OLEVariant;
RangeMatrix: Variant;
x, y, k, r: Integer;
begin
Result := False;
// Create Excel-OLE Object
XLApp := CreateOleObject('Excel.Application');
try
// Hide Excel
XLApp.Visible := False;
// Open the Workbook
XLApp.Workbooks.Open(AXLSFile);
// Sheet := XLApp.Workbooks[1].WorkSheets[1];
Sheet := XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1];
// In order to know the dimension of the WorkSheet, i.e the number of rows
// and the number of columns, we activate the last non-empty cell of it
Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;
// Get the value of the last row
x := XLApp.ActiveCell.Row;
// Get the value of the last column
y := XLApp.ActiveCell.Column;
// Set Stringgrid's row &col dimensions.
AGrid.RowCount := x;
AGrid.ColCount := y;
// Assign the Variant associated with the WorkSheet to the Delphi Variant
RangeMatrix := XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value;
// Define the loop for filling in the TStringGrid
k := 1;
repeat
for r := 1 to y do
AGrid.Cells[(r - 1), (k - 1)] := RangeMatrix[K, R];
Inc(k, 1);
AGrid.RowCount := k + 1;
until k > x;
// Unassign the Delphi Variant Matrix
RangeMatrix := Unassigned;
finally
// Quit Excel
if not VarIsEmpty(XLApp) then
begin
// XLApp.DisplayAlerts := False;
XLApp.Quit;
XLAPP := Unassigned;
Sheet := Unassigned;
Result := True;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Xls_To_StringGrid(StringGrid1, 'C:\Program Files\Borland\MABASE DE DONNE.xls') then
ShowMessage('importation réussie!');
end;
end. |
Le code copie bien le contenu de ma base de donné dans stringgrid.
Le problème maintenant c’est je veux utiliser le contenu du stringgrid dans une application (utilisation avec script).
Si je vais utiliser un memo voir l’exemple ci-dessous :
memo1.lines.Add (‘ALVI’ +':'+'PO'+'=' + 'NRVP' + (contenu de chaque colonne de la ligne 1 qui va de la première colonne à la dernière colonne de ma base de donnés) + ';’);
memo1.lines.Add (‘ALVI’ +':'+'PO'+'=' + 'NRVP' + (contenu de chaque colonne de la ligne 2 qui va de la première colonne à la dernière colonne de ma base de donnés) + ';’);
memo1.lines.Add (‘ALVI’ +':'+'PO'+'=' + 'NRVP' + (contenu de chaque colonne de la ligne 3 qui va de la première colonne à la dernière colonne de ma base de donnés) + ';’);
S’il c’est juste le code va copier les données de contenu de chaque colonne de la ligne 1 qui va de la première colonne à la dernière colonne de ma base de donnés
Et la même chose pour la ligne deux et trois, ce qui implique l’affichage dans le memo sera comme suit :
50 lignes dans memo1 qui affiche le contenu de la ligne 1 (de la colonne1 à colonne 50)
Et la même chose pour la ligne deux et trois.
Est-ce que c’est faisable, et s’il y a une autre astuce merci pour d’avance pour votre aide .
NB: Est ce que chaque colonne dans stringrid est consideré comme ( edit1.text)
Salutation
importer des données excel dans une application delphi
Bonjour,
Merci pour votre réponse rapide.
Juste pour clarifier les choses, je suis débutant dans la programmation, et pour cette raison j'ai sollicité votre aide.
Est que la dernière suggestion tu peux la mettre dans un code dephi ?
NB : je connais que le composant memo ou je peux afficher l’exécution d’un script long de 30 lignes ou plus
Salutation