Cómo importar, leer y cambiar datos de EXCEL en QTP/UFT

⚡ Resumen inteligente

Importar, leer y cambiar datos de Excel en QTP/UFT Se basa en el objeto DataTable integrado, que carga un libro de trabajo en la tabla de datos en tiempo de ejecución para que cada script de automatización pueda controlar los pasos de prueba a partir de las filas de la hoja de cálculo.

  • 📥 Importar: DataTable.Import carga un libro de trabajo completo, mientras que DataTable.ImportSheet importa una hoja específica a una hoja de destino elegida.
  • 🗂️ Regla de encabezado: La primera fila de la hoja de cálculo se convierte en los nombres de las columnas, así que estructure la hoja antes de que se ejecute la importación.
  • 🔢 Número de filas: DataTable.GetSheet(1).GetRowCount devuelve el número de filas de datos y excluye la fila de encabezado.
  • 🎯 Puntero de fila: Llama a DataTable.SetCurrentRow antes de cada lectura para que DataTable.Value devuelva la celda que esperas.
  • ✏️ Contestar: Asignar un valor a DataTable.Value modifica una celda solo en la memoria; DataTable.Export guarda la hoja en el disco.
  • 🧩 Opción COM: Cree un objeto Excel.Application cuando se requiera formato, fórmulas o varios libros de trabajo abiertos.
  • ⚠️ Limpieza: Siempre llame a la función Salir y libere los objetos; de lo contrario, EXCEL.EXE permanecerá residente y bloqueará el archivo.

Cómo importar, leer y cambiar datos desde Excel en QTP/UFT

Las hojas de cálculo siguen siendo el lugar más común donde los evaluadores guardan sus valores de entrada, resultados esperados y configuraciones del entorno. QTP, ahora se vende como OpenText UFT Uno después de que el producto pasó de HP a Micro Focus y luego a OpenText, lee esas hojas de cálculo a través del objeto DataTable. Las secciones siguientes muestran las instrucciones exactas utilizadas para importar un libro de trabajo, contar sus filas, leer celdas individuales, cambiar valores y guardar la hoja en el disco.

Pasos para importar, leer y cambiar datos desde EXCEL

Considere que desea importar lo siguiente Ventas.xls Incluya el libro de ejercicios en su examen.

El libro de trabajo de origen Sales.xls se abrió en Excel antes de importarlo. UFT

Una vez que el archivo se importa en UFTLa fila superior se convierte en el encabezado de la columna, así que estructure sus datos en consecuencia. Todo lo que aparece en la fila 1 se trata como un nombre de parámetro en lugar de como datos de prueba, y cada fila restante se cuenta como una fila de datos.

A continuación se muestra la sintaxis para importar un archivo Excel completo.

DataTable.Import(FileName)

En nuestro caso, la instrucción queda de la siguiente manera. VBScript no necesita paréntesis cuando se llama a un método como una instrucción, por lo que aquí se utiliza la forma simple.

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

Tras la ejecución, las filas importadas aparecen en el panel de datos en tiempo de ejecución exactamente como estaban dispuestas en el libro de trabajo.

Datos de ventas importadas que se muestran en el UFT panel de tabla de datos en tiempo de ejecución

A continuación se muestra la sintaxis para importar una hoja de cálculo específica. SheetSource es la hoja dentro del libro de trabajo y SheetDest es la hoja de destino en la tabla de datos de tiempo de ejecución.

DataTable.ImportSheet FileName, SheetSource, SheetDest

Utilice el Obtener número de filas Método para obtener el número de filas de datos en una hoja de cálculo. Cada instrucción debe ir en una línea independiente.

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

El cuadro de mensaje que aparece informa del total de filas de la hoja importada.

msgBox mostrando el resultado de GetRowCount para la hoja de Ventas importada

Para mover el puntero a una fila específica, utilice el EstablecerFilaActual método. El segundo argumento de DataTable.Value es el número de hoja, no el número de fila, por eso el puntero de fila tiene que moverse por separado.

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

Ambos valores se leen de la misma columna, pero de dos filas diferentes, y el cuadro de mensaje los imprime uno al lado del otro.

msgBox Comparando el valor del año de la fila 1 y la fila 2 de la tabla de datos.

Utilice el Valor Método a la izquierda de una asignación para cambiar datos en la hoja importada. El cambio permanece en memoria hasta que se llama Exportar, que escribe la tabla de datos de tiempo de ejecución en un archivo de Excel.

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

