Kuinka tuoda, lukea ja muuttaa tietoja Excelistä QTP/UFT

⚡ Älykäs yhteenveto

Tietojen tuominen, lukeminen ja muuttaminen Excelistä QTP/UFT perustuu sisäänrakennettuun DataTable-objektiin, joka lataa työkirjan suorituksenaikaiseen datataulukkoon, jotta jokainen automaatioskripti voi ajaa testivaiheita laskentataulukon riveistä.

  • 📥 Tuonti: DataTable.Import lataa koko työkirjan, kun taas DataTable.ImportSheet noutaa yhden nimetyn taulukon valittuun kohdetaulukkoon.
  • 🗂️ Otsikkosääntö: Laskentataulukon ensimmäisestä rivistä tulee sarakenimet, joten jäsennä taulukko ennen tuonnin suorittamista.
  • 🔢 Rivien määrä: DataTable.GetSheet(1).GetRowCount palauttaa datarivien lukumäärän ja jättää pois otsikkorivin.
  • 🎯 Rivin osoitin: Kutsu DataTable.SetCurrentRow-funktiota ennen jokaista lukukertaa, jotta DataTable.Value palauttaa odottamasi solun.
  • ✏️ Kirjoita takaisin: DataTable.Value-funktion lisääminen muuttaa vain muistissa olevaa solua; DataTable.Export tallentaa taulukon levylle.
  • 🧩 COM-vaihtoehto: Luo Excel.Application-objekti, kun muotoilua, kaavoja tai useita avoimia työkirjoja tarvitaan.
  • ⚠️ Puhdistus: Kutsu aina Quit-komentoa ja vapauta objektit, muuten EXCEL.EXE jää pysyvästi muistiin ja lukitsee tiedoston.

Kuinka tuoda, lukea ja muuttaa tietoja Excelistä QTP/UFT

Laskentataulukot ovat edelleen yleisin paikka, jossa testaajat säilyttävät syötearvojaan, odotettuja tuloksiaan ja ympäristöasetuksiaan. QTP, nyt myydään nimellä OpenText UFT Yksi sen jälkeen, kun tuote siirtyi HP:ltä Micro Focukselle ja sitten OpenText, lukee kyseiset laskentataulukot DataTable-objektin kautta. Alla olevissa osioissa näytetään tarkat lausekkeet, joita käytetään työkirjan tuomiseen, sen rivien laskemiseen, yksittäisten solujen lukemiseen, arvojen muuttamiseen ja taulukon kirjoittamiseen takaisin levylle.

Vaiheet tietojen tuomiseen, lukemiseen ja muuttamiseen EXCEListä

Oletetaan, että haluat tuoda seuraavat Myynti.xls työkirja kokeeseesi.

Sales.xls-lähdetyökirja avattiin Excelissä ennen tuontia UFT

Kun tiedosto on tuotu sisään UFT, ylimmästä rivistä tulee sarakeotsikko, joten jäsentele tietosi vastaavasti. Rivillä 1 olevia tietoja käsitellään parametrin niminä eikä testitietoina, ja jokainen jäljellä oleva rivi lasketaan datariviksi.

Koko Excel-tiedoston tuonnin syntaksi on esitetty alla.

DataTable.Import(FileName)

Meidän tapauksessamme lauseke on seuraavanlainen. VBScript ei tarvitse sulkeita, kun metodia kutsutaan lausekkeena, joten tässä käytetään selkokielistä muotoa.

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

Suorituksen jälkeen tuodut rivit näkyvät suorituksenaikaisessa Data-ruudussa täsmälleen sellaisena kuin ne on aseteltu työkirjaan.

Tuodut myyntitiedot näkyvät kohdassa UFT ajonaikainen tietotaulukkoruutu

Seuraavaksi näytetään syntaksi yhden tietyn taulukon tuomiseksi. SheetSource on työkirjan sisällä oleva taulukko ja SheetDest on kohdetaulukko suorituksenaikaisessa datataulukossa.

