Come importare, leggere e modificare i dati da EXCEL in QTP/UFT

โšก Riepilogo intelligente

Importazione, lettura e modifica dei dati da Excel in QTP/UFT si basa sull'oggetto DataTable integrato, che carica una cartella di lavoro nella tabella dati in fase di esecuzione, in modo che ogni script di automazione possa eseguire i passaggi di test a partire dalle righe del foglio di calcolo.

  • ๐Ÿ“ฅ Importare: Il metodo DataTable.Import carica un'intera cartella di lavoro, mentre DataTable.ImportSheet copia un foglio specificato in un foglio di destinazione scelto.
  • ๐Ÿ—‚๏ธ Regola dell'intestazione: La prima riga del foglio di calcolo diventa il nome delle colonne, quindi รจ importante strutturare il foglio prima di avviare l'importazione.
  • ๐Ÿ”ข Numero di righe: DataTable.GetSheet(1).GetRowCount restituisce il numero di righe di dati ed esclude la riga di intestazione.
  • ๐ŸŽฏ Puntatore di riga: Chiama DataTable.SetCurrentRow prima di ogni lettura in modo che DataTable.Value restituisca la cella prevista.
  • ๏ธ Rispondi: L'assegnazione di un valore a DataTable.Value modifica una cella solo in memoria; DataTable.Export salva il foglio su disco.
  • ๐Ÿงฉ Opzione COM: Crea un oggetto Excel.Application quando sono necessarie formattazione, formule o la gestione di piรน cartelle di lavoro aperte.
  • โš ๏ธ Pulire: Chiamare sempre il metodo Esci e rilasciare gli oggetti, altrimenti EXCEL.EXE rimane residente e blocca il file.

Come importare, leggere e modificare i dati da Excel in QTP/UFT

I fogli di calcolo rimangono il metodo piรน comune utilizzato dai tester per annotare i valori di input, i risultati attesi e le impostazioni dell'ambiente. QTP, ora venduto come OpenText UFT Uno dopo che il prodotto รจ passato da HP a Micro Focus e poi a OpenText, legge quei fogli di calcolo tramite l'oggetto DataTable. Le sezioni seguenti mostrano le istruzioni esatte utilizzate per importare una cartella di lavoro, contarne le righe, leggere le singole celle, modificarne i valori e riscrivere il foglio su disco.

Passaggi per importare, leggere, modificare dati da EXCEL

Considera che vuoi importare quanto segue Vendite.xls inserisci il quaderno di lavoro nel tuo test.

Cartella di lavoro sorgente Sales.xls aperta in Excel prima dell'importazione in UFT

Una volta importato il file in UFT, la riga superiore diventa l'intestazione di colonna, quindi struttura i tuoi dati di conseguenza. Tutto ciรฒ che si trova nella riga 1 viene trattato come nome di parametro anzichรฉ come dati di test, e ogni riga rimanente viene conteggiata come riga di dati.

La sintassi per importare un intero file Excel รจ mostrata di seguito.

DataTable.Import(FileName)

Nel nostro caso l'istruzione diventa la seguente. VBScript non richiede parentesi quando un metodo viene chiamato come istruzione, quindi qui viene utilizzata la forma semplice.

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

Al termine dell'esecuzione, le righe importate vengono visualizzate nel riquadro Dati in fase di esecuzione esattamente come erano disposte nella cartella di lavoro.

Dati di vendita importati mostrati nel UFT riquadro Tabella dati in fase di esecuzione

Di seguito viene mostrata la sintassi per importare un foglio di calcolo specifico. SheetSource รจ il foglio all'interno del quaderno di lavoro e SheetDest รจ il foglio di destinazione nella tabella dei dati di runtime.

DataTable.ImportSheet FileName, SheetSource, SheetDest

Usa il OttieniConteggioRighe Metodo per ottenere il numero di righe di dati in un foglio di calcolo. Ogni istruzione deve trovarsi su una riga separata.

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

La finestra di messaggio visualizzata riporta il totale delle righe del foglio importato.

MsgBox Visualizzazione del risultato di GetRowCount per il foglio Vendite importato

Per spostare il puntatore su una riga specifica, utilizzare il ImpostaRigaCorrente metodo. Il secondo argomento di DataTable.Value รจ il numero del foglio, non il numero di riga, motivo per cui il puntatore di riga deve essere spostato separatamente.

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

Entrambi i valori vengono letti dalla stessa colonna ma da due righe diverse e la finestra di messaggio li visualizza uno accanto all'altro.

MsgBox confronto del valore Anno della riga 1 e della riga 2 della tabella dati

Usa il Valore metodo a sinistra di un'assegnazione per modificare i dati nel foglio importato. La modifica rimane in memoria finchรฉ non la chiami Esportareche riscrive la tabella dei dati in fase di esecuzione in un file Excel.

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