La celda editada es visible en el panel de datos en tiempo de ejecución inmediatamente después de que se ejecute la tarea.

Tabla de datos en tiempo de ejecución que muestra una celda actualizada mediante el método DataTable.Value.

Al abrir el libro de trabajo exportado, se confirma que los valores modificados se guardaron en el disco y no se conservaron únicamente durante la ejecución del programa.

El archivo Excel exportado se abrió en Excel mostrando los valores modificados guardados por DataTable.Export.

💡 Consejo: Exporta el archivo con un nombre diferente al que importaste. Volver a escribir en el mismo libro de trabajo abierto es la forma más rápida de provocar una infracción de uso compartido y perder la ejecución.

Cómo leer, modificar y exportar datos de Excel: un ejemplo completo

Los fragmentos anteriores demuestran cada uno un método. En una prueba real basada en datos, se combinan en un único bucle que recorre cada fila, calcula algo, almacena el resultado y exporta la hoja. Supongamos que el libro de trabajo es Ventas.xls Contiene las siguientes cuatro columnas y tres filas de datos.

Año Región Monitoreadas Precio
2023 Este 120 25
2024 Este 150 25
2025 West 200 30

El script a continuación agrega un Revenue La columna se rellena fila por fila, se mantiene un total acumulado y se escribe la hoja finalizada en un archivo nuevo. AddParameter Se utiliza porque la columna no existe en el libro de trabajo de origen; llamarla para una columna que ya existe genera un error.

' 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

Salida:

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

Tres puntos de este guion importan más que el resto. Primero, GetRowCount devuelve 3 en lugar de 4 porque la fila de encabezado se consume como nombres de columna. Segundo, SetCurrentRow Se llama al principio de cada iteración; sin ella, las tres iteraciones leerían la misma fila. En tercer lugar, los valores que salen de la tabla de datos son cadenas, por lo que CInt Se aplica antes de la multiplicación para evitar la concatenación de cadenas en lugar de la aritmética. Saltarping DataTable.Export Esto dejaría los ingresos calculados visibles en el panel de datos, pero ausentes de cualquier archivo en el disco.

Objeto DataTable frente a objeto COM de Excel en UFT

El objeto DataTable no es la única forma de acceder a una hoja de cálculo. UFT Los scripts también pueden crear un Excel.Application Objeto COM y control directo de Excel. Ambos enfoques resuelven problemas diferentes.

Aspecto objeto DataTable Objeto COM de Excel
Instalación de Excel No es necesario en la máquina de ejecución. Microsoft Excel debe estar instalado
Estilo de direccionamiento Por nombre de columna y puntero de fila Por coordenadas de celda, rangos o rangos con nombre
Iteraciones Las filas impulsan automáticamente las iteraciones de prueba. No hay enlace a las iteraciones; looping es manual
Formato y fórmulas Ignorado; solo se leen los valores. Acceso completo a fórmulas, colores y gráficos.
Varios libros de trabajo Una tabla de tiempo de ejecución, hojas importadas una a una. Cualquier número de libros de trabajo abiertos simultáneamente
Informe de resultados Los valores aparecen en el UFT Ejecutar resultados automáticamente No se registra nada a menos que usted mismo lo reporte.
Carga de limpieza Manejado por UFT Debes cerrar, salir y liberar cada objeto.

La regla práctica es simple. Utilice el objeto DataTable para una parametrización sencilla, donde cada fila de la hoja de cálculo se convierte en una iteración de un pruebas de automatización Ejecutar. Utilice el objeto COM solo cuando necesite información que la tabla de datos no pueda proporcionar, como leer el resultado de una fórmula, generar un informe con formato o comparar dos libros de trabajo en el mismo script. El siguiente ejemplo lee una celda, devuelve un estado y cierra Excel correctamente.

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

Salida:

Cell A2 contains: 2023

La celda A2 contiene 2023 porque la fila 1 de la hoja de cálculo es la fila de encabezado y la columna A es Año . Observe que el direccionamiento COM se basa en uno y cuenta el encabezado, mientras que DataTable.SetCurrentRow 1 señala la primera fila de datos.

Errores comunes al usar Excel con UFT y cómo solucionarlos

La mayoría de los problemas de Excel en UFT Provienen de un pequeño conjunto de errores repetibles. Reconocerlos ahorra mucho tiempo de depuración.