DataTable.ImportSheet FileName, SheetSource, SheetDest

Käytä HaeRivimäärä menetelmä taulukon tietorivien määrän selvittämiseksi. Jokaisen lausekkeen on oltava omalla rivillään.

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

Näyttöön tuleva viestiruutu ilmoittaa tuodun taulukon rivien yhteissumman.

MsgBox tuodun myyntitaulukon GetRowCount-tuloksen näyttäminen

Siirtääksesi osoittimen tietylle riville, käytä Aseta nykyinen rivi menetelmä. Toinen argumentti DataTable.Value on arkin numero, ei rivinumero, minkä vuoksi riviosoitinta on siirrettävä erikseen.

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

Molemmat arvot luetaan samasta sarakkeesta, mutta kahdelta eri riviltä, ​​ja viestiruutu tulostaa ne vierekkäin.

MsgBox vertaamalla datataulukon rivin 1 ja rivin 2 Year-arvoa

Käytä Arvo metodia tehtävänannon vasemmalla puolella muuttaaksesi tuodun taulukon tietoja. Muutos säilyy muistissa, kunnes kutsut metodia Vie, joka kirjoittaa ajonaikaisen datataulukon takaisin Excel-tiedostoon.

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

Muokattu solu näkyy suorituksenaikaisessa Data-ruudussa heti tehtävän suorittamisen jälkeen.

Suorituksenaikainen datataulukko, joka näyttää DataTable.Value-metodilla päivitetyn solun

Viedyn työkirjan avaaminen vahvistaa, että muokatut arvot tallennettiin levylle sen sijaan, että niitä säilytettäisiin vain suorituksen ajan.

Viety Excel-tiedosto avattiin Excelissä, jossa näkyvät DataTable.Export-funktion tallentamat muutetut arvot.

💡 Vinkki: Vie tiedosto eri tiedostonimeen kuin tuomasi tiedosto. Palaaminen samaan avoimeen työkirjaan on nopein tapa laukaista jakamisvirhe ja menettää suoritus.

Excel-tietojen lukeminen, muuttaminen ja vieminen: Täydellinen esimerkki

Yllä olevat koodinpätkät esittelevät kukin yhden metodin. Todellisessa datapohjaisessa testissä ne yhdistetään yhdeksi silmukaksi, joka käy läpi jokaisen rivin, laskee jotakin, tallentaa tuloksen ja vie taulukon. Oletetaan, että työkirja Myynti.xls sisältää seuraavat neljä saraketta ja kolme datariviä.

Vuosi Alue Yksiköt Hinta
2023 Itään 120 25
2024 Itään 150 25
2025 Länsi 200 30

Alla oleva skripti lisää RevEnue sarakkeen, täyttää sen rivi riviltä, ​​pitää juoksevaa summaa ja kirjoittaa valmiin taulukon uuteen tiedostoon. AddParameter käytetään, koska saraketta ei ole lähdetyökirjassa; sen kutsuminen jo olemassa olevalle sarakkeelle aiheuttaa virheen.

' 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

lähtö:

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

Kolme kohtaa tässä käsikirjoituksessa ovat tärkeämpiä kuin muut. Ensinnäkin, GetRowCount palauttaa arvon 3 eikä 4, koska otsikkorivi käytetään sarakeniminä. Toiseksi, SetCurrentRow kutsutaan jokaisen iteraation alussa; ilman sitä kaikki kolme iteraatiota lukisivat saman rivin. Kolmanneksi, datataulukosta tulevat arvot ovat merkkijonoja, joten CInt käytetään ennen kertolaskua merkkijonojen ketjuttamisen välttämiseksi aritmeettisen sijaan.ping DataTable.Export jättäisi lasketun tuoton näkyviin Data-ruudussa, mutta puuttuisi levyllä olevista tiedostoista.

DataTable-objekti vs. Excel COM -objekti UFT

