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.

  • 📥 Import: DataTable.Import încarcă un întreg registru de lucru, în timp ce DataTable.ImportSheet extrage o foaie denumită într-o foaie de destinație aleasă.
  • 🗂️ Regula antetului: Primul rând din foaia de calcul devine numele coloanelor, așadar structurați foaia înainte de a rula importul.
  • 🔢 Număr de rânduri: DataTable.GetSheet(1).GetRowCount returnează numărul de rânduri de date și exclude rândul de antet.
  • 🎯 Indicator de rând: Apelați DataTable.SetCurrentRow înainte de fiecare citire, astfel încât DataTable.Value să returneze celula așteptată.
  • ✏️ Scrieți înapoi: Atribuirea la DataTable.Value modifică o celulă doar în memorie; DataTable.Export salvează foaia pe disc.
  • 🧩 Opțiunea COM: Creați un obiect Excel.Application atunci când este necesară formatarea, formulele sau mai multe registre de lucru deschise.
  • ⚠️ A curăța: Apelați întotdeauna Quit și eliberați obiectele, altfel EXCEL.EXE rămâne rezident și blochează fișierul.

Cum se importă, se citesc și se modifică date din Excel în QTP/UFT

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.

Registrul de lucru sursă Sales.xls s-a deschis în Excel înainte de importare în UFT

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.

Datele de vânzări importate afișate în UFT panoul Tabel de date în timpul execuției

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ă.

msgBox afișarea rezultatului GetRowCount pentru foaia de vânzări 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.

msgBox compararea valorii Anului din rândul 1 și rândul 2 al tabelului de date

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.

Tabel de date în timpul execuției care afișează o celulă actualizată prin metoda DataTable.Value

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.

Fișierul Excel exportat s-a deschis în Excel și afișează valorile modificate salvate de DataTable.Export

💡 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.Value scrie 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.Value trebuie să corespundă exact cu celula antetului, inclusiv spațiile finale. Folosește AddParameter pentru a crea o coloană înainte de a scrie în ea.
  • Fiecare iterație citește aceleași valori. SetCurrentRow nu 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. GetRowCount exclude 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.xls pauză 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 Export rulează. Î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.

Întrebări frecvente

UFT importă fișiere .xls, .xlsx și .csv în tabelul de date din timpul execuției. Exportul produce întotdeauna un registru de lucru .xls, așadar este necesar un convertor sau obiectul COM din Excel atunci când sistemul din aval necesită formatul .xlsx mai nou.

Tabela de proiectare este salvată odată cu testul și rămâne neschimbată. Tabela de execuție este o copie creată la începerea execuției. Importurile și atribuirile de valori afectează doar copia de execuție, care este eliminată dacă nu este exportată.

Nu pentru obiectul DataTable, care analizează registrul de lucru în sine. Da pentru orice script care apelează CreateObject(„Excel.Application”), deoarece acea rută automatizează o instanță Excel reală și eșuează imediat pe o mașină fără aceasta.

Da. Apelați ImportSheet o dată per foaie, cu un nume de foaie de destinație diferit de fiecare dată. Datele globale aparțin foaiei Global, în timp ce valorile specifice acțiunii aparțin foaiei de acțiune corespunzătoare, astfel încât iterațiile să rămână independente.

Da, și scheletul buclei este de obicei corect. Verificați manual două lucruri: dacă SetCurrentRow se află în interiorul buclei și dacă celulele numerice sunt convertite cu CInt sau CDbl. Codul generat omite frecvent ambele.

Funcții de inteligență artificială în stilul modern UFT Se eliberează vizual controalele de recunoaștere, astfel încât un câmp redenumit nu mai întrerupe fiecare rând al unui set de date. De asemenea, inteligența artificială poate sugera rânduri de delimitare suplimentare, lărgind acoperirea foii de calcul fără a fi nevoie de proiectarea manuală a testelor.

Rezumați această postare cu: