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.

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.
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.
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.
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.
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.
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.
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. SansDataTable.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.Valuedoit correspondre exactement à la cellule d'en-tête, espaces de fin inclus. UtiliserAddParametercréer une colonne avant d'y écrire. - Chaque itération lit les mêmes valeurs.
SetCurrentRowLa 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.
GetRowCountExclut 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.xlsInterrompre 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.
ExportExé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.






