Comment importer, lire et modifier des données depuis Excel dans QTP/UFT

⚡ Résumé intelligent

Importer, lire et modifier des données depuis Excel dans QTP/UFT s'appuie sur l'objet DataTable intégré, qui charge un classeur dans la table de données d'exécution afin que chaque script d'automatisation puisse piloter les étapes de test à partir des lignes de la feuille de calcul.

  • (I.e. Importer: DataTable.Import charge un classeur entier, tandis que DataTable.ImportSheet importe une feuille nommée dans une feuille de destination choisie.
  • 🇧🇷 Règle d'en-tête : La première ligne du tableur devient le nom des colonnes ; il est donc important de structurer la feuille avant de lancer l’importation.
  • (I.e. Nombre de lignes : DataTable.GetSheet(1).GetRowCount renvoie le nombre de lignes de données et exclut la ligne d'en-tête.
  • (I.e. Pointeur de ligne : Appelez DataTable.SetCurrentRow avant chaque lecture afin que DataTable.Value renvoie la cellule attendue.
  • Répondre: L'affectation à DataTable.Value modifie une cellule uniquement en mémoire ; DataTable.Export enregistre la feuille sur le disque.
  • 🧩 Option COM : Créez un objet Excel.Application lorsque la mise en forme, les formules ou l'ouverture de plusieurs classeurs sont nécessaires.
  • ⚠️ Nettoyer: Appelez toujours la fonction Quitter et libérez les objets, sinon EXCEL.EXE reste résident et verrouille le fichier.

Comment importer, lire et modifier des données depuis Excel dans QTP/UFT

Les tableurs restent le support le plus courant pour la conservation par les testeurs de leurs valeurs d'entrée, des résultats attendus et des paramètres de leur environnement. QTP, maintenant vendu sous le nom de OpenText UFT Un après que le produit soit passé de HP à Micro Focus, puis à OpenTextCette fonction lit les feuilles de calcul via l'objet DataTable. Les sections ci-dessous présentent les instructions exactes utilisées pour importer un classeur, compter ses lignes, lire les cellules individuellement, modifier les valeurs et réécrire la feuille sur le disque.

Étapes pour importer, lire et modifier des données depuis EXCEL

Supposons que vous souhaitiez importer les éléments suivants Ventes.xls Intégrez ce cahier d'exercices à votre test.

Le classeur source Sales.xls a été ouvert dans Excel avant d'être importé dans UFT

Une fois le fichier importé dans UFTLa première ligne devient l'en-tête de colonne ; structurez donc vos données en conséquence. Tout élément de la première ligne est considéré comme un nom de paramètre plutôt que comme une donnée de test, et chaque ligne restante est comptée comme une ligne de données.

La syntaxe permettant d'importer un fichier Excel entier est présentée ci-dessous.

DataTable.Import(FileName)

Dans notre cas, l'instruction devient la suivante. VBScript n'a pas besoin de parenthèses lorsqu'une méthode est appelée comme une instruction ; on utilise donc ici la forme simple.

DataTable.Import "D:\Automation\Sales.xls"

Après l'exécution, les lignes importées apparaissent dans le volet Données d'exécution exactement comme elles étaient disposées dans le classeur.

Les données sur les ventes importées sont affichées dans le UFT volet Tableau de données d'exécution

La syntaxe permettant d'importer une feuille de calcul particulière est présentée ci-dessous. SheetSource est la feuille à l'intérieur du cahier d'exercices et SheetDest est la feuille de destination dans le tableau de données d'exécution.

DataTable.ImportSheet FileName, SheetSource, SheetDest

Utilisez le bouton ObtenirNombreDeLignes Méthode permettant d'obtenir le nombre de lignes de données dans une feuille. Chaque instruction doit figurer sur une ligne distincte.

DataTable.Import "D:\Automation\Sales.xls"
row = DataTable.GetSheet(1).GetRowCount
MsgBox row

La boîte de dialogue qui s'affiche indique le total de la ligne pour la feuille importée.

MsgBox Affichage du résultat de GetRowCount pour la feuille de ventes importée

Pour déplacer le pointeur vers une ligne spécifique, utilisez le Définir la ligne actuelle méthode. Le deuxième argument de DataTable.Value Il s'agit du numéro de feuille, et non du numéro de ligne, c'est pourquoi le pointeur de ligne doit être déplacé séparément.

DataTable.Import "D:\Automation\Sales.xls"

' In the code below, 1 is the sheet number
DataTable.SetCurrentRow 1
Row1 = DataTable.Value("Year", 1)

DataTable.SetCurrentRow 2
Row2 = DataTable.Value("Year", 1)

MsgBox "Year Row 1 = " & Row1 & "    Year Row 2 = " & Row2

Les deux valeurs sont lues dans la même colonne mais sur deux lignes différentes, et la boîte de message les affiche côte à côte.

MsgBox comparer la valeur de l'année de la ligne 1 et de la ligne 2 du tableau de données

Utilisez le bouton Valeur La méthode située à gauche d'une affectation permet de modifier les données de la feuille importée. La modification est conservée en mémoire jusqu'à ce que vous l'appeliez. Télécharger, qui réécrit le tableau de données d'exécution dans un fichier Excel.

DataTable.SetCurrentRow 1
DataTable.Value("Year", 1) = 2026
DataTable.Export "D:\Automation\Sales_Updated.xls"

La cellule modifiée est visible dans le volet Données d'exécution immédiatement après l'exécution de l'affectation.

Tableau de données en temps réel montrant une cellule mise à jour via la méthode DataTable.Value

L'ouverture du classeur exporté confirme que les valeurs modifiées ont été enregistrées sur le disque et non conservées uniquement pendant la durée de l'exécution.

Le fichier Excel exporté s'ouvre dans Excel et affiche les valeurs modifiées enregistrées par DataTable.Export.

Astuce : Exportez le fichier sous un nom différent de celui utilisé pour l'importation. Réécrire dans le même classeur ouvert est le moyen le plus rapide de provoquer une erreur de partage et d'interrompre votre session.

Comment lire, modifier et exporter des données Excel : un exemple complet

Les extraits de code ci-dessus illustrent chacun une méthode. Dans un test réel basé sur des données, ils sont combinés en une seule boucle qui parcourt chaque ligne, effectue un calcul, stocke le résultat et exporte la feuille. Prenons l'exemple du classeur. Ventes.xls contient les quatre colonnes et les trois lignes de données suivantes.

Année Région unités Tarifs et Prix
2023 Est 120 25
2024 Est 150 25
2025 Ouest 200 30

Le script ci-dessous ajoute un Revenue colonne, la remplit ligne par ligne, calcule un total cumulé et enregistre la feuille terminée dans un nouveau fichier. AddParameter Cette méthode est utilisée car la colonne n'existe pas dans le classeur source ; l'appeler pour une colonne qui existe déjà génère une erreur.

' Read, calculate and export Excel data in UFT One
Dim sh, rowCount, i, units, price, revenue, total

DataTable.Import "D:\Automation\Sales.xls"

Set sh = DataTable.GetSheet(1)
sh.AddParameter "Revenue", ""

rowCount = sh.GetRowCount
Print "Total rows imported: " & rowCount

total = 0
For i = 1 To rowCount
    DataTable.SetCurrentRow i

    units   = DataTable.Value("Units", 1)
    price   = DataTable.Value("Price", 1)
    revenue = CInt(units) * CInt(price)

    DataTable.Value("Revenue", 1) = revenue
    total = total + revenue

    Print "Row " & i & " | Year: " & DataTable.Value("Year", 1) & _
          " | Region: " & DataTable.Value("Region", 1) & _
          " | Revenue: " & revenue
Next

Print "Grand Total Revenue: " & total

DataTable.Export "D:\Automation\Sales_Revenue.xls"
Set sh = Nothing

Sortie :

Total rows imported: 3
Row 1 | Year: 2023 | Region: East | Revenue: 3000
Row 2 | Year: 2024 | Region: East | Revenue: 3750
Row 3 | Year: 2025 | Region: West | Revenue: 6000
Grand Total Revenue: 12750

Trois points de ce scénario sont plus importants que les autres. Premièrement, GetRowCount renvoie 3 au lieu de 4 car la ligne d'en-tête est utilisée comme nom de colonne. Deuxièmement, SetCurrentRow Cette fonction est appelée au début de chaque itération ; sans elle, les trois itérations liraient la même ligne. Troisièmement, les valeurs issues du tableau de données sont des chaînes de caractères, donc CInt est appliqué avant la multiplication pour éviter la concaténation de chaînes au lieu d'effectuer des calculs arithmétiques. Ignorerping DataTable.Export Le chiffre d'affaires calculé serait visible dans le volet Données, mais absent de tout fichier sur le disque.

Objet DataTable vs Objet COM Excel dans UFT

L'objet DataTable n'est pas le seul moyen d'accéder à une feuille de calcul. UFT Les scripts peuvent également créer un Excel.Application L'objet COM et le pilotage direct d'Excel. Ces deux approches résolvent des problèmes différents.

Aspect Objet DataTable Objet COM Excel
Installation d'Excel Non requis sur la machine d'exécution Microsoft Excel doit être installé.
Style d'adressage Par nom de colonne et pointeur de ligne Par coordonnées de cellule, plages ou plages nommées
Itérations Les lignes pilotent automatiquement les itérations de test. Aucun lien vers les itérations ; looping est manuel
Mise en forme et formules Ignoré ; seules les valeurs sont lues Accès complet aux formules, aux couleurs et aux graphiques
Plusieurs cahiers d'exercices Une seule table d'exécution, les feuilles étant importées une par une. Un nombre quelconque de classeurs ouverts simultanément
Rapports sur les résultats Les valeurs apparaissent dans le UFT exécuter les résultats automatiquement Rien n'est enregistré à moins que vous ne le signaliez vous-même.
Charge de nettoyage Manipulé par UFT Vous devez fermer, quitter et libérer chaque objet

La règle pratique est simple. Utilisez l'objet DataTable pour une paramétrisation directe, où chaque ligne de la feuille de calcul devient une itération d'un tests d'automatisation Utilisez l'objet COM uniquement lorsque vous avez besoin d'une fonctionnalité que la table de données ne peut pas exprimer, comme la lecture du résultat d'une formule, la génération d'un rapport formaté ou la comparaison de deux classeurs dans le même script. L'exemple ci-dessous lit une cellule, renvoie un statut et ferme correctement Excel.

Dim xlApp, xlBook, xlSheet, cellValue

Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = False
xlApp.DisplayAlerts = False

Set xlBook  = xlApp.Workbooks.Open("D:\Automation\Sales.xls")
Set xlSheet = xlBook.Worksheets("Sheet1")

cellValue = xlSheet.Cells(2, 1).Value
Print "Cell A2 contains: " & cellValue

xlSheet.Cells(2, 5).Value = "Reviewed"
xlBook.Save

' Release everything, in this order
xlBook.Close False
xlApp.Quit
Set xlSheet = Nothing
Set xlBook  = Nothing
Set xlApp   = Nothing

Sortie :

Cell A2 contains: 2023

La cellule A2 contient 2023 car la ligne 1 de la feuille de calcul est l'en-tête et la colonne A est AnnéeNotez que l'adressage COM est à base 1 et prend en compte l'en-tête, tandis que DataTable.SetCurrentRow 1 pointe vers la première ligne de données.

Erreurs courantes lors de l'utilisation d'Excel avec UFT et comment les réparer

La plupart des problèmes Excel dans UFT Elles proviennent d'un petit nombre d'erreurs répétitives. Les identifier permet de gagner un temps précieux lors du débogage.

⚠️ Attention : Un processus EXCEL.EXE orphelin est l'effet secondaire le plus courant de l'automatisation COM. CreateObject("Excel.Application") qui n'est pas égalé par Quit plus Set … = Nothing Une instance Excel cachée reste active. Après quelques centaines d'exécutions de test, la machine manque de mémoire et le classeur source est verrouillé, empêchant toute modification.

  • Excel reste en mémoire. Fermez le classeur, appelez xlApp.QuitLibérez ensuite la feuille, le classeur et l'application dans cet ordre. Libérer l'application en premier permet de conserver une référence active et de maintenir le processus en cours d'exécution.
  • Les modifications disparaissent après l'exécution. DataTable.Value écrit uniquement dans la table de données d'exécution. Sans DataTable.Export, rien n'atteint le système de fichiers.
  • « La colonne n'existe pas » ou erreur de paramètre invalide. Le nom de la colonne transmis à DataTable.Value doit correspondre exactement à la cellule d'en-tête, espaces de fin inclus. Utiliser AddParameter créer une colonne avant d'y écrire.
  • Chaque itération lit les mêmes valeurs. SetCurrentRow La fonction n'a pas été appelée à l'intérieur de la boucle, donc le pointeur de ligne n'a jamais bougé.
  • Un décalage d'une ligne compte. GetRowCount Exclut la ligne d'en-tête. Un classeur contenant un en-tête et dix enregistrements renvoie 10, et non 11.
  • Échecs de chemin d'accès et d'autorisation. Les chemins codés en dur tels que D:\Automation\Sales.xls Interrompre le script sur d'autres machines. Définir le chemin d'accès à partir d'une variable d'environnement afin que le même script s'exécute sur chaque agent.
  • Cellules fusionnées et plusieurs lignes d'en-tête. L'importation requiert une seule ligne d'en-tête contenant des noms uniques. La fusion de cellules génère des noms de paramètres vides ou dupliqués.
  • Violation des règles de partage des exportations. Le fichier de destination ne peut pas être ouvert dans Excel. Export Exécution. Fermez-le d'abord, ou exportez-le vers un fichier horodaté.

Une bonne pratique consiste à encapsuler le nettoyage COM dans un On Error Resume Next Un bloc est placé dans une fonction de récupération dédiée, de sorte qu'une défaillance en cours de script entraîne toujours l'arrêt d'Excel. Lorsque les données Excel alimentent un processus formel cas de test Dans le dépôt, la même discipline s'applique aux résultats : exporter une fois, vérifier l'existence du fichier, puis l'attacher à l'exécution.

Pour approfondir les sujets abordés ici, consultez le document complet. QTP/UFT tutoriel Dans un cadre plus large, apprenez à transformer les résultats en ALM de UFT, revoyez les principes fondamentaux de test logiciel, et comparer cette approche avec la programmation pilotée par les données dans Selenium.

FAQ

UFT Importe les fichiers .xls, .xlsx et .csv dans la table de données d'exécution. L'exportation produit toujours un classeur .xls ; un convertisseur ou l'objet COM Excel est donc nécessaire lorsque le système en aval requiert le format .xlsx plus récent.

La table de conception est enregistrée avec le test et reste inchangée. La table d'exécution est une copie créée au démarrage de l'exécution. Les importations et les affectations de valeurs n'affectent que la copie d'exécution, qui est supprimée sauf si elle est exportée.

Non pour l'objet DataTable, qui analyse le classeur lui-même. Oui pour tout script appelant CreateObject("Excel.Application"), car cette méthode automatise la création d'une instance Excel réelle et échoue immédiatement sur une machine qui n'en est pas équipée.

Oui. Appelez ImportSheet une fois par feuille, en changeant le nom de la feuille de destination à chaque fois. Les données globales doivent figurer sur la feuille « Global », tandis que les valeurs spécifiques à l'action doivent figurer sur la feuille d'action correspondante, afin que les itérations restent indépendantes.

Oui, et la structure de la boucle est généralement correcte. Vérifiez manuellement deux points : que SetCurrentRow se trouve bien à l’intérieur de la boucle, et que les cellules numériques sont converties avec CInt ou CDbl. Le code généré omet souvent ces deux points.

L'IA intègre des fonctionnalités modernes UFT Une des versions reconnaît visuellement les contrôles, de sorte qu'un champ renommé ne coupe plus toutes les lignes d'un ensemble de données. L'IA peut également suggérer des lignes de bordure supplémentaires, élargissant ainsi la couverture de la feuille de calcul sans conception de test manuelle.

Résumez cet article avec :