La cella modificata รจ visibile nel riquadro Dati di runtime subito dopo l'esecuzione dell'assegnazione.

Tabella dati in fase di esecuzione che mostra una cella aggiornata tramite il metodo DataTable.Value

Aprendo la cartella di lavoro esportata si puรฒ verificare che i valori modificati sono stati salvati su disco anzichรฉ essere conservati solo per la durata dell'esecuzione.

File Excel esportato aperto in Excel che mostra i valori modificati salvati da DataTable.Export

Suggerimento: Esporta il file con un nome diverso da quello di importazione. Riscrivere nello stesso file di lavoro aperto รจ il modo piรน rapido per incorrere in una violazione di condivisione e interrompere l'esecuzione.

Come leggere, modificare ed esportare dati Excel: un esempio completo

I frammenti di codice sopra riportati dimostrano ciascuno un metodo. In un test reale basato sui dati, vengono combinati in un unico ciclo che scorre ogni riga, calcola qualcosa, memorizza il risultato ed esporta il foglio. Si supponga che la cartella di lavoro Vendite.xls Contiene le seguenti quattro colonne e tre righe di dati.

Anno destinazione Unitร  Prezzo
2023 Est 120 25
2024 Est 150 25
2025 ovest 200 30

Lo script seguente aggiunge un Revseguito Il foglio di calcolo viene compilato riga per riga, mantiene un totale progressivo e salva il risultato finale in un nuovo file. AddParameter Viene utilizzato perchรฉ la colonna non esiste nella cartella di lavoro di origine; richiamarlo per una colonna giร  esistente genera un errore.

' 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

Produzione:

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

In questa sceneggiatura, tre punti sono piรน importanti di tutti gli altri. Primo, GetRowCount restituisce 3 anzichรฉ 4 perchรฉ la riga di intestazione viene utilizzata come nomi di colonna. In secondo luogo, SetCurrentRow viene chiamata all'inizio di ogni iterazione; senza di essa, tutte e tre le iterazioni leggerebbero la stessa riga. In terzo luogo, i valori che escono dalla tabella dati sono stringhe, quindi CInt viene applicato prima della moltiplicazione per evitare la concatenazione di stringhe invece dell'aritmetica. Saltaping DataTable.Export In questo modo, i ricavi calcolati rimarrebbero visibili nel riquadro Dati, ma non verrebbero salvati in alcun file su disco.

Oggetto DataTable vs Oggetto COM di Excel in UFT

L'oggetto DataTable non รจ l'unico modo per accedere a un foglio di calcolo. UFT gli script possono anche creare un Excel.Application Oggetto COM e controllo diretto di Excel. I due approcci risolvono problemi diversi.

Aspetto Oggetto DataTable Oggetto COM di Excel
Installazione di Excel Non richiesto sulla macchina di esecuzione Microsoft รˆ necessario installare Excel
Stile di indirizzamento Tramite nome di colonna e puntatore di riga Tramite coordinate di cella, intervalli o intervalli denominati
Iterazioni Le righe guidano automaticamente le iterazioni di test Nessun collegamento alle iterazioni; looping รจ manuale
Formattazione e formule Ignorato; vengono letti solo i valori Accesso completo a formule, colori e grafici.
Cartelle di lavoro multiple Una tabella di runtime, fogli importati uno alla volta รˆ possibile aprire contemporaneamente un numero qualsiasi di cartelle di lavoro.
Reporting dei risultati I valori appaiono nel UFT risultati dell'esecuzione automatica Nulla viene registrato a meno che non lo segnali tu stesso.
onere della pulizia Gestito da UFT รˆ necessario chiudere, uscire e rilasciare ogni oggetto

La regola pratica รจ semplice. Utilizzare l'oggetto DataTable per una parametrizzazione diretta, dove ogni riga del foglio di calcolo diventa un'iterazione di un test di automazione Eseguire. Passare all'oggetto COM solo quando รจ necessario qualcosa che la tabella dati non puรฒ esprimere, come leggere il risultato di una formula, scrivere un report formattato o confrontare due cartelle di lavoro nello stesso script. L'esempio seguente legge una cella, scrive uno stato e chiude Excel correttamente.

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

Produzione:

Cell A2 contains: 2023

La cella A2 contiene 2023 perchรฉ la riga 1 del foglio di lavoro รจ la riga di intestazione e la colonna A รจ Anno. Si noti che l'indirizzamento COM รจ basato su uno e conta l'intestazione, mentre DataTable.SetCurrentRow 1 punta alla prima riga di dati.

Errori comuni quando si utilizza Excel con UFT e come risolverli

La maggior parte dei problemi di Excel in UFT derivano da un piccolo insieme di errori ripetibili. Riconoscerli consente di risparmiare molto tempo nella fase di debug.

