엑셀에서 데이터를 가져오고, 읽고, 변경하는 방법 QTP/UFT

⚡ 스마트 요약

엑셀에서 데이터 가져오기, 읽기 및 변경하기 QTP/UFT 이 기능은 내장된 DataTable 개체를 사용하는데, 이 개체는 통합 문서를 런타임 데이터 테이블로 로드하여 모든 자동화 스크립트가 스프레드시트 행에서 테스트 단계를 실행할 수 있도록 합니다.

  • 📥 수입: DataTable.Import는 전체 통합 문서를 불러오는 반면, DataTable.ImportSheet는 지정된 이름의 시트 하나를 선택한 대상 시트로 가져옵니다.
  • 🗂️ 헤더 규칙: 스프레드시트의 첫 번째 행이 열 이름이 되므로 가져오기를 실행하기 전에 시트 구조를 미리 구성하십시오.
  • 🔢 행 수: DataTable.GetSheet(1).GetRowCount는 헤더 행을 제외한 데이터 행의 수를 반환합니다.
  • 🎯 행 포인터: DataTable.SetCurrentRow를 매번 읽기 전에 호출하여 DataTable.Value가 예상하는 셀을 반환하도록 하세요.
  • ✏️ 답장을 보내주세요: DataTable.Value에 값을 할당하면 메모리상의 셀 값만 변경되고, DataTable.Export는 시트를 디스크에 저장합니다.
  • 🧩 COM 옵션: 서식 지정, 수식 입력 또는 여러 개의 열린 통합 문서가 필요한 경우 Excel.Application 개체를 생성합니다.
  • ⚠️ 정리 : 반드시 Quit 함수를 호출하여 객체를 해제하십시오. 그렇지 않으면 EXCEL.EXE 프로세스가 상주하면서 파일을 잠급니다.

엑셀에서 데이터를 가져오고 읽고 변경하는 방법 QTP/UFT

테스터들이 입력값, 예상 결과, 환경 설정 등을 저장하는 데 가장 흔히 사용하는 도구가 여전히 스프레드시트입니다. QTP현재 판매 중 OpenText UFT 제품이 HP에서 마이크로 포커스로, 그리고 다시 HP로 옮겨진 후, OpenText이 코드는 DataTable 객체를 통해 스프레드시트를 읽습니다. 아래 섹션에서는 통합 문서를 가져오고, 행 수를 세고, 개별 셀을 읽고, 값을 변경하고, 시트를 디스크에 다시 저장하는 데 사용되는 정확한 구문을 보여줍니다.

EXCEL에서 데이터 가져오기, 읽기, 변경 단계

다음 항목들을 가져오고 싶다고 가정해 보세요. 판매.xls 워크북을 테스트에 포함하세요.

Sales.xls 원본 통합 문서는 가져오기 전에 Excel에서 열렸습니다. UFT

파일이 불러와지면 UFT맨 위 행이 열 머리글이 되므로 데이터를 그에 맞게 구성해야 합니다. 첫 번째 행에 있는 내용은 테스트 데이터가 아닌 매개변수 이름으로 처리되며, 나머지 행은 모두 데이터 행으로 간주됩니다.

엑셀 파일 전체를 가져오는 구문은 다음과 같습니다.

DataTable.Import(FileName)

우리 경우에는 해당 구문이 다음과 같이 됩니다. VBScript에서는 메서드를 호출할 때 괄호가 필요하지 않으므로 여기서는 일반 형식을 사용합니다.

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

실행 후 가져온 행은 통합 문서에 배치된 그대로 런타임 데이터 창에 나타납니다.

수입 판매 데이터는 다음과 같습니다. UFT 런타임 데이터 테이블 창

다음은 특정 시트를 가져오는 구문입니다. SheetSource 워크북 안에 있는 시트인가요? SheetDest 실행 시간 데이터 테이블의 대상 시트입니다.

DataTable.ImportSheet FileName, SheetSource, SheetDest

사용 행 수 가져오기 시트의 데이터 행 수를 가져오는 메서드입니다. 각 문장은 반드시 한 줄에 작성해야 합니다.

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

