Foreach 루프 컨테이너를 사용하여 Excel 파일 및 테이블 루핑Loop through Excel Files and Tables by Using a Foreach Loop Container

이 항목의 절차에서는 적절한 열거자와 함께 Foreach 루프 컨테이너를 사용하여 폴더 내의 Excel 통합 문서 또는 Excel 통합 문서 내의 테이블을 루핑하는 방법에 대해 설명합니다.The procedures in this topic describe how to loop through the Excel workbooks in a folder, or through the tables in an Excel workbook, by using the Foreach Loop container with the appropriate enumerator.

Foreach File 열거자를 사용하여 Excel 파일을 루핑하려면To loop through Excel files by using the Foreach File enumerator

  1. 루프 반복마다 현재 Excel 경로와 파일 이름을 받을 문자열 변수를 만듭니다.Create a string variable that will receive the current Excel path and file name on each iteration of the loop. 유효성 검사 문제를 방지하려면 변수의 초기 값으로 유효한 Excel 경로 및 파일 이름을 할당하십시오.To avoid validation issues, assign a valid Excel path and file name as the initial value of the variable. 이 절차의 뒷부분에 나오는 예제 식에서는 변수 이름 ExcelFile을 사용합니다.(The sample expression shown later in this procedure uses the variable name, ExcelFile.)

  2. 필요에 따라 Excel 연결 문자열의 확장 속성 인수에 대한 값을 보유하는 다른 문자열 변수를 만듭니다.Optionally, create another string variable that will hold the value for the Extended Properties argument of the Excel connection string. 이 인수는 Excel 버전을 지정하고 첫 번째 행에 열 이름을 포함할지 여부와 가져오기 모드 사용 여부를 결정하는 일련의 값을 포함합니다.This argument contains a series of values that specify the Excel version and determine whether the first row contains column names, and whether import mode is used. 이 절차의 뒷부분에 나오는 예제 식에서는 초기 값 " ExtProperties"와 함께 변수 이름Excel 8.0;HDR=Yes를 사용합니다.(The sample expression shown later in this procedure uses the variable name ExtProperties, with an initial value of "Excel 8.0;HDR=Yes".)

    확장 속성 인수에 대한 변수를 사용하지 않으면 연결 문자열을 포함하는 식에 해당 변수를 수동으로 추가해야 합니다.If you do not use a variable for the Extended Properties argument, then you must add it manually to the expression that contains the connection string.

  3. 제어 흐름 탭에 Foreach 루프 컨테이너를 추가합니다.Add a Foreach Loop container to the Control Flow tab. Foreach 루프 컨테이너를 구성하는 방법에 대한 자세한 내용은 Foreach 루프 컨테이너 구성을 참조하세요.For information about how to configure the Foreach Loop Container, see Configure a Foreach Loop Container.

  4. Foreach 루프 편집기컬렉션페이지에서 Foreach File 열거자를 선택하고 Excel 통합 문서가 있는 폴더를 지정한 다음 파일 필터(일반적으로 .xls)를 지정합니다.On the **Collection* page of the Foreach Loop Editor, select the Foreach File enumerator, specify the folder in which the Excel workbooks are located, and specify the file filter (ordinarily *.xls).

  5. 변수 매핑 페이지에서 루프 반복마다 현재 Excel 경로 및 파일 이름을 받는 사용자 정의 문자열 변수에 인덱스 0을 매핑합니다.On the Variable Mapping page, map Index 0 to a user-defined string variable that will receive the current Excel path and file name on each iteration of the loop. 이 절차의 뒷부분에 나오는 샘플 식에서는 변수 이름 ExcelFile을 사용합니다.(The sample expression shown later in this procedure uses the variable name ExcelFile.)

  6. Foreach 루프 편집기를 닫습니다.Close the Foreach Loop Editor.

  7. 패키지에서 연결 관리자 추가, 삭제 또는 공유에 설명된 대로 패키지에 Excel 연결 관리자를 추가합니다.Add an Excel connection manager to the package as described in Add, Delete, or Share a Connection Manager in a Package. 연결에 기존 Excel 통합 문서 파일을 선택하면 유효성 검사 오류를 방지할 수 있습니다.Select an existing Excel workbook file for the connection to avoid validation errors.

    중요

    이 Excel 연결 관리자 관리자를 사용하는 태스크 및 데이터 흐름 구성 요소를 구성할 때 유효성 검사 오류가 발생하지 않도록 하려면 Excel 연결 관리자 편집기에서 기존 Excel 통합 문서를 선택합니다.To avoid validation errors as you configure tasks and data flow components that use this Excel connection manager, select an existing Excel workbook in the Excel Connection Manager Editor. 다음 단계에서 설명하는 대로 ConnectionString 속성에 대한 식을 구성하고 나면 연결 관리자는 런타임에 이 통합 문서를 사용하지 않습니다.The connection manager will not use this workbook at run time after you configure an expression for the ConnectionString property as described in the following steps. 패키지를 만들고 구성한 다음에는 속성 창에서 ConnectionString 속성 값을 지울 수 있습니다.After you create and configure the package, you can clear the value of the ConnectionString property in the Properties window. 그러나 이 값을 지우면 Foreach 루프가 실행될 때까지는 Excel 연결 관리자의 연결 문자열 속성이 유효하지 않게 됩니다.However, if you clear this value, the connection string property of the Excel connection manager is no longer valid until the Foreach Loop runs. 따라서 연결 관리자가 사용된 태스크나 패키지에서 DelayValidation 속성을 True 로 설정하여 유효성 검사 오류를 방지해야 합니다.Therefore you must set the DelayValidation property to True on the tasks in which the connection manager is used, or on the package, to avoid validation errors.

    또한 Excel 연결 관리자의 False 속성에 기본값 RetainSameConnection 를 사용해야 합니다.You must also use the default value of False for the RetainSameConnection property of the Excel connection manager. 이 값을 True로 변경하면 루프의 각 반복에서 계속해서 첫 번째 Excel 통합 문서를 엽니다.If you change this value to True, each iteration of the loop will continue to open the first Excel workbook.

  8. 새 Excel 연결 관리자를 선택하고 속성 창에서 Expressions 속성을 클릭한 다음 줄임표를 클릭합니다.Select the new Excel connection manager, click the Expressions property in the Properties window, and then click the ellipsis.

  9. 속성 식 편집기에서 ConnectionString 속성을 선택하고 줄임표를 클릭합니다.In the Property Expressions Editor, select the ConnectionString property, and then click the ellipsis.

  10. 식 작성기에서 다음 식을 입력합니다.In the Expression Builder, enter the following expression:

    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +  @[User::ExcelFile] + ";Extended Properties=\"" + @[User::ExtProperties] + "\""  
    

    확장 속성 인수의 값을 묶는 내부 따옴표를 닫는 데 이스케이프 문자 "\"가 사용되었다는 것에 유의하세요.Note the use of the escape character "\" to escape the inner quotation marks required around the value of the Extended Properties argument.

    확장 속성 인수는 필수입니다.The Extended Properties argument is not optional. 해당 값을 포함하는 변수를 사용하지 않으면 다음 Excel 2003 파일의 예처럼 식에 해당 변수를 수동으로 추가해야 합니다.If you do not use a variable to contain its value, then you must add it manually to the expression, as in the following example for an Excel 2003 file:

    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +  @[User::ExcelFile] + ";Extended Properties=Excel 8.0"  
    
  11. Excel 연결 관리자를 사용하는 Foreach 루프 컨테이너 내에 태스크를 만들어 지정된 파일 위치 및 패턴과 일치하는 각 Excel 통합 문서에 같은 작업을 수행합니다.Create tasks in the Foreach Loop container that use the Excel connection manager to perform the same operations on each Excel workbook that matches the specified file location and pattern.