DataTable-objekti ei ole ainoa tapa päästä laskentataulukkoon. UFT skriptit voivat myös luoda Excel.Application COM-objekti ja ajaa Exceliä suoraan. Nämä kaksi lähestymistapaa ratkaisevat erilaisia ​​ongelmia.

Aspect DataTable-objekti Excelin COM-objekti
Excelin asennus Ei vaadita suorituskoneella Microsoft Excelin on oltava asennettuna
Osoitustyyli Sarakkeen nimen ja rivin osoittimen mukaan Solukoordinaattien, alueiden tai nimettyjen alueiden mukaan
Toistot Rivit ohjaavat testi-iteraatioita automaattisesti Ei linkkiä iteraatioihin; katsoping on manuaalinen
Muotoilu ja kaavat Ohitetaan; vain arvot luetaan Täysi pääsy kaavoihin, väreihin ja kaavioihin
Useita työkirjoja Yksi suoritusaikainen taulukko, taulukot tuodaan yksi kerrallaan Mikä tahansa määrä työkirjoja avoinna samanaikaisesti
Tulosten raportointi Arvot näkyvät kohdassa UFT suorita tulokset automaattisesti Mitään ei tallenneta, ellet itse ilmoita siitä
Siivoustaakka Hoitaa UFT Sinun on suljettava, lopetettava ja vapautettava jokainen objekti

Käytännön sääntö on yksinkertainen. Käytä DataTable-objektia suoraviivaiseen parametrisointiin, jossa jokainen laskentataulukon rivi on yksi iteraatio. automaatiotestaus suorita. Vaihda COM-objektiin vain, kun tarvitset jotain, mitä datataulukko ei voi ilmaista, kuten kaavan tuloksen lukemista, muotoillun raportin kirjoittamista tai kahden työkirjan vertaamista samassa komentosarjassa. Alla oleva esimerkki lukee yhden solun, kirjoittaa tilan takaisin ja sulkee Excelin oikein.

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

lähtö:

Cell A2 contains: 2023

Solussa A2 on luku 2023, koska laskentataulukon rivi 1 on otsikkorivi ja sarake A on VuosiHuomaa, että COM-osoitus on yhteen perustuva ja laskee otsikon, kun taas DataTable.SetCurrentRow 1 pisteet ensimmäisellä datarivillä.

Yleisiä virheitä Exceliä käytettäessä UFT ja kuinka korjata ne

Useimmat Excel-ongelmat UFT johtuvat pienestä joukosta toistuvia virheitä. Niiden tunnistaminen säästää paljon virheenkorjausaikaa.

⚠️ Varoitus: Orpo EXCEL.EXE-prosessi on COM-automaation yleisin yksittäinen sivuvaikutus. Jokainen CreateObject("Excel.Application") joka ei vastaa Quit plus Set … = Nothing jättää piilotetun Excel-instanssin toimimaan. Muutaman sadan testiajon jälkeen suorituskoneen muisti on täynnä ja lähdetyökirja lukitaan muokkaukselta.

  • Excel pysyy muistissa. Sulje työkirja, soita xlApp.Quitja vapauta sitten taulukko-, työkirja- ja sovellusobjektit tässä järjestyksessä. Sovelluksen vapauttaminen ensin jättää aktiivisen viittauksen ja pitää prosessin toiminnassa.
  • Muutokset katoavat juoksun jälkeen. DataTable.Value kirjoittaa vain ajonaikaiseen datataulukkoon. Ilman DataTable.Export, tiedostojärjestelmään ei pääse mitään.
  • ”Saraketta ei ole olemassa” tai virheellinen parametrivirhe. Sarakkeen nimi välitettiin käyttäjälle DataTable.Value täytyy vastata otsikkosolua täsmälleen, mukaan lukien välilyönnit. Käytä AddParameter luoda sarake ennen siihen kirjoittamista.
  • Jokainen iteraatio lukee samat arvot. SetCurrentRow ei kutsuttu silmukan sisällä, joten riviosoitin ei koskaan liikkunut.
  • Yhden rivin poikkeama lasketaan. GetRowCount jättää otsikkorivin pois. Työkirja, jossa on otsikko ja kymmenen tietuetta, palauttaa arvon 10, ei 11.
  • Polku- ja käyttöoikeusvirheet. Kovakoodatut polut, kuten D:\Automation\Sales.xls katkos muilla koneilla. Luo polku ympäristömuuttujasta, jotta sama komentosarja suoritetaan jokaisella agentilla.
  • Yhdistetyt solut ja useita otsikkorivejä. Tuonti odottaa täsmälleen yhtä otsikkoriviä, jossa on yksilöllisiä nimiä. Yhdistetyt solut tuottavat tyhjiä tai kaksoiskappaleisia parametrien nimiä.
  • Jakamisrikkomus viennissä. Kohdetiedostoa ei voi avata Excelissä, kun Export suoritetaan. Sulje se ensin tai vie aikaleimatulla tiedostonimellä varustettuun tiedostoon.

