Πώς να εισαγάγετε, να διαβάσετε, να αλλάξετε δεδομένα από το EXCEL στο QTP/UFT
⚡ Έξυπνη Σύνοψη
Εισαγωγή, ανάγνωση και αλλαγή δεδομένων από το Excel στο QTP/UFT βασίζεται στο ενσωματωμένο αντικείμενο DataTable, το οποίο φορτώνει ένα βιβλίο εργασίας στον πίνακα δεδομένων χρόνου εκτέλεσης, έτσι ώστε κάθε σενάριο αυτοματοποίησης να μπορεί να οδηγεί βήματα δοκιμής από γραμμές υπολογιστικού φύλλου.

Τα υπολογιστικά φύλλα παραμένουν το πιο συνηθισμένο μέρος όπου οι δοκιμαστές διατηρούν τις τιμές εισόδου, τα αναμενόμενα αποτελέσματα και τις ρυθμίσεις περιβάλλοντος. QTP, τώρα πωλείται ως OpenText UFT Ένα μετά τη μετάβαση του προϊόντος από την HP στην Micro Focus και στη συνέχεια στην OpenText, διαβάζει αυτά τα υπολογιστικά φύλλα μέσω του αντικειμένου DataTable. Οι παρακάτω ενότητες δείχνουν τις ακριβείς εντολές που χρησιμοποιούνται για την εισαγωγή ενός βιβλίου εργασίας, την καταμέτρηση των γραμμών του, την ανάγνωση μεμονωμένων κελιών, την αλλαγή τιμών και την επανεγγραφή του φύλλου στον δίσκο.
Βήματα για εισαγωγή, ανάγνωση, αλλαγή δεδομένων από το EXCEL
Σκεφτείτε ότι θέλετε να εισαγάγετε τα ακόλουθα Πωλήσεις.xls βιβλίο εργασίας στο τεστ σας.
Μόλις εισαχθεί το αρχείο στο UFT, η επάνω γραμμή γίνεται η κεφαλίδα της στήλης, επομένως δομήστε τα δεδομένα σας ανάλογα. Οτιδήποτε στη γραμμή 1 αντιμετωπίζεται ως όνομα παραμέτρου και όχι ως δεδομένα δοκιμής και κάθε υπόλοιπη γραμμή μετριέται ως γραμμή δεδομένων.
Η σύνταξη για την εισαγωγή ενός ολόκληρου αρχείου Excel φαίνεται παρακάτω.
DataTable.Import(FileName)
Στην περίπτωσή μας, η εντολή γίνεται η ακόλουθη. Η VBScript δεν χρειάζεται παρενθέσεις όταν μια μέθοδος καλείται ως εντολή, επομένως εδώ χρησιμοποιείται η απλή μορφή.
DataTable.Import "D:\Automation\Sales.xls"
Μετά την εκτέλεση, οι εισαγόμενες γραμμές εμφανίζονται στο παράθυρο Δεδομένα κατά τον χρόνο εκτέλεσης ακριβώς όπως είχαν διαταχθεί στο βιβλίο εργασίας.
Η σύνταξη για την εισαγωγή ενός συγκεκριμένου φύλλου εμφανίζεται στη συνέχεια. SheetSource είναι το φύλλο μέσα στο βιβλίο εργασίας και SheetDest είναι το φύλλο προορισμού στον πίνακα δεδομένων χρόνου εκτέλεσης.
DataTable.ImportSheet FileName, SheetSource, SheetDest
Χρησιμοποιήστε το GetRowCount μέθοδος για να λάβετε τον αριθμό των γραμμών δεδομένων σε ένα φύλλο. Κάθε πρόταση πρέπει να βρίσκεται σε ξεχωριστή γραμμή.
DataTable.Import "D:\Automation\Sales.xls" row = DataTable.GetSheet(1).GetRowCount MsgBox row
Το πλαίσιο μηνύματος που εμφανίζεται αναφέρει το σύνολο γραμμών για το εισαγόμενο φύλλο.
Για να μετακινήσετε τον δείκτη σε μια συγκεκριμένη γραμμή, χρησιμοποιήστε το ΟρισμόςΤρέχουσαςΓραμμής μέθοδος. Το δεύτερο όρισμα του DataTable.Value είναι ο αριθμός φύλλου, όχι ο αριθμός γραμμής, γι' αυτό και ο δείκτης γραμμής πρέπει να μετακινηθεί ξεχωριστά.
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
Και οι δύο τιμές διαβάζονται από την ίδια στήλη αλλά από δύο διαφορετικές γραμμές και το πλαίσιο μηνύματος τις εκτυπώνει η μία δίπλα στην άλλη.
Χρησιμοποιήστε το αξία μέθοδος στα αριστερά μιας ανάθεσης για να αλλάξετε δεδομένα στο εισαγόμενο φύλλο. Η αλλαγή παραμένει στη μνήμη μέχρι να την καλέσετε εξαγωγή, η οποία γράφει τον πίνακα δεδομένων χρόνου εκτέλεσης πίσω σε ένα αρχείο Excel.
DataTable.SetCurrentRow 1 DataTable.Value("Year", 1) = 2026 DataTable.Export "D:\Automation\Sales_Updated.xls"
Το επεξεργασμένο κελί είναι ορατό στο παράθυρο Δεδομένα κατά τον χρόνο εκτέλεσης αμέσως μετά την εκτέλεση της ανάθεσης.
Το άνοιγμα του εξαγόμενου βιβλίου εργασίας επιβεβαιώνει ότι οι τροποποιημένες τιμές αποθηκεύτηκαν στο δίσκο αντί να διατηρηθούν μόνο για τη διάρκεια της εκτέλεσης.
💡 Συμβουλές: Εξαγωγή σε διαφορετικό όνομα αρχείου από αυτό που εισαγάγατε. Η εγγραφή στο ίδιο ανοιχτό βιβλίο εργασίας είναι ο πιο γρήγορος τρόπος για να ενεργοποιήσετε μια παραβίαση κοινής χρήσης και να χάσετε την εκτέλεση.
Πώς να διαβάσετε, να αλλάξετε και να εξαγάγετε δεδομένα Excel: Ένα πλήρες παράδειγμα
Τα παραπάνω αποσπάσματα παρουσιάζουν μία μέθοδο. Σε μια πραγματική δοκιμή που βασίζεται σε δεδομένα, συνδυάζονται σε έναν μόνο βρόχο που διαχειρίζεται κάθε γραμμή, υπολογίζει κάτι, αποθηκεύει το αποτέλεσμα και εξάγει το φύλλο. Ας υποθέσουμε ότι το βιβλίο εργασίας Πωλήσεις.xls περιέχει τις ακόλουθες τέσσερις στήλες και τρεις γραμμές δεδομένων.
| Έτος | Περιοχή | Μονάδες | Τιμή |
|---|---|---|---|
| 2023 | Ανατολή | 120 | 25 |
| 2024 | Ανατολή | 150 | 25 |
| 2025 | δυτικά | 200 | 30 |
Το παρακάτω σενάριο προσθέτει ένα Revακολουθούν στήλη, τη γεμίζει γραμμή προς γραμμή, διατηρεί ένα τρέχον σύνολο και γράφει το ολοκληρωμένο φύλλο σε ένα νέο αρχείο. AddParameter χρησιμοποιείται επειδή η στήλη δεν υπάρχει στο βιβλίο εργασίας προέλευσης. Η κλήση της για μια στήλη που υπάρχει ήδη προκαλεί σφάλμα.
' 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
Παραγωγή:
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
Τρία σημεία σε αυτό το σενάριο έχουν μεγαλύτερη σημασία από τα υπόλοιπα. Πρώτον, GetRowCount επιστρέφει 3 αντί για 4 επειδή η γραμμή κεφαλίδας καταναλώνεται ως ονόματα στηλών. Δεύτερον, SetCurrentRow καλείται στην αρχή κάθε επανάληψης. Χωρίς αυτήν, και οι τρεις επαναλήψεις θα διάβαζαν την ίδια γραμμή. Τρίτον, οι τιμές που προέρχονται από τον πίνακα δεδομένων είναι συμβολοσειρές, επομένως CInt εφαρμόζεται πριν από τον πολλαπλασιασμό για να αποφευχθεί η συνένωση συμβολοσειρών αντί για αριθμητική. Παράλειψηping DataTable.Export θα άφηνε τα υπολογισμένα έσοδα ορατά στο παράθυρο Δεδομένα, αλλά απόντα από οποιοδήποτε αρχείο στο δίσκο.
Αντικείμενο DataTable vs Αντικείμενο COM του Excel στο UFT
Το αντικείμενο DataTable δεν είναι ο μόνος τρόπος για να αποκτήσετε πρόσβαση σε ένα υπολογιστικό φύλλο. UFT Τα σενάρια μπορούν επίσης να δημιουργήσουν ένα Excel.Application αντικείμενο COM και μονάδα δίσκου Excel απευθείας. Οι δύο προσεγγίσεις επιλύουν διαφορετικά προβλήματα.
| Άποψη | Αντικείμενο DataTable | Αντικείμενο COM του Excel |
|---|---|---|
| Εγκατάσταση Excel | Δεν απαιτείται στη μηχανή εκτέλεσης | Microsoft Το Excel πρέπει να είναι εγκατεστημένο |
| Στυλ προσφώνησης | Με βάση το όνομα της στήλης και τον δείκτη της γραμμής | Με συντεταγμένες κελιών, περιοχές ή ονομασμένες περιοχές |
| Επαναλήψεις | Οι γραμμές οδηγούν αυτόματα σε επαναλήψεις δοκιμών | Δεν υπάρχει σύνδεσμος προς επαναλήψεις· looping είναι χειροκίνητο |
| Μορφοποίηση και τύποι | Αγνοείται. Μόνο οι τιμές διαβάζονται | Πλήρης πρόσβαση σε τύπους, χρώματα και γραφήματα |
| Πολλαπλά βιβλία εργασίας | Ένας πίνακας χρόνου εκτέλεσης, τα φύλλα εισάγονται ένα κάθε φορά | Οποιοσδήποτε αριθμός βιβλίων εργασίας είναι ανοιχτός ταυτόχρονα |
| Αναφορά αποτελεσμάτων | Οι τιμές εμφανίζονται στο UFT εκτέλεση αποτελεσμάτων αυτόματα | Τίποτα δεν καταγράφεται εκτός αν το αναφέρετε εσείς οι ίδιοι |
| Επιβάρυνση καθαρισμού | Χειριζόμενο από UFT | Πρέπει να κλείσετε, να τερματίσετε και να απελευθερώσετε κάθε αντικείμενο |
Ο πρακτικός κανόνας είναι απλός. Χρησιμοποιήστε το αντικείμενο DataTable για απλή παραμετροποίηση, όπου κάθε γραμμή υπολογιστικού φύλλου γίνεται μία επανάληψη ενός δοκιμές αυτοματισμού εκτέλεση. Αλλάξτε στο αντικείμενο COM μόνο όταν χρειάζεστε κάτι που δεν μπορεί να εκφράσει ο πίνακας δεδομένων, όπως η ανάγνωση ενός αποτελέσματος τύπου, η σύνταξη μιας μορφοποιημένης αναφοράς ή η σύγκριση δύο βιβλίων εργασίας στην ίδια δέσμη ενεργειών. Το παρακάτω παράδειγμα διαβάζει ένα κελί, γράφει μια κατάσταση πίσω και τερματίζει σωστά το 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
Παραγωγή:
Cell A2 contains: 2023
Το κελί A2 περιέχει το 2023 επειδή η γραμμή 1 του φύλλου εργασίας είναι η γραμμή κεφαλίδας και η στήλη A είναι ΈτοςΣημειώστε ότι η διευθυνσιοδότηση COM βασίζεται σε ένα και μετράει την κεφαλίδα, ενώ DataTable.SetCurrentRow 1 σημεία στην πρώτη γραμμή δεδομένων.
Συνηθισμένα σφάλματα κατά τη χρήση του Excel με UFT και πώς να τα διορθώσετε
Τα περισσότερα προβλήματα του Excel στο UFT προέρχονται από ένα μικρό σύνολο επαναλαμβανόμενων λαθών. Η αναγνώρισή τους εξοικονομεί πολύ χρόνο εντοπισμού σφαλμάτων.
⚠️ Προειδοποίηση: Μια ορφανή διεργασία EXCEL.EXE είναι η πιο συνηθισμένη παρενέργεια του αυτοματισμού COM. Κάθε CreateObject("Excel.Application") που δεν ταιριάζει με Quit συν Set … = Nothing αφήνει μια κρυφή παρουσία του Excel να εκτελείται. Μετά από μερικές εκατοντάδες εκτελέσεις δοκιμών, η μνήμη του μηχανήματος εκτέλεσης εξαντλείται και το βιβλίο εργασίας προέλευσης κλειδώνεται για επεξεργασία.
- Το Excel παραμένει στη μνήμη. Κλείστε το βιβλίο εργασίας, καλέστε
xlApp.Quitκαι, στη συνέχεια, αποδεσμεύστε τα αντικείμενα του φύλλου, του βιβλίου εργασίας και της εφαρμογής με αυτήν τη σειρά. Η αποδέσμευση της εφαρμογής αφήνει πρώτα μια ενεργή αναφορά και διατηρεί ενεργή τη διεργασία. - Οι αλλαγές εξαφανίζονται μετά την εκτέλεση.
DataTable.Valueγράφει μόνο στον πίνακα δεδομένων χρόνου εκτέλεσης. ΧωρίςDataTable.Export, τίποτα δεν φτάνει στο σύστημα αρχείων. - Σφάλμα "Η στήλη δεν υπάρχει" ή μη έγκυρη παράμετρος. Το όνομα της στήλης μεταβιβάστηκε σε
DataTable.Valueπρέπει να ταιριάζει ακριβώς με το κελί κεφαλίδας, συμπεριλαμβανομένων των κενών στο τέλος. ΧρησιμοποιήστεAddParameterγια να δημιουργήσετε μια στήλη πριν γράψετε σε αυτήν. - Κάθε επανάληψη διαβάζει τις ίδιες τιμές.
SetCurrentRowδεν κλήθηκε μέσα στον βρόχο, επομένως ο δείκτης της γραμμής δεν μετακινήθηκε ποτέ. - Οι αποκλίσεις κατά μία γραμμή μετράνε.
GetRowCountεξαιρεί τη γραμμή κεφαλίδας. Ένα βιβλίο εργασίας με κεφαλίδα και δέκα εγγραφές επιστρέφει 10, όχι 11. - Αποτυχίες διαδρομής και δικαιωμάτων. Σκληρά κωδικοποιημένες διαδρομές όπως
D:\Automation\Sales.xlsδιακοπή σε άλλα μηχανήματα. Δημιουργήστε τη διαδρομή από μια μεταβλητή περιβάλλοντος, ώστε το ίδιο σενάριο να εκτελείται σε κάθε agent. - Συγχωνευμένα κελιά και πολλαπλές γραμμές κεφαλίδας. Η εισαγωγή αναμένει ακριβώς μία γραμμή κεφαλίδας με μοναδικά ονόματα. Τα συγχωνευμένα κελιά παράγουν κενά ή διπλότυπα ονόματα παραμέτρων.
- Παραβίαση κοινής χρήσης κατά την εξαγωγή. Το αρχείο προορισμού δεν μπορεί να ανοιχτεί στο Excel ενώ
Exportεκτελείται. Κλείστε το πρώτα ή εξαγάγετε το σε ένα όνομα αρχείου με χρονική σήμανση.
Μια χρήσιμη συνήθεια είναι να τυλίξετε τον καθαρισμό COM σε ένα On Error Resume Next μπλοκ τοποθετημένο σε μια ειδική λειτουργία ανάκτησης, επομένως μια αποτυχία στη μέση του σεναρίου εξακολουθεί να τερματίζει το Excel. Όταν τα δεδομένα του Excel τροφοδοτούν μια επίσημη περίπτωση δοκιμής Στο αποθετήριο, ισχύει η ίδια αρχή για τα αποτελέσματα: εξαγωγή μία φορά, επαλήθευση της ύπαρξης του αρχείου και, στη συνέχεια, επισύναψή του στην εκτέλεση.
Για να προχωρήσετε περαιτέρω με τα θέματα που θίγονται εδώ, επεξεργαστείτε πλήρως QTP/UFT φροντιστήριο για το ευρύτερο πλαίσιο, μάθετε πώς να προωθείτε τα αποτελέσματα ALM από UFT, επανεξετάστε τα βασικά στοιχεία στο δοκιμές λογισμικούκαι συγκρίνετε την προσέγγιση με το scripting που βασίζεται σε δεδομένα στο Selenium.