나타나는 메시지 상자에는 가져온 시트의 행 합계가 표시됩니다.

MsgBox 가져온 판매 시트에 대한 GetRowCount 결과를 표시합니다.

포인터를 특정 행으로 이동하려면 다음을 사용하십시오. SetCurrentRow 메서드. 두 번째 인수 DataTable.Value 시트 번호이지 행 번호가 아니므로 행 포인터를 별도로 이동해야 합니다.

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

두 값은 동일한 열의 서로 다른 행에서 읽어오며, 메시지 상자에는 두 값이 나란히 출력됩니다.

MsgBox 데이터 테이블의 1행과 2행의 연도 값을 비교합니다.

사용 가치관 할당문 왼쪽에 있는 메서드를 호출하면 가져온 시트의 데이터가 변경됩니다. 변경 사항은 해당 메서드를 호출할 때까지 메모리에 유지됩니다. 수출이 함수는 실행 시간 데이터 테이블을 엑셀 파일에 다시 기록합니다.

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

편집된 셀은 할당이 실행된 직후 런타임 데이터 창에 표시됩니다.

DataTable.Value 메서드를 통해 업데이트된 셀을 보여주는 런타임 데이터 테이블

내보낸 통합 문서를 열어보면 수정된 값이 실행 시간 동안만 유지되는 것이 아니라 디스크에 저장되었음을 확인할 수 있습니다.

DataTable.Export로 저장된 변경된 값을 보여주는 내보낸 Excel 파일을 Excel에서 열었습니다.

💡 팁: 가져온 파일 이름과 다른 파일 이름으로 내보내세요. 열려 있는 동일한 통합 문서에 다시 쓰는 것은 공유 위반 오류를 발생시켜 실행 결과를 잃는 가장 빠른 방법입니다.

엑셀 데이터 읽기, 변경 및 내보내기 방법: 완벽한 예제

위의 코드 조각들은 각각 하나의 방법을 보여줍니다. 실제 데이터 기반 테스트에서는 이 코드 조각들을 하나의 루프로 결합하여 모든 행을 순회하며, 어떤 계산을 수행하고, 결과를 저장한 후 시트를 내보냅니다. 워크북이 다음과 같다고 가정해 보겠습니다. 판매.xls 다음 네 개의 열과 세 개의 데이터 행을 포함합니다.

출간연도 지역 단위 가격
2023 동쪽 120 25
2024 동쪽 150 25
2025 West 200 30

아래 스크립트는 다음을 추가합니다. Revenue 열을 선택하고, 행별로 채우고, 누적 합계를 계산한 다음, 완성된 시트를 새 파일에 저장합니다. AddParameter 해당 열이 원본 통합 문서에 존재하지 않기 때문에 사용됩니다. 이미 존재하는 열에 대해 이 함수를 호출하면 오류가 발생합니다.

' 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

출력:

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

이 대본에서 다른 어떤 것보다 중요한 세 가지 사항이 있습니다. 첫째, GetRowCount 헤더 행이 열 이름으로 사용되기 때문에 4가 아닌 3을 반환합니다. 둘째, SetCurrentRow 이 함수는 모든 반복의 시작 부분에서 호출됩니다. 이 함수가 없으면 세 번의 반복 모두 동일한 행을 읽게 됩니다. 세 번째로, 데이터 테이블에서 나오는 값은 문자열이므로 CInt 문자열 연결 대신 산술 연산을 수행하기 위해 곱셈 전에 적용됩니다.ping DataTable.Export 이렇게 하면 계산된 수익은 데이터 창에는 표시되지만 디스크의 어떤 파일에도 저장되지 않습니다.

DataTable 객체와 Excel COM 객체의 차이점 UFT

DataTable 객체가 스프레드시트에 접근하는 유일한 방법은 아닙니다. UFT 스크립트는 또한 다음을 생성할 수 있습니다. Excel.Application COM 객체를 사용하거나 Excel을 직접 제어하는 ​​두 가지 접근 방식이 있습니다. 이 두 접근 방식은 서로 다른 문제를 해결합니다.

