Aracılığıyla paylaş


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

  1. Yeni oluşturma Integration Services Proje Business Intelligence Development Studio ve düzenlemek için varsayılan paketin açın.

  2. 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.

  3. 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.

  4. Başvurular.Ek bir başvuru için komut projedeki kod örnekleri, Excel dosyalarını şema bilgileri okuma gerektiren System.Xml ad alanı.

  5. 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

  1. Yeni bir komut dosyası görev ekleme paket ve için ExcelFileExists adını değiştirebilirsiniz.

  2. 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.

  3. ' 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.

  4. ' I tıklatın Komut dosyası Düzenle komut dosyası Düzenleyicisi'ni açın.

  5. Ekleme bir Imports deyim için System.IO komut dosyasının en üstündeki ad alanı.

  6. 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

  1. Yeni bir komut dosyası görev ekleme paket ve için ExcelTableExists adını değiştirebilirsiniz.

  2. 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.

  3. ' 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.

  4. ' I tıklatın Komut dosyası Düzenle komut dosyası Düzenleyicisi'ni açın.

  5. Başvuru Ekle System.Xml komut dosyası proje derlemede.

  6. Add Imports raporlardan System.IO ve System.Data.OleDb komut dosyasının en üstündeki ad alanı.

  7. 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

  1. Yeni bir komut dosyası görev ekleme paket ve için GetExcelFiles adını değiştirebilirsiniz.

  2. 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.

  3. ' 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.

  4. ' I tıklatın Komut dosyası Düzenle komut dosyası Düzenleyicisi'ni açın.

  5. Ekleme bir Imports deyim için System.IO komut dosyasının en üstündeki ad alanı.

  6. 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

  1. Yeni bir komut dosyası görev ekleme paket ve için GetExcelTables adını değiştirebilirsiniz.

  2. 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.

  3. ' 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.

  4. ' I tıklatın Komut dosyası Düzenle komut dosyası Düzenleyicisi'ni açın.

  5. Başvuru Ekle System.Xml komut dosyası bir projeden ad alanı.

  6. Ekleme bir Imports deyim için System.Data.OleDb komut dosyasının en üstündeki ad alanı.

  7. 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

  1. Yeni bir komut dosyası görev pakete eklemek ve için DisplayResults adını değiştirin.

  2. 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.

  3. DisplayResults görev açmak Komut dosyası görev Düzenleyicisi.

  4. Ü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.

  5. ' I tıklatın Komut dosyası Düzenle komut dosyası Düzenleyicisi'ni açın.

  6. Add Imports raporlardan Microsoft.VisualBasic ve System.Windows.Forms komut dosyasının en üstündeki ad alanı.

  7. Aşağıdaki kodu ekleyin.

  8. 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;
        }
}
Integration Services icon (small) Tümleştirme Hizmetleri ile güncel kalın

Karşıdan yüklemeler, makaleleri, örnekler ve en son Microsoft video yanı sıra, seçili topluluğun çözümleri için ziyaret Integration Services sayfa MSDN veya TechNet:

Bu güncelleştirmelerin otomatik bildirim için kullanılabilir RSS akışlarına abone olmak sayfa.