엑셀에서 데이터를 가져오고, 읽고, 변경하는 방법 QTP/UFT
⚡ 스마트 요약
엑셀에서 데이터 가져오기, 읽기 및 변경하기 QTP/UFT 이 기능은 내장된 DataTable 개체를 사용하는데, 이 개체는 통합 문서를 런타임 데이터 테이블로 로드하여 모든 자동화 스크립트가 스프레드시트 행에서 테스트 단계를 실행할 수 있도록 합니다.
테스터들이 입력값, 예상 결과, 환경 설정 등을 저장하는 데 가장 흔히 사용하는 도구가 여전히 스프레드시트입니다. QTP현재 판매 중 OpenText UFT 제품이 HP에서 마이크로 포커스로, 그리고 다시 HP로 옮겨진 후, OpenText이 코드는 DataTable 객체를 통해 스프레드시트를 읽습니다. 아래 섹션에서는 통합 문서를 가져오고, 행 수를 세고, 개별 셀을 읽고, 값을 변경하고, 시트를 디스크에 다시 저장하는 데 사용되는 정확한 구문을 보여줍니다.
EXCEL에서 데이터 가져오기, 읽기, 변경 단계
다음 항목들을 가져오고 싶다고 가정해 보세요. 판매.xls 워크북을 테스트에 포함하세요.
파일이 불러와지면 UFT맨 위 행이 열 머리글이 되므로 데이터를 그에 맞게 구성해야 합니다. 첫 번째 행에 있는 내용은 테스트 데이터가 아닌 매개변수 이름으로 처리되며, 나머지 행은 모두 데이터 행으로 간주됩니다.
엑셀 파일 전체를 가져오는 구문은 다음과 같습니다.
DataTable.Import(FileName)
우리 경우에는 해당 구문이 다음과 같이 됩니다. VBScript에서는 메서드를 호출할 때 괄호가 필요하지 않으므로 여기서는 일반 형식을 사용합니다.
DataTable.Import "D:\Automation\Sales.xls"
실행 후 가져온 행은 통합 문서에 배치된 그대로 런타임 데이터 창에 나타납니다.
다음은 특정 시트를 가져오는 구문입니다. SheetSource 워크북 안에 있는 시트인가요? SheetDest 실행 시간 데이터 테이블의 대상 시트입니다.
DataTable.ImportSheet FileName, SheetSource, SheetDest
사용 행 수 가져오기 시트의 데이터 행 수를 가져오는 메서드입니다. 각 문장은 반드시 한 줄에 작성해야 합니다.
DataTable.Import "D:\Automation\Sales.xls" row = DataTable.GetSheet(1).GetRowCount MsgBox row
나타나는 메시지 상자에는 가져온 시트의 행 합계가 표시됩니다.
포인터를 특정 행으로 이동하려면 다음을 사용하십시오. 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
두 값은 동일한 열의 서로 다른 행에서 읽어오며, 메시지 상자에는 두 값이 나란히 출력됩니다.
사용 가치관 할당문 왼쪽에 있는 메서드를 호출하면 가져온 시트의 데이터가 변경됩니다. 변경 사항은 해당 메서드를 호출할 때까지 메모리에 유지됩니다. 수출이 함수는 실행 시간 데이터 테이블을 엑셀 파일에 다시 기록합니다.
DataTable.SetCurrentRow 1 DataTable.Value("Year", 1) = 2026 DataTable.Export "D:\Automation\Sales_Updated.xls"
편집된 셀은 할당이 실행된 직후 런타임 데이터 창에 표시됩니다.
내보낸 통합 문서를 열어보면 수정된 값이 실행 시간 동안만 유지되는 것이 아니라 디스크에 저장되었음을 확인할 수 있습니다.
💡 팁: 가져온 파일 이름과 다른 파일 이름으로 내보내세요. 열려 있는 동일한 통합 문서에 다시 쓰는 것은 공유 위반 오류를 발생시켜 실행 결과를 잃는 가장 빠른 방법입니다.
엑셀 데이터 읽기, 변경 및 내보내기 방법: 완벽한 예제
위의 코드 조각들은 각각 하나의 방법을 보여줍니다. 실제 데이터 기반 테스트에서는 이 코드 조각들을 하나의 루프로 결합하여 모든 행을 순회하며, 어떤 계산을 수행하고, 결과를 저장한 후 시트를 내보냅니다. 워크북이 다음과 같다고 가정해 보겠습니다. 판매.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.