โš ๏ธ Attenzione: Un processo EXCEL.EXE orfano รจ l'effetto collaterale piรน comune dell'automazione COM. Ogni CreateObject("Excel.Application") che non corrisponde a Quit piรน Set โ€ฆ = Nothing Lascia in esecuzione un'istanza nascosta di Excel. Dopo alcune centinaia di esecuzioni di prova, il computer di esecuzione esaurisce la memoria e la cartella di lavoro di origine viene bloccata per la modifica.

  • Excel rimane in memoria. Chiudi la cartella di lavoro, chiama xlApp.QuitSuccessivamente, rilasciare gli oggetti foglio, cartella di lavoro e applicazione in quest'ordine. Rilasciando prima l'applicazione si mantiene un riferimento attivo e il processo rimane in esecuzione.
  • Le modifiche scompaiono al termine dell'esecuzione. DataTable.Value scrive solo nella tabella dati di runtime. Senza DataTable.Export, nulla raggiunge il file system.
  • "La colonna non esiste" oppure un errore di parametro non valido. Il nome della colonna passato a DataTable.Value deve corrispondere esattamente alla cella di intestazione, inclusi gli spazi finali. Utilizzare AddParameter Creare una colonna prima di scriverci.
  • Ad ogni iterazione vengono letti gli stessi valori. SetCurrentRow La funzione non veniva chiamata all'interno del ciclo, quindi il puntatore di riga non si muoveva mai.
  • Conteggio delle righe sfasato di una riga. GetRowCount Esclude la riga di intestazione. Una cartella di lavoro con un'intestazione e dieci record restituisce 10, non 11.
  • Errori di percorso e di autorizzazione. Percorsi codificati come D:\Automation\Sales.xls Interrompere l'esecuzione su altre macchine. Costruire il percorso da una variabile d'ambiente in modo che lo stesso script venga eseguito su ogni agente.
  • Celle unite e piรน righe di intestazione. L'importazione prevede esattamente una riga di intestazione con nomi univoci. Le celle unite producono nomi di parametri vuoti o duplicati.
  • Violazione della condivisione durante l'esportazione. Il file di destinazione non puรฒ essere aperto in Excel mentre Export Esegue. Chiudilo prima, oppure esportalo in un file con nome che includa data e ora.

Un'abitudine utile รจ quella di racchiudere la pulizia COM in un On Error Resume Next blocco posizionato in una funzione di ripristino dedicata, in modo che un errore a metร  script chiuda comunque Excel. Quando i dati di Excel alimentano un formale caso di prova Nel repository, la stessa disciplina si applica ai risultati: esportare una volta, verificare che il file esista, quindi allegarlo all'esecuzione.

Per approfondire gli argomenti trattati qui, consultare il testo completo QTP/UFT lezione per il quadro piรน ampio, impara come spingere i risultati in ALM da UFT, rivedere i fondamenti in test del softwaree confrontare l'approccio con lo scripting basato sui dati in Selenium.

DOMANDE FREQUENTI

UFT Importa file .xls, .xlsx e .csv nella tabella dati in fase di esecuzione. L'esportazione produce sempre una cartella di lavoro .xls, quindi รจ necessario un convertitore o l'oggetto COM Excel quando il sistema a valle richiede il formato .xlsx piรน recente.

La tabella di progettazione viene salvata insieme al test e rimane invariata. La tabella di runtime รจ una copia creata all'avvio dell'esecuzione. Le importazioni e le assegnazioni di valori interessano solo la copia di runtime, che viene scartata a meno che non venga esportata.

No per l'oggetto DataTable, che analizza la cartella di lavoro stessa. Sรฌ per qualsiasi script che chiama CreateObject("Excel.Application"), perchรฉ questo metodo automatizza un'istanza reale di Excel e fallisce immediatamente su una macchina che non ne รจ dotata.

Sรฌ. Chiama ImportSheet una volta per ogni foglio, specificando ogni volta un nome di foglio di destinazione diverso. I dati globali appartengono al foglio Globale, mentre i valori specifici dell'azione appartengono al foglio dell'azione corrispondente, in modo che le iterazioni rimangano indipendenti.

Sรฌ, e la struttura del ciclo รจ solitamente corretta. Verifica manualmente due cose: che SetCurrentRow si trovi all'interno del ciclo e che le celle numeriche vengano convertite con CInt o CDbl. Il codice generato spesso omette entrambi questi aspetti.

Caratteristiche dell'IA nella moderna UFT Le nuove versioni riconoscono visivamente i controlli, quindi un campo rinominato non interrompe piรน tutte le righe di un set di dati. L'IA puรฒ anche suggerire righe di confine aggiuntive, ampliando la copertura del foglio di calcolo senza la necessitร  di progettare manualmente i test.

Riassumi questo post con: