Esecuzione di un ciclo su file e tabelle di Excel utilizzando un contenitore Ciclo ForeachLoop through Excel Files and Tables by Using a Foreach Loop Container

In questo argomento vengono illustrate le procedure per l'esecuzione di un ciclo sulle cartelle di lavoro di Excel archiviate in una directory oppure sulle tabelle incluse in una cartella di Excel mediante il contenitore Ciclo Foreach con l'enumeratore appropriato.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.

Per eseguire un ciclo su un gruppo di file di Excel mediante Foreach File EnumeratorTo loop through Excel files by using the Foreach File enumerator

  1. Creare una variabile stringa che riceverà il percorso e il nome del file di Excel correnti a ogni iterazione del ciclo.Create a string variable that will receive the current Excel path and file name on each iteration of the loop. Per evitare problemi di convalida, assegnare un percorso e un nome file di Excel validi come valore iniziale della variabile.To avoid validation issues, assign a valid Excel path and file name as the initial value of the variable. Nell'espressione di esempio indicata di seguito in questa procedura viene utilizzata una variabile denominata ExcelFile.(The sample expression shown later in this procedure uses the variable name, ExcelFile.)

  2. Facoltativamente, creare un'altra variabile stringa che conterrà il valore dell'argomento Proprietà estese della stringa di connessione a Excel.Optionally, create another string variable that will hold the value for the Extended Properties argument of the Excel connection string. Tale argomento contiene una serie di valori che specificano la versione di Excel e determinano se la prima riga contiene i nomi delle colonne, nonché se viene utilizzata la modalità di importazione.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. Nell'espressione di esempio riportata di seguito in questa procedura viene utilizzata una variabile denominata ExtProperties, con un valore iniziale "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".)

    Se non si utilizza una variabile per l'argomento Proprietà estese, è necessario aggiungerla manualmente all'espressione contenente la stringa di connessione.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. Aggiungere un contenitore Ciclo Foreach alla scheda Flusso di controllo .Add a Foreach Loop container to the Control Flow tab. Per informazioni su come configurare il contenitore Ciclo Foreach, vedere Configurare un contenitore Ciclo Foreach.For information about how to configure the Foreach Loop Container, see Configure a Foreach Loop Container.

  4. Nella pagina Raccolta dell' Editor ciclo Foreachselezionare l'enumeratore Foreach File, quindi specificare la directory in cui si trovano le cartelle di lavoro di Excel e il filtro file (in genere, con estensione 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. Nella pagina Mapping variabili eseguire il mapping dell'indice 0 a una variabile stringa definita dall'utente che riceverà il percorso e il nome del file di Excel corrente a ogni iterazione del ciclo.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. Nell'espressione di esempio indicata di seguito in questa procedura viene utilizzata una variabile denominata ExcelFile.(The sample expression shown later in this procedure uses the variable name ExcelFile.)

  6. Chiudere l' Editor ciclo Foreach.Close the Foreach Loop Editor.

  7. Aggiungere una gestione connessione Excel in un pacchetto, come descritto in Aggiungere, eliminare o condividere una gestione connessione in un pacchetto.Add an Excel connection manager to the package as described in Add, Delete, or Share a Connection Manager in a Package. Selezionare un file di una cartella di lavoro di Excel esistente per la connessione, per evitare errori di convalida.Select an existing Excel workbook file for the connection to avoid validation errors.

    Importante

    Per evitare errori di convalida durante la configurazione delle attività e dei componenti dei flussi di dati che usano questa gestione connessione Excel, selezionare una cartella di lavoro di Excel esistente nella finestra di dialogo Editor gestione connessione 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. Questa cartella di lavoro non verrà usata dalla gestione connessione in fase di esecuzione dopo aver configurato un'espressione per la proprietà ConnectionString , come descritto nella procedura seguente.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. Dopo aver creato e configurato il pacchetto, è possibile cancellare il valore della proprietà ConnectionString nella finestra Proprietà.After you create and configure the package, you can clear the value of the ConnectionString property in the Properties window. Se, tuttavia, si cancella questo valore, la proprietà relativa alla stringa di connessione della gestione connessione Excel non sarà più valida fino a quando non viene eseguito il ciclo Foreach.However, if you clear this value, the connection string property of the Excel connection manager is no longer valid until the Foreach Loop runs. Per evitare errori di convalida, è pertanto necessario impostare la proprietà DelayValidation su True nelle attività in cui viene usata la gestione connessione o nel pacchetto.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.

    È anche necessario usare il valore predefinito False per la proprietà RetainSameConnection della gestione connessione Excel.You must also use the default value of False for the RetainSameConnection property of the Excel connection manager. Se si modifica questo valore in True, ogni iterazione del ciclo continuerà ad aprire la prima cartella di lavoro di Excel.If you change this value to True, each iteration of the loop will continue to open the first Excel workbook.

  8. Selezionare la nuova gestione connessione Excel, fare clic sulla proprietà Espressioni nella finestra Proprietà e quindi fare clic sul pulsante con i puntini di sospensione (...).Select the new Excel connection manager, click the Expressions property in the Properties window, and then click the ellipsis.

  9. Nell' Editor espressioni di proprietàselezionare la proprietà ConnectionString e quindi fare clic sul pulsante con i puntini di sospensione (...).In the Property Expressions Editor, select the ConnectionString property, and then click the ellipsis.

  10. In Generatore di espressioni immettere l'espressione seguente:In the Expression Builder, enter the following expression:

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

    Si noti l'uso del carattere di escape "\" per le virgolette interne necessarie per racchiudere il valore dell'argomento Extended Properties.Note the use of the escape character "\" to escape the inner quotation marks required around the value of the Extended Properties argument.

    L'argomento Proprietà estese non è facoltativo.The Extended Properties argument is not optional. Se non si utilizza una variabile per contenere il relativo valore, è necessario aggiungerla manualmente all'espressione, come indicato nell'esempio seguente per un file di 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. Creare attività nel contenitore Ciclo Foreach mediante le quali viene utilizzata la gestione connessione Excel per eseguire le stesse operazioni in ogni cartella di lavoro di Excel corrispondente allo schema e al percorso di file specificati.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.

Per eseguire un ciclo su un gruppo di tabelle mediante Foreach ADO.NET Schema Rowset EnumeratorTo loop through Excel tables by using the Foreach ADO.NET Schema Rowset enumerator

  1. Creare una gestione connessione ADO.NET che utilizzi il provider OLE DB Microsoft Jet per connettersi a una cartella di lavoro di Excel.Create an ADO.NET connection manager that uses the Microsoft Jet OLE DB Provider to connect to an Excel workbook. Nella pagina Tutte della finestra di dialogo Gestione connessione assicurarsi di immettere Excel 8.0 come valore della proprietà Extended Properties.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. Per altre informazioni, vedere 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. Creare una variabile stringa che riceverà il nome della tabella corrente a ogni iterazione del ciclo.Create a string variable that will receive the name of the current table on each iteration of the loop.

  3. Aggiungere un contenitore Ciclo Foreach alla scheda Flusso di controllo .Add a Foreach Loop container to the Control Flow tab. Per informazioni su come configurare il contenitore Ciclo Foreach, vedere Configurare un contenitore Ciclo Foreach.For information about how to configure the Foreach Loop container, see Configure a Foreach Loop Container.

  4. Nella pagina Raccolta dell' Editor ciclo Foreachselezionare Enumeratore Foreach ADO.NET set di righe dello schema.On the Collection page of the Foreach Loop Editor, select the Foreach ADO.NET Schema Rowset enumerator.

  5. Selezionare la gestione connessione ADO.NET creata in precedenza come valore di Connessione.As the value of Connection, select the ADO.NET connection manager that you created previously.

  6. Selezionare Tabelle come valore di Schema.As the value of Schema, select Tables.

    Nota

    Nell'elenco di tabelle di una cartella di Excel sono inclusi sia i fogli di lavoro (con suffisso $) sia gli intervalli denominati.The list of tables in an Excel workbook includes both worksheets (which have the $ suffix) and named ranges. Se è necessario applicare un filtro all'elenco per individuare solo fogli di lavoro o solo intervalli denominati, potrebbe essere necessario scrivere appositamente codice personalizzato in un'attività Script.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. Per altre informazioni, vedere Uso di file di Excel con l'attività Script.For more information, see Working with Excel Files with the Script Task.

  7. Nella pagina Mapping variabili eseguire il mapping tra l'indice 2 e la variabile stringa creata in precedenza in modo che contenga il nome della tabella corrente.On the Variable Mappings page, map Index 2 to the string variable created earlier to hold the name of the current table.

  8. Chiudere l' Editor ciclo Foreach.Close the Foreach Loop Editor.

  9. Creare attività nel contenitore Ciclo Foreach che utilizzano la gestione connessione Excel per eseguire le stesse operazioni in ogni tabella di Excel inclusa nella cartella di lavoro specificata.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. Se per esaminare il nome della tabella enumerata o per lavorare con ogni tabella si usa un'attività Script, ricordarsi di aggiungere la variabile stringa alla proprietà ReadOnlyVariables dell'attività Script.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.

Vedere ancheSee Also

Configurazione di un contenitore ciclo Foreach Configure a Foreach Loop Container
Aggiungere o modificare un'espressione di proprietà Add or Change a Property Expression
Gestione connessione Excel Excel Connection Manager
Origine Excel Excel Source
Destinazione Excel Excel Destination
Utilizzo dei file di Excel con l'attività ScriptWorking with Excel Files with the Script Task