Foreach ADO.NET 스키마 행 집합 열거자를 사용하여 Excel 테이블을 루핑하려면To loop through Excel tables by using the Foreach ADO.NET Schema Rowset enumerator

  1. Microsoft Jet OLE DB 공급자를 사용하는 ADO.NET 연결 관리자를 만들어 Excel 통합 문서에 연결합니다.Create an ADO.NET connection manager that uses the Microsoft Jet OLE DB Provider to connect to an Excel workbook. 연결 관리자 대화 상자의 모든 페이지에서 Extended Properties 속성의 값으로 Excel 8.0을 입력합니다.On the All page of the Connection Manager dialog box, make sure that you enter Excel 8.0 as the value of the Extended Properties property. 자세한 내용은 Add, Delete, or Share a Connection Manager in a Package을 참조하세요.For more information, see Add, Delete, or Share a Connection Manager in a Package.

  2. 루프 반복마다 현재 테이블의 이름을 받을 문자열 변수를 만듭니다.Create a string variable that will receive the name of the current table on each iteration of the loop.

  3. 제어 흐름 탭에 Foreach 루프 컨테이너를 추가합니다.Add a Foreach Loop container to the Control Flow tab. Foreach 루프 컨테이너를 구성하는 방법에 대한 자세한 내용은 Foreach 루프 컨테이너 구성을 참조하세요.For information about how to configure the Foreach Loop container, see Configure a Foreach Loop Container.

  4. Foreach 루프 편집기컬렉션페이지에서 Foreach ADO.NET 스키마 행 집합 열거자를 선택합니다.On the Collection page of the Foreach Loop Editor, select the Foreach ADO.NET Schema Rowset enumerator.

  5. 연결값으로 앞에서 만든 ADO.NET 연결 관리자를 선택합니다.As the value of Connection, select the ADO.NET connection manager that you created previously.

  6. 스키마값으로 테이블을 선택합니다.As the value of Schema, select Tables.

    참고

    Excel 통합 문서의 테이블 목록에는 워크시트($ 접미사를 가짐)와 명명된 범위가 모두 포함됩니다.The list of tables in an Excel workbook includes both worksheets (which have the $ suffix) and named ranges. 워크시트 또는 명명된 범위 목록만 필터링해야 하는 경우 스크립트 태스크에 이를 위한 사용자 지정 코드를 작성해야 합니다.If you have to filter the list for only worksheets or only named ranges, you may have to write custom code in a Script task for this purpose. 자세한 내용은 Working with Excel Files with the Script Task을 참조하세요.For more information, see Working with Excel Files with the Script Task.

  7. 변수 매핑 페이지에서 현재 테이블 이름을 포함하도록 앞에서 만든 문자열 변수에 인덱스 2를 매핑합니다.On the Variable Mappings page, map Index 2 to the string variable created earlier to hold the name of the current table.

  8. Foreach 루프 편집기를 닫습니다.Close the Foreach Loop Editor.

  9. Excel 연결 관리자를 사용하는 Foreach 루프 컨테이너 내에 태스크를 만들어 지정된 통합 문서의 각 Excel 테이블에 같은 작업을 수행합니다.Create tasks in the Foreach Loop container that use the Excel connection manager to perform the same operations on each Excel table in the specified workbook. 스크립트 태스크를 사용하여 열거된 테이블 이름을 검사하거나 각 테이블을 작업할 경우에는 스크립트 태스크의 ReadOnlyVariables 속성에 문자열 변수를 추가해야 합니다.If you use a Script Task to examine the enumerated table name or to work with each table, remember to add the string variable to the ReadOnlyVariables property of the Script task.

관련 항목:See Also

Foreach 루프 컨테이너 구성 Configure a Foreach Loop Container
속성 식 추가 또는 변경 Add or Change a Property Expression
Excel 연결 관리자 Excel Connection Manager
Excel 원본 Excel Source
Excel 대상 Excel Destination
스크립트 태스크와 Excel 파일 작업Working with Excel Files with the Script Task