⚠️ Advertencia: Un proceso EXCEL.EXE huérfano es el efecto secundario más común de la automatización COM. Cada CreateObject("Excel.Application") que no coincide con Quit más Set … = Nothing Deja una instancia oculta de Excel en ejecución. Tras varios cientos de pruebas, la máquina de ejecución se queda sin memoria y el libro de trabajo de origen queda bloqueado para su edición.

  • Excel permanece en la memoria. Cierre el libro de trabajo, llame xlApp.QuitLuego, libere los objetos de la hoja, el libro de trabajo y la aplicación en ese orden. Liberar primero la aplicación deja una referencia activa y mantiene el proceso en ejecución.
  • Los cambios desaparecen después de la ejecución. DataTable.Value escribe solo en la tabla de datos de tiempo de ejecución. Sin DataTable.Export, nada llega al sistema de archivos.
  • "La columna no existe" o error de parámetro no válido. El nombre de la columna que se pasa a DataTable.Value Debe coincidir exactamente con la celda del encabezado, incluidos los espacios finales. AddParameter crear una columna antes de escribir en ella.
  • En cada iteración se leen los mismos valores. SetCurrentRow No se llamó a la función dentro del bucle, por lo que el puntero de fila nunca se movió.
  • Contabilidad por una fila desfasada. GetRowCount excluye la fila de encabezado. Un libro de trabajo con un encabezado y diez registros devuelve 10, no 11.
  • Errores de ruta y permisos. Rutas codificadas de forma fija como D:\Automation\Sales.xls No se produce ningún fallo en otras máquinas. Construya la ruta a partir de una variable de entorno para que el mismo script se ejecute en todos los agentes.
  • Celdas combinadas y varias filas de encabezado. La importación requiere exactamente una fila de encabezado con nombres únicos. Las celdas combinadas producen nombres de parámetros en blanco o duplicados.
  • Violación de compartición en la exportación. El archivo de destino no se puede abrir en Excel mientras Export Se ejecuta. Ciérralo primero o expórtalo a un archivo con nombre que incluya la fecha y hora.

Un hábito útil es envolver la limpieza de COM en un On Error Resume Next El bloque se coloca en una función de recuperación dedicada, por lo que un fallo a mitad del script sigue cerrando Excel. Cuando los datos de Excel alimentan un sistema formal caso de prueba En el repositorio, se aplica la misma disciplina a los resultados: exportar una vez, verificar que el archivo exista y luego adjuntarlo a la ejecución.

Para profundizar en los temas tratados aquí, consulte el documento completo. QTP/UFT tutoriales Para el marco más amplio, aprenda cómo impulsar los resultados. ALM de UFT, repase los fundamentos en pruebas de softwarey comparar el enfoque con la programación basada en datos en Selenium.

Preguntas Frecuentes

UFT Importa archivos .xls, .xlsx y .csv a la tabla de datos en tiempo de ejecución. La exportación siempre genera un libro de trabajo .xls, por lo que se necesita un convertidor o el objeto COM de Excel cuando el sistema posterior requiere el formato .xlsx más reciente.

La tabla de diseño se guarda con la prueba y permanece sin cambios. La tabla de ejecución es una copia que se crea al iniciar la ejecución. Las importaciones y las asignaciones de valores solo afectan a la copia de ejecución, que se descarta a menos que se exporte.

No, para el objeto DataTable, que analiza el libro de trabajo en sí. Sí, para cualquier script que llame a CreateObject(“Excel.Application”), porque esa ruta automatiza una instancia real de Excel y falla inmediatamente en una máquina que no la tenga.

Sí. Llama a ImportSheet una vez por hoja, utilizando un nombre de hoja de destino diferente en cada ocasión. Los datos globales deben estar en la hoja Global, mientras que los valores específicos de cada acción deben estar en la hoja de acción correspondiente, de modo que las iteraciones se mantengan independientes.

Sí, y la estructura del bucle suele ser correcta. Verifica manualmente dos cosas: que SetCurrentRow esté dentro del bucle y que las celdas numéricas se conviertan con CInt o CDbl. El código generado suele omitir ambas.

Características de la IA en la actualidad UFT Una versión reconoce visualmente los controles, por lo que un campo renombrado ya no rompe todas las filas de un conjunto de datos. La IA también puede sugerir filas de límites adicionales, ampliando la cobertura de la hoja de cálculo sin necesidad de diseñar pruebas manualmente.

Resumir este post con: