Komut dosyası göreve Excel dosyaları ile çalışma
Integration Services Excel, Bağlantı Yöneticisi, Excel kaynak ve elektronik tablolarında saklanan verilerle çalışmak için Excel hedef sağlar Microsoft Dosya biçimi olarak excel. Bu konuda açıklanan teknikleri, kod görev (çalışma kitabı dosyalarını) kullanılabilir Excel veritabanlarının ve tabloların (çalışma sayfaları ve adlandırılmış aralıkları) hakkında bilgi almak için kullanın.Bu örnek tarafından desteklenen diğer dosya tabanlı veri kaynakları ile çalışacak şekilde kolayca değiştirilebilir Microsoft Jet OLE DB sağlayıcı.
Bir paket örnekleri sınama için yapılandırma
Example1: Bir Excel dosyası, içerip var denetleyin.
Örnek 2: Bir Excel tablosu, içerip var denetleyin.
Örnek 3: Excel dosyaları'nın bir klasör listesini Al
Örnek 4: ' De bir Excel dosyasını tablolar listesini Al
Örnekleri sonuçlarını görüntüleme
Not
Birden çok paket arasında daha kolay yeniden kullanabileceğiniz bir görev oluşturmak isterseniz, bu komut görevin örnek kodu özel bir görev için başlangıç noktası olarak kullanarak göz önünde bulundurun.Daha fazla bilgi için bkz: Özel görev geliştirme.
Bir paket örnekleri sınama için yapılandırma
Bu konudaki tüm örneklerini sınamak için tek bir paket yapılandırabilirsiniz.Örneklerde aynı paket değişkenleri ve aynı kullanın. .NET Framework sınıflar.
Bu konudaki örneklerde ile kullanmak için bir paket yapılandırmak için
Yeni oluşturma Integration Services Proje Business Intelligence Development Studio ve düzenlemek için varsayılan paketin açın.
değişkenler.Açık değişkenler penceresi ve aşağıdaki değişkenleri tanımlayabilirsiniz:
ExcelFile, türü String. Tam girin yol ve varolan bir Excel çalışma kitabı için dosya adı.
ExcelTable, türü String. Varolan bir çalışma sayfasının adını girin ya da aralık değeri adlı çalışma kitabındaki adlandırılmış ExcelFile değişken. Bu değer büyük/küçük durum duyarlıdır.
ExcelFileExists, türü Boolean.
ExcelTableExists, türü Boolean.
ExcelFolder, türü String. En az bir Excel çalışma kitabı içeren klasörün tam yolunu girin.
ExcelFiles, türü Object.
ExcelTables, türü Object.
Alır ve deyimleri.Çoğu kod örnekleri, aşağıdakilerden birini veya her ikisini birden almanızı gerektirir. .NET Framework komut dosyanızı üstündeki ad:
System.IO, dosya sistemi işlemleri için.
System.Data.OleDb, Excel dosyalarını farklı veri kaynakları'nı açın.
Başvurular.Ek bir başvuru için komut projedeki kod örnekleri, Excel dosyalarını şema bilgileri okuma gerektiren System.Xml ad alanı.
komut dosyası kullanan kullanan dosyası kullanan bileşeni için varsayılan komut dosyası kullanan kullanan dosyası kullanan dilini ayarlanýr komut dosyası kullanan kullanan dosyası kullanan dili seçeneğiGenel sayfaSeçenekler iletişim kutusu.Daha fazla bilgi için bkz: Genel sayfa.
Örnek 1 açıklaması: Bir Excel dosyası, içerip var denetleyin.
Bu örnekte, Excel çalışma kitabı dosyasının belirtilen olup olmadığını belirleyen ExcelFile değişken var ve sonra da Boole değerini ayarlar ExcelFileExists sonucun deðiþken. Bu Boole değeri, paket akışında dallanma için kullanabilirsiniz.
Bu komut dosyası görev örnek yapılandırmak için
Yeni bir komut dosyası görev ekleme paket ve için ExcelFileExists adını değiştirebilirsiniz.
Içinde Komut dosyası görev Düzenleyicisi, on the SCRIPT sekmesinde, tıklatın.ReadOnlyVariables ve aşağıdaki yöntemlerden birini kullanarak özellik değerini girin:
TYPE ExcelFile.
-ya da-
Üç nokta ('ı tıklatın.…) ve özellik alan yanındaki düğmesiniDeğişkenleri seçin. iletişim kutusunda, seçin.ExcelFile deðiþken.
' I tıklatın ReadWriteVariables ve aşağıdaki yöntemlerden birini kullanarak özellik değerini girin:
TYPE ExcelFileExists.
-ya da-
Üç nokta ('ı tıklatın.…) ve özellik alan yanındaki düğmesiniDeğişkenleri seçin. iletişim kutusunda, seçin.ExcelFileExists deðiþken.
' I tıklatın Komut dosyası Düzenle komut dosyası Düzenleyicisi'ni açın.
Ekleme bir Imports deyim için System.IO komut dosyasının en üstündeki ad alanı.
Aşağıdaki kodu ekleyin.
Örnek 1 kodu
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çıklaması: Bir Excel tablosu, içerip var denetleyin.
Bu örnek bir Excel çalışma sayfası veya adlandırılmış aralık içinde belirtilen olup olmadığını belirleyen ExcelTable Excel çalışma kitabı dosyasında belirtilen değişken var ExcelFile değişken ve sonra da Boole değerini ayarlar ExcelTableExists sonucun deðiþken. Bu Boole değeri, paket akışında dallanma için kullanabilirsiniz.
Bu komut dosyası görev örnek yapılandırmak için
Yeni bir komut dosyası görev ekleme paket ve için ExcelTableExists adını değiştirebilirsiniz.
Içinde Komut dosyası görev Düzenleyicisi, on the SCRIPT sekmesinde, tıklatın.ReadOnlyVariables ve aşağıdaki yöntemlerden birini kullanarak özellik değerini girin:
TYPE ExcelTable and ExcelFile virgül ile ayrılmış.
-ya da-
Üç nokta ('ı tıklatın.…) ve özellik alan yanındaki düğmesiniDeğişkenleri seçin. iletişim kutusunda, seçin.ExcelTable and ExcelFile değişkenleri.
' I tıklatın ReadWriteVariables ve aşağıdaki yöntemlerden birini kullanarak özellik değerini girin:
TYPE ExcelTableExists.
-ya da-
Üç nokta ('ı tıklatın.…) ve özellik alan yanındaki düğmesiniDeğişkenleri seçin. iletişim kutusunda, seçin.ExcelTableExists deðiþken.
' I tıklatın Komut dosyası Düzenle komut dosyası Düzenleyicisi'ni açın.
Başvuru Ekle System.Xml komut dosyası proje derlemede.
Add Imports raporlardan System.IO ve System.Data.OleDb komut dosyasının en üstündeki ad alanı.
Aşağıdaki kodu ekleyin.
Örnek 2 kodu
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.Jet.OLEDB.4.0;" & _
"Data Source=" & fileToTest & _
";Extended Properties=Excel 8.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.Jet.OLEDB.4.0;" +
"Data Source=" + fileToTest + ";Extended Properties=Excel 8.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çıklaması: Excel dosyaları'nın bir klasör listesini Al
Bu örnekte, dizi değerindeki belirtilen klasörde bulunan bir Excel dosyalarını listesiyle doldurur ExcelFolder değişken ve sonra da dizi içine kopyalar ExcelFiles değişken. Değişken numaralayıcı gelen Foreach, dizideki dosyalar üzerinde yinelemek yapmak için kullanabilirsiniz.
Bu komut dosyası görev örnek yapılandırmak için
Yeni bir komut dosyası görev ekleme paket ve için GetExcelFiles adını değiştirebilirsiniz.
Açık Komut dosyası görev Düzenleyicisi, on the SCRIPT sekmesinde, tıklatın.ReadOnlyVariables ve aşağıdaki yöntemlerden birini kullanarak özellik değerini girin:
TYPE ExcelFolder
-ya da-
Üç nokta ('ı tıklatın.…) ve özellik alan yanındaki düğmesiniDeğişkenleri seçin. iletişim kutusunda, ExcelFolder değişkeni seçin.
' I tıklatın ReadWriteVariables ve aşağıdaki yöntemlerden birini kullanarak özellik değerini girin:
TYPE ExcelFiles.
-ya da-
Üç nokta ('ı tıklatın.…) ve özellik alan yanındaki düğmesiniDeğişkenleri seçin. iletişim kutusunda, ExcelFiles değişkeni seçin.
' I tıklatın Komut dosyası Düzenle komut dosyası Düzenleyicisi'ni açın.
Ekleme bir Imports deyim için System.IO komut dosyasının en üstündeki ad alanı.
Aşağıdaki kodu ekleyin.
Örnek 3 kodu
Public Class ScriptMain
Public Sub Main()
Const FILE_PATTERN As String = "*.xls"
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 = "*.xls";
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 bir çözüm
Bir dizi içine Excel dosyaların listesini toplamak için bir kod görev kullanmak yerine, ForEach dosya numaralayıcı üzerinde tüm Excel dosyalarını klasör içinde yinelemek yapmak için de kullanılabilir.Daha fazla bilgi için bkz: Nasıl Yapılır: Döngü Excel arasında dosya ve bir Foreach döngü kapsayıcı'ı kullanarak tabloları.
Örnek 4 açıklaması: ' De bir Excel dosyasını tablolar listesini Al
Bu örnek, bir dizi çalışma listesiyle doldurur ve adlandırılan aralıkları değeri tarafından belirtilen Excel çalışma kitabı dosyasında bulunan ExcelFile değişken ve sonra da dizi içine kopyalar ExcelTables değişken. Değişken sayacı gelen Foreach, dizinin tabloda üzerinden yinelemek yapmak için kullanabilirsiniz.
Not
Bir Excel tablolarına çalışma kitabı Adlandırılmış aralıkları ve her iki çalışma sayfaları ($) sonekini olan)'nı içerir.Çalışma sayfaları veya yalnızca adlandırılmış aralıkları için listeye filtre varsa, bu amaçla ek kod eklemek zorunda kalabilirsiniz.
Bu komut dosyası görev örnek yapılandırmak için
Yeni bir komut dosyası görev ekleme paket ve için GetExcelTables adını değiştirebilirsiniz.
Açık Komut dosyası görev Düzenleyicisi, on the SCRIPT sekmesinde, tıklatın.ReadOnlyVariables ve aşağıdaki yöntemlerden birini kullanarak özellik değerini girin:
TYPE ExcelFile.
-ya da-
Üç nokta ('ı tıklatın.…) ve özellik alan yanındaki düğmesiniDeğişkenleri seçin. iletişim kutusunda, ExcelFile değişkeni seçin.
' I tıklatın ReadWriteVariables ve aşağıdaki yöntemlerden birini kullanarak özellik değerini girin:
TYPE ExcelTables.
-ya da-
Üç nokta ('ı tıklatın.…) ve özellik alan yanındaki düğmesiniDeğişkenleri seçin. iletişim kutusunda, ExcelTables seçin.değişken.
' I tıklatın Komut dosyası Düzenle komut dosyası Düzenleyicisi'ni açın.
Başvuru Ekle System.Xml komut dosyası bir projeden ad alanı.
Ekleme bir Imports deyim için System.Data.OleDb komut dosyasının en üstündeki ad alanı.
Aşağıdaki kodu ekleyin.
Örnek 4 kodu
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.Jet.OLEDB.4.0;" & _
"Data Source=" & excelFile & _
";Extended Properties=Excel 8.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.Jet.OLEDB.4.0;" +
"Data Source=" + excelFile + ";Extended Properties=Excel 8.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 bir çözüm
Bir diziye Excel tablolarını listesini toplamak için bir kod görev kullanmak yerine, ForEach ADO.NET Schema satır kümesi numaralayıcı üzerinde tüm tabloları (yani, çalışma sayfaları ve adlandırılmış aralıkları) bir Excel çalışma kitabı dosyasında yinelemek yapmak için de kullanılabilir.Daha fazla bilgi için bkz: Nasıl Yapılır: Döngü Excel arasında dosya ve bir Foreach döngü kapsayıcı'ı kullanarak tabloları.
Örnekleri sonuçlarını görüntüleme
Bu konu aynı örneklerin her yapılandırdınız, paket, tüm örnekler çıkışını gösteren ek bir komut dosyası görevine tüm komut dosyası görevleri bağlanabilirler.
Bu konudaki örneklerde çıkışını görüntülemek için komut dosyası göreve yapılandırmak için
Yeni bir komut dosyası görev pakete eklemek ve için DisplayResults adını değiştirin.
Başarılı bir şekilde, önceki görev tamamlandıktan sonra her görev çalışır, dört örnek komut dosyası görevlerin her birini bir başkasına, bağlanın ve dördüncü örnek görev DisplayResults göreve bağlayın.
DisplayResults görev açmak Komut dosyası görev Düzenleyicisi.
Üzerinde SCRIPT sekmesinde, tıklatın.ReadOnlyVariables ve listelenen tüm değişkenleri yedi eklemek için aşağıdaki yöntemlerden birini kullanınBir paket örnekleri sınama için yapılandırma:
Noktalı virgüllerle ayrılan her değişkenin adını yazın.
-ya da-
Üç nokta ('ı tıklatın.…) ve özellik alan yanındaki düğmesiniDeğişkenleri seçin. değişkenleri seçme iletişim kutusu.
' I tıklatın Komut dosyası Düzenle komut dosyası Düzenleyicisi'ni açın.
Add Imports raporlardan Microsoft.VisualBasic ve System.Windows.Forms komut dosyasının en üstündeki ad alanı.
Aşağıdaki kodu ekleyin.
paket çalıştırmak ve sonuçlar bir ileti kutusu içinde görüntülenen inceleyin.
sonuçlar görüntülemek iç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;
}
}
|