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.

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.
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.
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.
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.
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.
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.
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.Valuescrive solo nella tabella dati di runtime. SenzaDataTable.Export, nulla raggiunge il file system. - "La colonna non esiste" oppure un errore di parametro non valido. Il nome della colonna passato a
DataTable.Valuedeve corrispondere esattamente alla cella di intestazione, inclusi gli spazi finali. UtilizzareAddParameterCreare una colonna prima di scriverci. - Ad ogni iterazione vengono letti gli stessi valori.
SetCurrentRowLa funzione non veniva chiamata all'interno del ciclo, quindi il puntatore di riga non si muoveva mai. - Conteggio delle righe sfasato di una riga.
GetRowCountEsclude 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.xlsInterrompere 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
ExportEsegue. 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.