아래 DataTable 객체 Excel COM 개체
엑셀 설치 실행 시스템에 필요하지 않음 Microsoft Excel이 설치되어 있어야 합니다.
호칭 스타일 열 이름과 행 포인터로 셀 좌표, 범위 또는 명명된 범위를 기준으로
반복 행을 기반으로 테스트 반복이 자동으로 진행됩니다. 반복문에 대한 링크 없음; looping 수동입니다
서식 및 수식 무시됨; 값만 읽습니다. 공식, 색상 및 차트에 대한 전체 액세스 권한
여러 개의 워크북 하나의 런타임 테이블, 시트는 한 번에 하나씩 가져옵니다. 동시에 여러 개의 워크북을 열 수 있습니다.
결과 보고 값은 다음과 같이 나타납니다. UFT 실행 결과 자동 표시 직접 신고하지 않으면 아무것도 기록되지 않습니다.
청소 부담 취급 UFT 모든 객체를 닫고 종료한 다음 해제해야 합니다.

실용적인 규칙은 간단합니다. 직관적인 매개변수화를 위해 DataTable 객체를 사용하세요. 여기서 스프레드시트의 각 행은 하나의 반복이 됩니다. 자동화 테스트 실행하세요. 데이터 테이블에서 표현할 수 없는 작업(예: 수식 결과 읽기, 서식이 지정된 보고서 작성, 동일한 스크립트에서 두 통합 문서 비교)이 필요한 경우에만 COM 개체로 전환하세요. 아래 예제는 셀 하나를 읽고 상태를 반환한 다음 Excel을 정상적으로 종료합니다.

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

출력:

Cell A2 contains: 2023

워크시트의 1행이 머리글 행이고 A열이 1열이므로 A2 셀에는 2023이 저장됩니다. 출간연도COM 주소 지정은 1부터 시작하며 헤더를 포함한다는 점에 유의하십시오. DataTable.SetCurrentRow 1 첫 번째 데이터 행을 가리킵니다.

엑셀 사용 시 흔히 발생하는 오류 UFT 그리고 그것을 고치는 방법

대부분의 엑셀 문제는 다음과 같습니다. UFT 문제는 몇 가지 반복적인 실수에서 비롯됩니다. 이러한 실수를 파악하면 디버깅 시간을 크게 절약할 수 있습니다.

⚠️ 경고: COM 자동화의 가장 흔한 부작용은 사용되지 않는 EXCEL.EXE 프로세스입니다. CreateObject("Excel.Application") 그것은 일치하지 않습니다 Quit ...을 더한 Set … = Nothing 숨겨진 Excel 인스턴스가 실행 중인 상태로 남아 있습니다. 수백 번의 테스트 실행 후 실행 시스템의 메모리가 부족해지고 원본 통합 문서의 편집이 잠깁니다.

  • Excel은 메모리에 남아 있습니다. 워크북을 닫고 전화하세요 xlApp.Quit그런 다음 시트, 통합 문서 및 응용 프로그램 개체를 순서대로 해제합니다. 응용 프로그램을 먼저 해제하면 활성 참조가 유지되어 프로세스가 계속 실행됩니다.
  • 실행 후에는 변경 사항이 사라집니다. DataTable.Value 실행 시간 데이터 테이블에만 기록합니다. DataTable.Export파일 시스템에 아무것도 도달하지 않습니다.
  • "해당 열이 존재하지 않습니다" 또는 잘못된 매개변수 오류가 발생합니다. 전달된 열 이름 DataTable.Value 헤더 셀과 후행 공백을 포함하여 정확히 일치해야 합니다. 사용 AddParameter 쓰기 전에 열을 생성해야 합니다.
  • 매 반복마다 동일한 값이 읽힙니다. SetCurrentRow 루프 내부에서 호출되지 않았기 때문에 행 포인터가 움직이지 않았습니다.
  • 한 줄 차이가 나는 행도 계산됩니다. GetRowCount 헤더 행은 제외됩니다. 헤더와 10개의 레코드가 있는 통합 문서는 11이 아닌 10을 반환합니다.
  • 경로 및 권한 오류. 하드코딩된 경로(예: ...) D:\Automation\Sales.xls 다른 시스템에서 오류가 발생할 수 있습니다. 환경 변수에서 경로를 구성하여 모든 에이전트에서 동일한 스크립트가 실행되도록 합니다.
  • 병합된 셀과 여러 개의 헤더 행. 가져오기 과정에서는 고유한 이름이 포함된 헤더 행이 하나만 필요합니다. 셀이 병합되면 매개변수 이름이 비어 있거나 중복됩니다.
  • 수출 시 공유 위반 사항입니다. 대상 파일을 Excel에서 열 수 없습니다. Export 실행 중입니다. 먼저 닫거나 타임스탬프가 포함된 파일 이름으로 내보내세요.