Hyödyllinen tapa on kääriä COM-siivous On Error Resume Next lohko sijoitetaan erilliseen palautustoimintoon, joten kesken skriptin tapahtuva virhe sulkee Excelin silti. Kun Excelin tiedot syöttävät muodollisen testitapaus tietovarastossa sama käytäntö koskee tuloksia: vie tiedosto kerran, varmista, että tiedosto on olemassa, ja liitä se sitten ajoon.

Päästäksesi pidemmälle tässä käsitellyissä aiheissa, käy läpi koko QTP/UFT oppitunti laajemmassa viitekehyksessä opi viemään tuloksia eteenpäin ALM-palvelu UFT, tarkastele perusteita kohdassa ohjelmistojen testausja vertaa lähestymistapaa datapohjaiseen komentosarjojen kirjoittamiseen Selenium.

UKK

UFT tuo .xls-, .xlsx- ja .csv-tiedostot suorituksenaikaiseen datataulukkoon. Vienti tuottaa aina .xls-työkirjan, joten tarvitaan muunnin tai Excelin COM-objekti, kun downstream-järjestelmä vaatii uudemman .xlsx-muodon.

Suunnitteluaikataulu tallennetaan testin mukana, eikä se muutu. Suorituksenaikainen taulukko on kopio, joka luodaan suorituksen alkaessa. Tuonnit ja arvojen määritykset vaikuttavat vain suorituksenaikaiseen kopioon, joka hylätään, ellei sitä viedä.

Ei DataTable-objektille, joka jäsentää itse työkirjan. Kyllä kaikille komentosarjoille, jotka kutsuvat CreateObject("Excel.Application")-funktiota, koska kyseinen reitti automatisoi todellisen Excel-instanssin ja epäonnistuu välittömästi koneella, jossa sitä ei ole.

Kyllä. Kutsu ImportSheet-funktiota kerran per arkki käyttäen joka kerta eri kohdearkin nimeä. Globaalit tiedot kuuluvat globaalille arkille, kun taas toimintokohtaiset arvot vastaavalle toimintoarkille, joten iteraatiot pysyvät riippumattomina.

Kyllä, ja silmukan runko on yleensä oikein. Varmista kaksi asiaa käsin: että SetCurrentRow on silmukan sisällä ja että numeeriset solut muunnetaan CInt:llä tai CDbl:llä. Generoidusta koodista usein puuttuu molemmat.

Tekoälyn ominaisuudet modernissa UFT Ohjausobjektien visuaalinen tunnistus vapautetaan, joten uudelleennimetty kenttä ei enää riko kaikkia tietojoukon rivejä. Tekoäly voi myös ehdottaa lisää rajaavia rivejä, mikä laajentaa laskentataulukon kattavuutta ilman manuaalista testisuunnittelua.

Tiivistä tämä viesti seuraavasti: