Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
SSIS Integration Runtime v rámci Azure Data Factory
Integrační služby poskytují správce spojení Excel, zdrojový kód Excel a cílovou platformu Excel pro práci s daty uloženými v tabulkách ve formátu Microsoft Excel. Techniky popsané v tomto tématu využívají úlohu Script k získání informací o dostupných databázích Excel (soubory pracovních sešitů) a tabulkách (pracovní listy a pojmenované rozsahy).
Important
Podrobné informace o připojování k excelovým souborům a o omezeních a známých problémech při načítání dat z nebo do excelových souborů najdete v tématu Načtení dat z nebo do Excelu pomocí služby SSIS (Služby Integrace SQL Serveru).
Tip
Pokud chcete vytvořit úkol, který můžete znovu použít napříč více balíčky, zvažte použití kódu v tomto ukázkovém skriptu úlohy jako výchozího bodu pro vlastní úkol. Další informace naleznete v tématu Vývoj vlastníhoúloh .
Konfigurace balíčku pro testování vzorků
Můžete si nastavit jeden balíček pro testování všech vzorků v tomto tématu. Ukázky používají mnoho stejných proměnných balíčku a stejné třídy .NET Frameworku.
Pro konfiguraci balíčku pro použití s příklady v tomto tématu
Vytvořte nový projekt Integration Services v SQL Server Data Tools (SSDT) a otevřete výchozí balíček pro úpravy.
Proměnné. Otevřete okno Proměnné a definujte následující proměnné:
ExcelFile, typu String. Zadejte kompletní cestu a název souboru do existujícího Excel sešitu.ExcelTable, typu String. Zadejte název existujícího pracovního listu nebo pojmenovaného rozsahu do sešitu pojmenovaného v hodnotě proměnnéExcelFile. Tato hodnota je závislá na velikosti písmen.ExcelFileExists, typu Boolean.ExcelTableExists, typu Boolean.ExcelFolder, typu String. Zadejte kompletní cestu složky, která obsahuje alespoň jeden Excel sešit.ExcelFiles, typu Objekt.ExcelTables, typu Objekt.
Výpisy o dovozu. Většina ukázek kódu vyžaduje, abyste importovali jeden nebo oba následující jmenné prostory .NET Framework v horní části vašeho skriptového souboru:
System.IO, pro operace souborového systému.
System.Data.OleDb, pro otevření Excel souborů jako zdrojů dat.
Reference. Ukázky kódu, které čtou informace o schématu z Excel souborů, vyžadují další odkaz ve skriptovém projektu na jmenný prostor System.Xml.
Nastavte výchozí skriptovací jazyk pro komponentu Script pomocí možnosti Scripting language na stránce Obecné v dialogovém okně Options . Další informace najdete na stránce Obecné.
Příklad 1 Popis: Zkontrolujte, zda existuje Excel soubor
Tento příklad určuje, zda existuje soubor Excel workbook specifikovaný v proměnnéExcelFile, a poté nastaví Booleovu hodnotu ExcelFileExists proměnné na výsledek. Tuto Booleovskou hodnotu můžete použít pro větvení v pracovním toku balíčku.
Pro konfiguraci tohoto příkladu Script Task
Přidejte do balíčku nový skriptní úkol a změňte jeho název na ExcelFileExists.
V editoru úloh skriptů na záložce Script klikněte na ReadOnlyVariables a zadejte hodnotu vlastnosti pomocí jedné z následujících metod:
Napište ExcelFile.
nebo
Klikněte na tlačítko s elipse (...) vedle pole vlastností a v dialogovém okně Vybrat proměnné vyberte proměnnou ExcelFile .
Klikněte na ReadWriteVariables a zadejte hodnotu vlastnosti pomocí jedné z následujících metod:
Napište ExcelFileExists.
nebo
Klikněte na tlačítko s elipse (...) vedle pole vlastností a v dialogovém okně Výběr proměnných vyberte proměnnou ExcelFileExists .
Klikněte na Edit Script pro otevření editoru skriptu.
Přidejte příkaz Imports pro jmenný prostor System.IO nahoře ve skriptovém souboru.
Přidejte následující kód.
Příklad 1 Kód
Public Class ScriptMain
Public Sub Main()
Dim fileToTest As String
fileToTest = Dts.Variables("ExcelFile").Value.ToString
If File.Exists(fileToTest) Then
Dts.Variables("ExcelFileExists").Value = True
Else
Dts.Variables("ExcelFileExists").Value = False
End If
Dts.TaskResult = ScriptResults.Success
End Sub
End Class
public class ScriptMain
{
public void Main()
{
string fileToTest;
fileToTest = Dts.Variables["ExcelFile"].Value.ToString();
if (File.Exists(fileToTest))
{
Dts.Variables["ExcelFileExists"].Value = true;
}
else
{
Dts.Variables["ExcelFileExists"].Value = false;
}
Dts.TaskResult = (int)ScriptResults.Success;
}
}
Příklad 2 Popis: Zkontrolujte, zda existuje tabulka Excel
Tento příklad určuje, zda se v souboru Excel specifikovaného v proměnné nachází pracovní list nebo pojmenovaný rozsah v ExcelTable Excel souboru specifikovaném v proměnnéExcelFile, a poté nastaví Booleovskou hodnotu ExcelTableExists proměnné na výsledek. Tuto Booleovskou hodnotu můžete použít pro větvení v pracovním toku balíčku.
Pro konfiguraci tohoto příkladu Script Task
Přidejte do balíčku nový skriptový úkol a změňte jeho název na ExcelTableExists.
V editoru úloh skriptů na záložce Script klikněte na ReadOnlyVariables a zadejte hodnotu vlastnosti pomocí jedné z následujících metod:
Napište ExcelTable a ExcelFile oddělené čárkami.
nebo
Klikněte na tlačítko s tečkou (...) vedle pole vlastností a v dialogovém okně Výběr proměnných vyberte proměnné ExcelTable a ExcelFile .
Klikněte na ReadWriteVariables a zadejte hodnotu vlastnosti pomocí jedné z následujících metod:
Napište ExcelTableExists.
nebo
Klikněte na tlačítko s tečkou (...) vedle pole vlastností a v dialogovém okně Vybrat proměnné vyberte proměnnou ExcelTableExists .
Klikněte na Edit Script pro otevření editoru skriptu.
Přidejte odkaz na sestavení System.XML v projektu skriptu.
Přidejte příkazy Imports pro jmenné prostory System.IO a System.Data.OleDb do horní části skriptového souboru.
Přidejte následující kód.
Příklad 2 Kód
Public Class ScriptMain
Public Sub Main()
Dim fileToTest As String
Dim tableToTest As String
Dim connectionString As String
Dim excelConnection As OleDbConnection
Dim excelTables As DataTable
Dim excelTable As DataRow
Dim currentTable As String
fileToTest = Dts.Variables("ExcelFile").Value.ToString
tableToTest = Dts.Variables("ExcelTable").Value.ToString
Dts.Variables("ExcelTableExists").Value = False
If File.Exists(fileToTest) Then
connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & fileToTest & _
";Extended Properties=Excel 12.0"
excelConnection = New OleDbConnection(connectionString)
excelConnection.Open()
excelTables = excelConnection.GetSchema("Tables")
For Each excelTable In excelTables.Rows
currentTable = excelTable.Item("TABLE_NAME").ToString
If currentTable = tableToTest Then
Dts.Variables("ExcelTableExists").Value = True
End If
Next
End If
Dts.TaskResult = ScriptResults.Success
End Sub
End Class
public class ScriptMain
{
public void Main()
{
string fileToTest;
string tableToTest;
string connectionString;
OleDbConnection excelConnection;
DataTable excelTables;
string currentTable;
fileToTest = Dts.Variables["ExcelFile"].Value.ToString();
tableToTest = Dts.Variables["ExcelTable"].Value.ToString();
Dts.Variables["ExcelTableExists"].Value = false;
if (File.Exists(fileToTest))
{
connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=" + fileToTest + ";Extended Properties=Excel 12.0";
excelConnection = new OleDbConnection(connectionString);
excelConnection.Open();
excelTables = excelConnection.GetSchema("Tables");
foreach (DataRow excelTable in excelTables.Rows)
{
currentTable = excelTable["TABLE_NAME"].ToString();
if (currentTable == tableToTest)
{
Dts.Variables["ExcelTableExists"].Value = true;
}
}
}
Dts.TaskResult = (int)ScriptResults.Success;
}
}
Příklad 3 Popis: Získejte seznam Excel souborů ve složce
Tento příklad vyplní pole seznamem Excel souborů nalezených ve složce uvedené v hodnotě proměnné ExcelFolder a poté pole zkopíruje do proměnnéExcelFiles. Můžete použít Foreach from Variable enumerátor k iteraci souborů v poli.
Pro konfiguraci tohoto příkladu Script Task
Přidejte do balíčku novou skriptovou úlohu a změňte její název na GetExcelFiles.
Otevřete Editor úloh skriptu na záložce Script , klikněte na ReadOnlyVariables a zadejte hodnotu vlastnosti pomocí jedné z následujících metod:
Napište ExcelFolder
nebo
Klikněte na tlačítko s tečkou (...) vedle pole vlastností a v dialogovém okně Vybrat proměnné vyberte proměnnou ExcelFolder.
Klikněte na ReadWriteVariables a zadejte hodnotu vlastnosti pomocí jedné z následujících metod:
Napište ExcelFiles.
nebo
Klikněte na tlačítko s tečkou (...) vedle pole vlastností a v dialogovém okně Výběr proměnných vyberte proměnnou ExcelFiles.
Klikněte na Edit Script pro otevření editoru skriptu.
Přidejte příkaz Imports pro jmenný prostor System.IO nahoře ve skriptovém souboru.
Přidejte následující kód.
Příklad 3 Kód
Public Class ScriptMain
Public Sub Main()
Const FILE_PATTERN As String = "*.xlsx"
Dim excelFolder As String
Dim excelFiles As String()
excelFolder = Dts.Variables("ExcelFolder").Value.ToString
excelFiles = Directory.GetFiles(excelFolder, FILE_PATTERN)
Dts.Variables("ExcelFiles").Value = excelFiles
Dts.TaskResult = ScriptResults.Success
End Sub
End Class
public class ScriptMain
{
public void Main()
{
const string FILE_PATTERN = "*.xlsx";
string excelFolder;
string[] excelFiles;
excelFolder = Dts.Variables["ExcelFolder"].Value.ToString();
excelFiles = Directory.GetFiles(excelFolder, FILE_PATTERN);
Dts.Variables["ExcelFiles"].Value = excelFiles;
Dts.TaskResult = (int)ScriptResults.Success;
}
}
Alternativní řešení
Místo použití skriptové úlohy pro shromáždění seznamu Excel souborů do pole můžete také použít enumerátor ForEach File k iteraci všech Excel souborů ve složce. Pro více informací viz Procházet Excel soubory a tabulky pomocí kontejneru Foreach Loop.
Popis příkladu 4: Získejte seznam tabulek v Excel souboru
Tento příklad vyplní pole seznamem pracovních listů a pojmenovaných rozsahů nalezených v souboru Excel workbooku určeným hodnotou proměnné ExcelFile a poté pole zkopíruje do proměnnéExcelTables. Můžete použít Foreach z Variable Enumerator k iteraci přes tabulky v poli.
Note
Seznam tabulek v Excel pracovním sešitu zahrnuje jak pracovní listy (které mají příponu $), tak pojmenované rozsahy. Pokud musíte filtrovat seznam pouze na pracovní listy nebo pouze na pojmenované rozsahy, možná budete muset přidat další kód pro tento účel.
Pro konfiguraci tohoto příkladu Script Task
Přidejte do balíčku nový skriptový úkol a změňte jeho název na GetExcelTables.
Otevřete Editor úloh skriptu na záložce Script , klikněte na ReadOnlyVariables a zadejte hodnotu vlastnosti pomocí jedné z následujících metod:
Napište ExcelFile.
nebo
Klikněte na tlačítko s elipse (...) vedle pole vlastností a v dialogovém okně Vybrat proměnné vyberte proměnnou ExcelFile.
Klikněte na ReadWriteVariables a zadejte hodnotu vlastnosti pomocí jedné z následujících metod:
Napište ExcelTables.
nebo
Klikněte na tlačítko s elipse (...) vedle pole vlastností a v dialogovém okně Vybrat proměnné vyberte ExcelTablesvariable.
Klikněte na Edit Script pro otevření editoru skriptu.
Přidejte odkaz na jmenný prostor System.XML v projektu skriptu.
Přidejte příkaz Imports pro jmenný prostor System.Data.OleDb nahoře do souboru skriptu.
Přidejte následující kód.
Příklad 4 Kód
Public Class ScriptMain
Public Sub Main()
Dim excelFile As String
Dim connectionString As String
Dim excelConnection As OleDbConnection
Dim tablesInFile As DataTable
Dim tableCount As Integer = 0
Dim tableInFile As DataRow
Dim currentTable As String
Dim tableIndex As Integer = 0
Dim excelTables As String()
excelFile = Dts.Variables("ExcelFile").Value.ToString
connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & excelFile & _
";Extended Properties=Excel 12.0"
excelConnection = New OleDbConnection(connectionString)
excelConnection.Open()
tablesInFile = excelConnection.GetSchema("Tables")
tableCount = tablesInFile.Rows.Count
ReDim excelTables(tableCount - 1)
For Each tableInFile In tablesInFile.Rows
currentTable = tableInFile.Item("TABLE_NAME").ToString
excelTables(tableIndex) = currentTable
tableIndex += 1
Next
Dts.Variables("ExcelTables").Value = excelTables
Dts.TaskResult = ScriptResults.Success
End Sub
End Class
public class ScriptMain
{
public void Main()
{
string excelFile;
string connectionString;
OleDbConnection excelConnection;
DataTable tablesInFile;
int tableCount = 0;
string currentTable;
int tableIndex = 0;
string[] excelTables = new string[5];
excelFile = Dts.Variables["ExcelFile"].Value.ToString();
connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=" + excelFile + ";Extended Properties=Excel 12.0";
excelConnection = new OleDbConnection(connectionString);
excelConnection.Open();
tablesInFile = excelConnection.GetSchema("Tables");
tableCount = tablesInFile.Rows.Count;
foreach (DataRow tableInFile in tablesInFile.Rows)
{
currentTable = tableInFile["TABLE_NAME"].ToString();
excelTables[tableIndex] = currentTable;
tableIndex += 1;
}
Dts.Variables["ExcelTables"].Value = excelTables;
Dts.TaskResult = (int)ScriptResults.Success;
}
}
Alternativní řešení
Místo použití skriptové úlohy pro shromáždění seznamu Excel tabulek do pole můžete také použít ForEach ADO.NET Schema Rowset Enumerator k iteraci všech tabulek (tedy pracovních listů a pojmenovaných rozsahů) v souboru Excel workbooku. Pro více informací viz Procházet Excel soubory a tabulky pomocí kontejneru Foreach Loop.
Zobrazení výsledků vzorků
Pokud máte všechny příklady v tomto tématu nakonfigurované ve stejném balíčku, můžete všechny skriptové úlohy připojit k dalšímu skriptovému úkolu, který zobrazí výstup všech příkladů.
Pro konfiguraci skriptové úlohy pro zobrazení výstupu příkladů v tomto tématu
Přidejte do balíčku novou skriptovou úlohu a změňte její název na DisplayResults.
Spojte všechny čtyři ukázkové skriptové úlohy navzájem, aby každá úloha splstila po úspěšném dokončení předchozí, a čtvrtou ukázkovou úlohu připojte k úkolu DisplayResults .
Otevřete úkol DisplayResults v editoru skriptových úloh.
Na záložce Script klikněte na ReadOnlyVariables a použijte jednu z následujících metod k přidání všech sedmi proměnných uvedených v Configuring a Package to Test the Samples:
Zadejte název každé proměnné oddělený čárkami.
nebo
Klikněte na tlačítko s elipse (...) vedle pole vlastností a v dialogovém okně Výběr proměnných vyberte proměnné.
Klikněte na Edit Script pro otevření editoru skriptu.
Přidat příkazy Import pro Microsoft. VisualBasic a System.Windows. Jmenné prostory Forms jsou v horní části souboru skriptu.
Přidejte následující kód.
Spusť balíček a prohlédni výsledky zobrazené v okně zprávy.
Kód pro zobrazení výsledků
Public Class ScriptMain
Public Sub Main()
Const EOL As String = ControlChars.CrLf
Dim results As String
Dim filesInFolder As String()
Dim fileInFolder As String
Dim tablesInFile As String()
Dim tableInFile As String
results = _
"Final values of variables:" & EOL & _
"ExcelFile: " & Dts.Variables("ExcelFile").Value.ToString & EOL & _
"ExcelFileExists: " & Dts.Variables("ExcelFileExists").Value.ToString & EOL & _
"ExcelTable: " & Dts.Variables("ExcelTable").Value.ToString & EOL & _
"ExcelTableExists: " & Dts.Variables("ExcelTableExists").Value.ToString & EOL & _
"ExcelFolder: " & Dts.Variables("ExcelFolder").Value.ToString & EOL & _
EOL
results &= "Excel files in folder: " & EOL
filesInFolder = DirectCast(Dts.Variables("ExcelFiles").Value, String())
For Each fileInFolder In filesInFolder
results &= " " & fileInFolder & EOL
Next
results &= EOL
results &= "Excel tables in file: " & EOL
tablesInFile = DirectCast(Dts.Variables("ExcelTables").Value, String())
For Each tableInFile In tablesInFile
results &= " " & tableInFile & EOL
Next
MessageBox.Show(results, "Results", MessageBoxButtons.OK, MessageBoxIcon.Information)
Dts.TaskResult = ScriptResults.Success
End Sub
End Class
public class ScriptMain
{
public void Main()
{
const string EOL = "\r";
string results;
string[] filesInFolder;
//string fileInFolder;
string[] tablesInFile;
//string tableInFile;
results = "Final values of variables:" + EOL + "ExcelFile: " + Dts.Variables["ExcelFile"].Value.ToString() + EOL + "ExcelFileExists: " + Dts.Variables["ExcelFileExists"].Value.ToString() + EOL + "ExcelTable: " + Dts.Variables["ExcelTable"].Value.ToString() + EOL + "ExcelTableExists: " + Dts.Variables["ExcelTableExists"].Value.ToString() + EOL + "ExcelFolder: " + Dts.Variables["ExcelFolder"].Value.ToString() + EOL + EOL;
results += "Excel files in folder: " + EOL;
filesInFolder = (string[])(Dts.Variables["ExcelFiles"].Value);
foreach (string fileInFolder in filesInFolder)
{
results += " " + fileInFolder + EOL;
}
results += EOL;
results += "Excel tables in file: " + EOL;
tablesInFile = (string[])(Dts.Variables["ExcelTables"].Value);
foreach (string tableInFile in tablesInFile)
{
results += " " + tableInFile + EOL;
}
MessageBox.Show(results, "Results", MessageBoxButtons.OK, MessageBoxIcon.Information);
Dts.TaskResult = (int)ScriptResults.Success;
}
}