COM 정리 작업을 `command`로 감싸는 것이 유용한 습관입니다. On Error Resume Next 블록이 전용 복구 기능에 배치되어 있으므로 스크립트 실행 중 오류가 발생하면 Excel이 종료됩니다. Excel 데이터가 공식적인 방식으로 입력될 때 테스트 사례 저장소의 경우에도 결과에 동일한 원칙이 적용됩니다. 한 번 내보내고, 파일이 존재하는지 확인한 다음 실행에 첨부해야 합니다.

여기서 다룬 주제들을 더 자세히 살펴보려면 전체 내용을 살펴보세요. QTP/UFT 지도 시간 더 넓은 관점에서 결과를 도출하는 방법을 알아보세요. ALM에서 UFT기본 사항을 복습하세요 소프트웨어 테스팅그리고 이 접근 방식을 데이터 기반 스크립팅과 비교해 보겠습니다. Selenium.

자주 묻는 질문

UFT .xls, .xlsx 및 .csv 파일을 런타임 데이터 테이블로 가져옵니다. 내보내기는 항상 .xls 통합 문서를 생성하므로 하위 시스템에서 최신 .xlsx 형식을 요구하는 경우 변환기 또는 Excel COM 개체가 필요합니다.

설계 시점 테이블은 테스트와 함께 저장되며 변경되지 않습니다. 실행 시점 테이블은 실행이 시작될 때 생성되는 복사본입니다. 가져오기 및 값 할당은 실행 시점 테이블의 복사본에만 영향을 미치며, 이 복사본은 내보내기하지 않으면 폐기됩니다.

워크북 자체를 구문 분석하는 DataTable 객체의 경우에는 그렇지 않습니다. 하지만 CreateObject(“Excel.Application”)을 호출하는 모든 스크립트의 경우에는 그렇습니다. 이 방법은 실제 Excel 인스턴스를 자동화하므로 Excel이 없는 시스템에서는 즉시 오류가 발생합니다.

예. ImportSheet 함수는 시트별로 한 번씩 호출하고, 호출할 때마다 대상 시트 이름을 다르게 지정해야 합니다. 전역 데이터는 Global 시트에, 작업별 값은 해당 작업 시트에 배치하여 각 작업이 독립적으로 유지되도록 합니다.

네, 그리고 루프 구조는 대개 정확합니다. SetCurrentRow 함수가 루프 안에 있는지, 그리고 숫자 셀이 CInt 또는 CDbl 함수를 사용하여 제대로 변환되었는지 두 가지를 직접 확인해 보세요. 자동 생성된 코드는 이 두 가지를 모두 생략하는 경우가 많습니다.

현대의 AI 기능 UFT 이 릴리스에서는 컨트롤을 시각적으로 인식하므로 필드 이름이 변경되어도 데이터 세트의 모든 행이 깨지는 현상이 더 이상 발생하지 않습니다. 또한 AI는 추가 경계 행을 제안하여 수동 테스트 설계 없이도 스프레드시트 적용 범위를 넓힐 수 있습니다.

이 게시물을 요약하면 다음과 같습니다.