Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure Data Factory'de SSIS Tümleştirme Çalışma Zamanı
Entegrasyon Hizmetleri, Microsoft Excel dosya formatında elektronik tablolarda depolanan verilerle çalışmak için Excel bağlantı yöneticisi, Excel kaynağı ve Excel hedefi sağlar. Bu konuda açıklanan teknikler, mevcut Excel veritabanları (çalışma defteri dosyaları) ve tablolar (çalışma sayfaları ve adlandırılmış aralıklar) hakkında bilgi edinmek için Script görevini kullanır.
Important
Excel dosyalarına bağlanma ve Excel dosyalarından veya Excel dosyalarına veri yüklemeyle ilgili sınırlamalar ve bilinen sorunlar hakkında ayrıntılı bilgi için bkz. SQL Server Integration Services (SSIS) ile Excel'den veya Excel'e veri yükleme.
Tip
Birden fazla paket arasında yeniden kullanabileceğiniz bir görev oluşturmak istiyorsanız, bu Script görev örneğindeki kodu özel bir görev için başlangıç noktası olarak kullanmayı düşünün. Daha fazla bilgi için bkz. Özel Görev geliştirme.
Örnekleri Test Etmek İçin Bir Paket Yapılandırması
Bu konudaki tüm örnekleri test etmek için tek bir paket yapılandırabilirsiniz. Örnekler, aynı paket değişkenlerinin çoğunu ve aynı .NET Framework sınıflarını kullanır.
Bu konudaki örneklerle kullanılacak bir paketi yapılandırmak
SQL Server Veri Araçları (SSDT) ile yeni bir Entegrasyon Hizmetleri projesi oluşturun ve düzenleme için varsayılan paketi açın.
Değişkenler. Değişkenler penceresini açın ve aşağıdaki değişkenleri tanımlayın:
ExcelFile, String türünde. Mevcut bir Excel çalışma kitabının tam yolunu ve dosya adını girin.ExcelTable, String türünde. Değişkenin değeriyleExcelFileadlandırılan çalışma defterine mevcut bir çalışma sayfasının veya adlandırılmış aralığın adını girin. Bu değer harf büyüklüğüne duyarlıdır.ExcelFileExists, Boolean türünde.ExcelTableExists, Boolean türünde.ExcelFolder, String türünde. En az bir Excel çalışma defteri içeren bir klasörün tam yolunu girin.ExcelFiles, Nesne türünde.ExcelTables, Nesne türünde.
Açıklamaları ithal eder. Kod örneklerinin çoğu, script dosyanızın üstündeki aşağıdaki .NET Framework isim alanlarından birini veya ikisini içe aktarmanızı gerektirir:
System.IO, dosya sistemi işlemleri için.
System.Data.OleDb ile Excel dosyalarını veri kaynağı olarak açmak için kullanılır.
Referanslar. Excel dosyalarından şema bilgisini okuyan kod örnekleri, script projesinde System.Xml isim alanına ek bir referans gerektirir.
Script bileşeni için varsayılan betik dilini Seçenekler diyalog kutusunun Genel sayfasındaki Scripting dili seçeneğini kullanarak ayarlayın. Daha fazla bilgi için bkz. Genel Sayfa.
Örnek 1 Açıklama: Bir Excel Dosyasının Var olup olmadığını Kontrol Edin
Bu örnek, değişkende ExcelFile belirtilen Excel çalışma defteri dosyasının var olup olmadığını belirler ve ardından değişkenin Boolean değerini ExcelFileExists sonuca ayarlar. Bu Boolean değerini paketin iş akışında dallanma için kullanabilirsiniz.
Bu Script Görevi örneğini yapılandırmak için
Pakete yeni bir Script görevi ekle ve adını ExcelFileExists olarak değiştir.
Script Görev Düzenleyici'de, Script sekmesinde ReadOnlyVariables'e tıklayın ve aşağıdaki yöntemlerden biriyle özellik değerini girin:
ExcelFile yazın.
-veya-
Özellik alanının yanındaki üç nokta (...) düğmesine tıklayın ve Değişkenleri Seç iletişim kutusunda ExcelFile değişkenini seçin.
ReadWriteVariables'e tıklayın ve özellik değerini aşağıdaki yöntemlerden biriyle girin:
ExcelFileExists yazın.
-veya-
Özellik alanının yanındaki üç nokta (...) düğmesine tıklayın ve Değişkenleri Seç iletişim kutusunda ExcelFileExists değişkenini seçin.
Script editörü açmak için Edit Script'e tıklayın.
Script dosyasının en üstüne System.IO isim alanı için bir Imports ifadesi ekleyin.
Aşağıdaki kodu ekleyin.
Örnek 1 Kod
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;
}
}
Örnek 2 Açıklama: Bir Excel Tablosu Var Olup olmadığını Kontrol Edin
Bu örnek, değişkende belirtilen Excel çalışma sayfası veya adlandırılmış aralığınınExcelTable, değişkende belirtilen Excel çalışma defteri dosyasında ExcelFile olup olmadığını belirler ve ardından değişkenin Boolean değerini ExcelTableExists sonuca ayarlar. Bu Boolean değerini paketin iş akışında dallanma için kullanabilirsiniz.
Bu Script Görevi örneğini yapılandırmak için
Pakete yeni bir Script görevi ekleyin ve adını ExcelTableExists olarak değiştirin.
Script Görev Düzenleyici'de, Script sekmesinde ReadOnlyVariables'e tıklayın ve aşağıdaki yöntemlerden biriyle özellik değerini girin:
ExcelTable ve ExcelFile seçeneklerini virgülle ayrılmış olarak yazın.
-veya-
Özellik alanının yanındaki üç nokta (...) düğmesine tıklayın ve Değişkenleri Seç iletişim kutusunda ExcelTable ve ExcelFile değişkenlerini seçin.
ReadWriteVariables'e tıklayın ve özellik değerini aşağıdaki yöntemlerden biriyle girin:
ExcelTableExists yazın.
-veya-
Özellik alanının yanındaki üç nokta (...) düğmesine tıklayın ve Değişkenleri Seç iletişim kutusunda ExcelTableExists değişkenini seçin.
Script editörü açmak için Edit Script'e tıklayın.
Script projesinde System.Xml assembly referansı ekleyin.
Script dosyasının üstüne System.IO ve System.Data.OleDb isim alanları için Imports ifadelerini ekleyin.
Aşağıdaki kodu ekleyin.
Örnek 2 Kod
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;
}
}
Örnek 3 Açıklama: Bir klasörde Excel dosyalarının listesini alın
Bu örnek, değişkenin değerinde ExcelFolder belirtilen klasörde bulunan Excel dosyalarının listesini bir diziyi doldurur ve ardından diziyi değişkene ExcelFiles kopyalar. Değişken sayıcısından Foreach ile dizinin içindeki dosyaları yineleme yapabilirsiniz.
Bu Script Görevi örneğini yapılandırmak için
Pakete yeni bir Script görevi ekleyin ve adını GetExcelFiles olarak değiştirin.
Script Görev DüzenleyicisiniScript sekmesinden açın, ReadOnlyVariables'e tıklayın ve aşağıdaki yöntemlerden biriyle özellik değerini girin:
ExcelFolder tipi
-veya-
Özellik alanının yanındaki üç nokta (...) butonuna tıklayın ve Değişkenleri Seç iletişim kutusunda ExcelFolder değişkenini seçin.
ReadWriteVariables'e tıklayın ve özellik değerini aşağıdaki yöntemlerden biriyle girin:
ExcelFiles yazın.
-veya-
Özellik alanının yanındaki üç nokta (...) düğmesine tıklayın ve Değişkenleri Seç iletişim kutusundan ExcelFiles değişkenini seçin.
Script editörü açmak için Edit Script'e tıklayın.
Script dosyasının en üstüne System.IO isim alanı için bir Imports ifadesi ekleyin.
Aşağıdaki kodu ekleyin.
Örnek 3 Kod
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;
}
}
Alternatif Çözüm
Bir Script görevi kullanarak Excel dosyalarının listesini bir diziye toplamak yerine, ForEach File enumerator'u kullanarak bir klasördeki tüm Excel dosyalarını yineleme yapabilirsiniz. Daha fazla bilgi için, Foreach Döngü Konteyneri Kullanarak Excel Dosyaları ve Tabloları Döngüsü ile Döngü Döngüsü sayfasına bakınız.
Örnek 4 Açıklama: Bir Excel dosyasında tablo listesini alın
Bu örnek, değişkenin değeriyle ExcelFile belirtilen Excel çalışma defteri dosyasında bulunan çalışma sayfaları ve adlandırılmış aralıklar listesiyle bir diziyi doldurur ve ardından diziyi değişkene ExcelTables kopyalar. Değişken Sayma Cihazı'ndan Foreach kullanarak dizinin tablolarını tekrar edebilirsin.
Note
Bir Excel çalışma defterindeki tablolar listesi hem çalışma sayfalarını (ki bunlar $ ekine sahip) hem de adlandırılmış aralıkları içerir. Eğer listeyi sadece çalışma sayfaları veya sadece adlandırılmış aralıklar için filtrelemek zorundaysanız, bu amaçla ek kod eklemeniz gerekebilir.
Bu Script Görevi örneğini yapılandırmak için
Pakete yeni bir Script görevi ekleyin ve adını GetExcelTables olarak değiştirin.
Script Görev DüzenleyicisiniScript sekmesinden açın, ReadOnlyVariables'e tıklayın ve aşağıdaki yöntemlerden biriyle özellik değerini girin:
ExcelFile yazın.
-veya-
Özellik alanının yanındaki üç nokta (...) düğmesine tıklayın ve Değişkenleri Seç iletişim kutusunda ExcelFile değişkenini seçin.
ReadWriteVariables'e tıklayın ve özellik değerini aşağıdaki yöntemlerden biriyle girin:
ExcelTables yazın.
-veya-
Özellik alanının yanındaki üç nokta (...) düğmesine tıklayın ve Değişkenleri Seç iletişim kutusunda ExcelTablesvariable'ı seçin.
Script editörü açmak için Edit Script'e tıklayın.
Script projesinde System.Xml isim alanına bir referans ekleyin.
Script dosyasının üstüne System.Data.OleDb isim alanı için bir Imports ifadesi ekleyin.
Aşağıdaki kodu ekleyin.
Örnek 4 Kod
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;
}
}
Alternatif Çözüm
Bir Script görevi kullanarak Excel tablolarının bir listesini bir diziye toplamak yerine, ForEach ADO.NET Schema Rowset Enumerator'u kullanarak Excel çalışma defteri dosyasındaki tüm tabloları (yani çalışma sayfalarını ve adlandırılmış aralıkları) tekrar edebilirsin. Daha fazla bilgi için, Foreach Döngü Konteyneri Kullanarak Excel Dosyaları ve Tabloları Döngüsü ile Döngü Döngüsü sayfasına bakınız.
Örneklerin Sonuçlarının Görüntülenmesi
Bu konudaki her örneği aynı pakette yapılandırdıysanız, tüm Script görevlerini tüm örneklerin çıktısını gösteren ek bir Script görevine bağlayabilirsiniz.
Bu konudaki örneklerin çıktısını gösterecek bir Script görevini yapılandırmak için
Pakete yeni bir Script görevi ekleyin ve adını DisplayResults olarak değiştirin.
Dört örnek Script görevini birbirine bağlayın, böylece her görev önceki görev başarıyla tamamlandıktan sonra çalıştırılır ve dördüncü örnek görevi DisplayResults görevine bağlayın.
Script Task Edit'teDisplayResults görevini açın.
Script sekmesinde, ReadOnlyVariables'e tıklayın ve Örnekleri Test etmek için Paket Yapılandırması bölümünde listelenen yedi değişkenin tamamını eklemek için aşağıdaki yöntemlerden birini kullanın:
Her değişkenin adını virgülle ayrılarak yazın.
-veya-
Özellik alanının yanındaki üç nokta (...) düğmesine tıklayın ve değişkenleri seç iletişim kutusunda değişkenleri seçin.
Script editörü açmak için Edit Script'e tıklayın.
Microsoft için İthalat açıklamalarını ekleyin. VisualBasic ve System.Windows. Form namespaces, script dosyasının en üstünde.
Aşağıdaki kodu ekleyin.
Paketi çalıştırın ve mesaj kutusunda gösterilen sonuçları inceleyin.
Sonuçları Göstermek İçin Kod
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;
}
}
İlgili içerik
- SQL Server Integration Services (SSIS) ile Verileri Excel'den içeri aktarma veya Excel'e aktarma
- Foreach Döngü Kapsayıcısı ile Excel Dosyaları ve Tablolarında Döngü Oluşturma