Cum se importă, se citesc și se modifică date din EXCEL în QTP/UFT
⚡ Rezumat inteligent
Importul, citirea și modificarea datelor din Excel în QTP/UFT se bazează pe obiectul DataTable încorporat, care încarcă un registru de lucru în tabelul de date din timpul execuției, astfel încât fiecare script de automatizare să poată genera pași de testare din rândurile foii de calcul.

Foile de calcul rămân cel mai comun loc în care testerii își păstrează valorile de intrare, rezultatele așteptate și setările de mediu. QTP, acum vândut ca OpenText UFT Unul după ce produsul a fost transferat de la HP la Micro Focus și apoi la OpenText, citește acele foi de calcul prin intermediul obiectului DataTable. Secțiunile de mai jos prezintă instrucțiunile exacte utilizate pentru a importa un registru de lucru, a număra rândurile acestuia, a citi celule individuale, a modifica valorile și a scrie foaia înapoi pe disc.
Pași pentru importarea, citirea și modificarea datelor din EXCEL
Să luăm în considerare faptul că doriți să importați următoarele Vânzări.xls registrul de lucru în testul tău.
Odată ce fișierul este importat în UFT, rândul de sus devine antetul coloanei, așa că structurați datele în consecință. Orice element din rândul 1 este tratat ca nume de parametru, nu ca date de test, iar fiecare rând rămas este considerat un rând de date.
Sintaxa pentru importarea unui fișier Excel întreg este prezentată mai jos.
DataTable.Import(FileName)
În cazul nostru, instrucțiunea devine următoarea. VBScript nu are nevoie de paranteze atunci când o metodă este apelată ca instrucțiune, așa că aici se folosește forma simplă.
DataTable.Import "D:\Automation\Sales.xls"
După executare, rândurile importate apar în panoul Date din timpul execuției exact așa cum au fost aranjate în registrul de lucru.
Sintaxa pentru importarea unei anumite foi este prezentată în continuare. SheetSource este foaia din interiorul registrului de lucru și SheetDest este foaia de destinație din tabelul de date din timpul execuției.
DataTable.ImportSheet FileName, SheetSource, SheetDest
Folosește ObțineNumărRânduri metodă pentru a obține numărul de rânduri de date dintr-o foaie. Fiecare instrucțiune trebuie să se afle pe o linie separată.
DataTable.Import "D:\Automation\Sales.xls" row = DataTable.GetSheet(1).GetRowCount MsgBox row
Caseta de mesaj care apare raportează totalul rândurilor pentru foaia importată.
Pentru a muta indicatorul pe un anumit rând, utilizați SetCurrentRow metodă. Al doilea argument al DataTable.Value este numărul foii, nu numărul rândului, motiv pentru care indicatorul de rând trebuie mutat separat.
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
Ambele valori sunt citite din aceeași coloană, dar din două rânduri diferite, iar caseta de mesaj le imprimă una lângă alta.
Folosește Valoare metodă din stânga unei atribuiri pentru a modifica datele din foaia importată. Modificarea rămâne în memorie până când apelați Export, care scrie tabelul de date din timpul execuției înapoi într-un fișier Excel.
DataTable.SetCurrentRow 1 DataTable.Value("Year", 1) = 2026 DataTable.Export "D:\Automation\Sales_Updated.xls"
Celula editată este vizibilă în panoul Date din timpul execuției imediat după executarea atribuirii.
Deschiderea registrului de lucru exportat confirmă faptul că valorile modificate au fost salvate pe disc și nu au fost păstrate doar pe durata execuției.
💡 Sfat: Exportați fișierul într-un nume diferit de cel importat. Scrierea înapoi în același registru de lucru deschis este cea mai rapidă metodă de a declanșa o încălcare a partajării și de a pierde executarea.
Cum să citești, să modifici și să exporte date Excel: Un exemplu complet
Fragmentele de mai sus demonstrează fiecare câte o metodă. Într-un test real bazat pe date, acestea sunt combinate într-o singură buclă care parcurge fiecare rând, calculează ceva, stochează rezultatul și exportă foaia. Să presupunem că registrul de lucru Vânzări.xls conține următoarele patru coloane și trei rânduri de date.
| An | Regiune | UM | Preț |
|---|---|---|---|
| 2023 | Est | 120 | 25 |
| 2024 | Est | 150 | 25 |
| 2025 | Vest | 200 | 30 |
Scriptul de mai jos adaugă o Revenue coloană, o umple rând cu rând, păstrează un total continuu și scrie foaia finalizată într-un fișier nou. AddParameter este utilizată deoarece coloana nu există în registrul de lucru sursă; apelarea acesteia pentru o coloană care există deja generează o eroare.
' 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
ieșire:
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
Trei puncte din acest scenariu contează mai mult decât restul. În primul rând, GetRowCount returnează 3 în loc de 4 deoarece rândul de antet este consumat ca nume de coloane. În al doilea rând, SetCurrentRow este apelat la începutul fiecărei iterații; fără acesta, toate cele trei iterații ar citi același rând. În al treilea rând, valorile care ies din tabelul de date sunt șiruri de caractere, deci CInt se aplică înainte de înmulțire pentru a evita concatenarea șirurilor în loc de aritmetică. Sari pesteping DataTable.Export venitul calculat ar fi vizibil în panoul Date, dar absent din orice fișier de pe disc.
Obiect DataTable vs. obiect COM Excel în UFT
Obiectul DataTable nu este singura modalitate de a accesa o foaie de calcul. UFT Scripturile pot crea, de asemenea, un Excel.Application obiect COM și gestionează Excel direct. Cele două abordări rezolvă probleme diferite.
| Aspect | Obiect DataTable | Obiect COM Excel |
|---|---|---|
| Instalare Excel | Nu este necesar pe mașina de execuție | Microsoft Excel trebuie instalat |
| Stilul de adresare | După numele coloanei și indicatorul de rând | După coordonatele celulelor, intervale sau intervale denumite |
| Iteratii | Rândurile testează automat iterațiile | Nicio legătură cu iterațiile; ioping este manual |
| Formatare și formule | Ignorat; se citesc doar valorile | Acces complet la formule, culori și diagrame |
| Mai multe registre de lucru | Un tabel de execuție, foi importate pe rând | Orice număr de registre de lucru deschise simultan |
| Raportarea rezultatelor | Valorile apar în UFT rulează rezultatele automat | Nimic nu este înregistrat decât dacă raportezi tu însuți. |
| Sarcina curățeniei | Manipulat de UFT | Trebuie să închideți, să ieșiți și să eliberați fiecare obiect |
Regula practică este simplă. Folosește obiectul DataTable pentru o parametrizare simplă, unde fiecare rând din foaia de calcul devine o iterație a unui testarea automatizării executați. Comutați la obiectul COM doar atunci când aveți nevoie de ceva ce tabelul de date nu poate exprima, cum ar fi citirea rezultatului unei formule, scrierea unui raport formatat sau compararea a două registre de lucru în același script. Exemplul de mai jos citește o celulă, scrie înapoi o stare și închide Excel corect.
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
ieșire:
Cell A2 contains: 2023
Celula A2 conține 2023 deoarece rândul 1 al foii de calcul este rândul de antet, iar coloana A este AnObservați că adresarea COM este bazată pe unu și numără antetul, în timp ce DataTable.SetCurrentRow 1 puncte la primul rând de date.
Erori frecvente la utilizarea Excel cu UFT și Cum să le remediați
Majoritatea problemelor din Excel UFT provin dintr-un set mic de greșeli repetabile. Recunoașterea lor economisește mult timp de depanare.
⚠️ Atenție: Un proces EXCEL.EXE orfan este cel mai frecvent efect secundar al automatizării COM. Fiecare CreateObject("Excel.Application") care nu se potrivește cu Quit la care se adauga Set … = Nothing lasă o instanță Excel ascunsă să ruleze. După câteva sute de teste de rulare, mașina de execuție rămâne fără memorie, iar registrul de lucru sursă este blocat pentru editare.
- Excel rămâne în memorie. Închideți registrul de lucru, apelați
xlApp.Quit, apoi eliberați obiectele din foaie, registru de lucru și aplicație în această ordine. Lansarea aplicației lasă mai întâi o referință activă și menține procesul activ. - Schimbările dispar după alergare.
DataTable.Valuescrie doar în tabelul de date din timpul execuției. FărăDataTable.Export, nimic nu ajunge la sistemul de fișiere. - „Coloana nu există” sau o eroare de parametru nevalid. Numele coloanei transmis către
DataTable.Valuetrebuie să corespundă exact cu celula antetului, inclusiv spațiile finale. FoloseșteAddParameterpentru a crea o coloană înainte de a scrie în ea. - Fiecare iterație citește aceleași valori.
SetCurrentRownu a fost apelată în interiorul buclei, deci indicatorul de rând nu s-a mișcat niciodată. - Numără rânduri diferențiate cu un rând.
GetRowCountexclude rândul de antet. Un registru de lucru cu un antet și zece înregistrări returnează 10, nu 11. - Erori de cale și permisiune. Căi codificate hard, cum ar fi
D:\Automation\Sales.xlspauză pe alte mașini. Construiți calea dintr-o variabilă de mediu, astfel încât același script să ruleze pe fiecare agent. - Celule îmbinate și mai multe rânduri de antet. Importul așteaptă exact un rând de antet cu nume unice. Celulele îmbinate produc nume de parametri goale sau duplicate.
- Încălcare a partajării la export. Fișierul destinație nu poate fi deschis în Excel în timp ce
Exportrulează. Închideți-l mai întâi sau exportați într-un nume de fișier cu marcaj temporal.
Un obicei util este să încapăți curățarea COM într-un On Error Resume Next bloc plasat într-o funcție de recuperare dedicată, astfel încât o eroare în timpul scriptului tot oprește Excel. Când datele Excel alimentează un formular formal caz de testare În depozit, aceeași disciplină se aplică rezultatelor: exportați o singură dată, verificați dacă fișierul există, apoi atașați-l la rulare.
Pentru a aprofunda subiectele abordate aici, parcurgeți integral QTP/UFT tutorial pentru cadrul mai larg, învață cum să transmiți rezultatele în ALM de la UFT, revizuiți elementele fundamentale din testare softwareși comparați abordarea cu scriptarea bazată pe date în Selenium.






