Aracılığıyla paylaş


Script görev ile Excel dosyalarıyla çalışma

Integration ServicesExcel Bağlantı Yöneticisi ve kaynak Excel elektronik tablolarında saklanan verilerle çalışmak için Excel hedef sağlar ve Microsoft Excel dosya biçimi.Bu konuda açıklanan teknikleri kullanılabilir (çalışma kitabı dosyalarını) Excel veritabanları ve tablolar (çalışma ve adlandırılmış aralıkları) hakkında bilgi edinmek için Script görev kullanın.Bu örnekler tarafından desteklenen diğer dosya tabanlı veri kaynakları ile çalışmak için kolayca değiştirilebilir Microsoft Jet ole db sağlayıcısı.

Bu örnekleri test etmek için bir paket yapılandırmak

Example1: Bir Excel dosya var olup olmadığını denetle

Örnek 2: Excel tablosu var olup olmadığını denetle

Örnek 3: Excel dosyalarını bir klasörde listesini almak

Örnek 4: Excel dosyasında tabloların listesini almak

Örnek sonuçlarını görüntüleme

Not

Bu kod görev örnek kodu özel bir görev için başlangıç noktası olarak kullanarak, birden çok paket arasında daha kolay yeniden kullanabileceğiniz bir görev oluşturmak istiyorsanız, düşünün.Daha fazla bilgi için bkz: Özel görev geliştirme.

Bu örnekleri test etmek için bir paket yapılandırmak

Bu konudaki tüm örnekleri test etmek için tek bir paket yapılandırabilirsiniz.Örnekleri aynı paket değişkenleri ve aynı çoğunu kullanır .NET Framework sınıfları.

Bu konudaki örnekleri ile kullanmak için bir paket yapılandırmak için

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

  2. Değişkenleri.Açık değişkenleri pencere ve aşağıdaki değişkenleri tanımlayabilirsiniz:

    • ExcelFile, of type String.Eksiksiz girin yol ve varolan bir Excel çalışma kitabı için dosya adı.

    • ExcelTable, of type String.Varolan bir çalışma sayfasının adını girin veya adlandırılmış aralık içinde çalışma kitabı değerindeki adlı ExcelFile değişkeni.Bu değer durum duyarlıdır.

    • ExcelFileExists, of type Boolean.

    • ExcelTableExists, of type Boolean.

    • ExcelFolder, of type String.Eksiksiz girin yol en az bir Excel çalışma kitabı içeren bir klasör.

    • ExcelFiles, of type Object.

    • ExcelTables, of type Object.

  3. İfadelerini alır.Çoğu, kod örnekleri, biri veya her ikisi de aşağıdaki alma gerektirir .NET Framework komut dosyanızı üstündeki ad:

    • System.IO, dosya sistemi işlemleri için.

    • System.Data.OleDb, veri kaynağı olarak Excel dosyalarını açmak için.

  4. Başvurular.Şema bilgileri Excel dosyalarından okuma kod örnekleri gerektiren ek bir komut dosyası proje başvurusunda System.Xml ad.

  5. komut dosyası kullanan kullanan kullanan dosyası bileşeni için varsayılan komut dosyası kullanan kullanan kullanan dosyası dilini kullanarak ayarlamak kodlama dilini üzerinde seçenek Genel sayfa seçenekleri iletişim kutusu.Daha fazla bilgi için bkz: Genel sayfası.

Örnek 1 Açıklama: Bir Excel dosya var olup olmadığını denetle

Bu örnekte, Excel çalışma kitabı dosyasının belirtilen olup olmadığını belirler ExcelFile değişken var ve ardından Boole değeri ayarlar ExcelFileExists değişken sonucu.Bu Boole değeri paket iş akışında dallanma için kullanabilirsiniz.

Bu kod görev örnek yapılandırmak için

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

  2. De Komut dosyası görev Düzenleyicisi, Script sekmesinde ReadOnlyVariables ve aşağıdaki yöntemlerden birini kullanarak özellik değeri girin:

    • Türü ExcelFile.

      - veya -

    • Üç nokta tıklatın () özellik alan ve de İleri düğmesini değişkenleri seçin iletişim kutusunda seçin ExcelFile değişkeni.

  3. ' I ReadWriteVariables ve aşağıdaki yöntemlerden birini kullanarak özellik değeri girin:

    • Türü ExcelFileExists.

      - veya -

    • Üç nokta tıklatın () özellik alan ve de İleri düğmesini değişkenleri seçin iletişim kutusunda seçin ExcelFileExists değişkeni.

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

  5. Ekleme bir Imports for deyim System.IO ad alanının üstündeki komut dosyası.

  6. Aşağıdaki kodu ekleyin.

Kod örneği 1

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: Excel tablosu var olup olmadığını denetle

Bu örnekte Excel çalışma sayfası veya adlandırılmış aralık belirtilen olup olmadığını belirler ExcelTable Excel çalışma kitabı dosyasında belirtilen değişken var ExcelFile , değişken ve ardından Boole değeri ayarlar ExcelTableExists değişken sonucu.Bu Boole değeri paket iş akışında dallanma için kullanabilirsiniz.

Bu kod görev örnek yapılandırmak için

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

  2. De Komut dosyası görev Düzenleyicisi, Script sekmesinde ReadOnlyVariables ve aşağıdaki yöntemlerden birini kullanarak özellik değeri girin:

    • Türü ExcelTable ve ExcelFile virgülle ayırarak.

      - veya -

    • Üç nokta tıklatın () özellik alan ve de İleri düğmesini değişkenleri seçin iletişim kutusunda seçin ExcelTable ve ExcelFile değişkenleri.

  3. ' I ReadWriteVariables ve aşağıdaki yöntemlerden birini kullanarak özellik değeri girin:

    • Türü ExcelTableExists.

      - veya -

    • Üç nokta tıklatın () özellik alan ve de İleri düğmesini değişkenleri seçin iletişim kutusunda seçin ExcelTableExists değişkeni.

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

  5. Başvuru Ekle System.Xml derleme komut dosyası projede.

  6. Ekleme Imports for ifadeleri System.IO ve System.Data.OleDb ad alanları üst tarafındaki komut dosyası.

  7. Aşağıdaki kodu ekleyin.

Kod örneği 2

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çıklama: Excel dosyalarını bir klasörde listesini almak

Bu örnek bir dizi değerindeki belirttiğiniz klasörde bulunan Excel dosyalarının listesi ile doldurur ExcelFolder değişkeni, sonra diziye kopyalayan ve ExcelFiles değişkeni.Dizideki dosyalar üzerinde yinelemek yapmak için Foreach değişken Numaralandırıcı gelen kullanabilirsiniz.

Bu kod görev örnek yapılandırmak için

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

  2. Açık Komut dosyası görev Düzenleyicisi, Script sekmesinde ReadOnlyVariables ve aşağıdaki yöntemlerden birini kullanarak özellik değeri girin:

    • Türü ExcelFolder

      - veya -

    • Üç nokta tıklatın () özellik alan ve de İleri düğmesini değişkenleri seçin iletişim kutusunda, ExcelFolder değişkeni seçin.

  3. ' I ReadWriteVariables ve aşağıdaki yöntemlerden birini kullanarak özellik değeri girin:

    • Türü Excel dosyaları.

      - veya -

    • Üç nokta tıklatın () özellik alan ve de İleri düğmesini değişkenleri seçin iletişim kutusunda, ExcelFiles değişkeni seçin.

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

  5. Ekleme bir Imports for deyim System.IO ad alanının üstündeki komut dosyası.

  6. Aşağıdaki kodu ekleyin.

Kod örneği 3

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 çözüm

Bir komut dosyası görevi bir diziye Excel dosyalarının listesini toplamak için kullanmak yerine, ForEach dosya numaralayıcı, tüm Excel dosyalarını bir klasörde üzerinden yinelemek yapmak için de kullanabilirsiniz.Daha fazla bilgi için bkz: Nasıl yapılır: Döngü Excel dosyaları ve Foreach döngü kabı kullanarak tablolar.

Örnek 4 Açıklama: Excel dosyasında tabloların listesini almak

Bu örnek, bir dizi çalışma sayfalarının listesini doldurur ve adlandırılmış aralıkları değeri tarafından belirtilen Excel çalışma kitabı dosyasında bulunan ExcelFile değişkeni, sonra diziye kopyalayan ve ExcelTables değişkeni.Dizideki tablolar üzerinden yinelemek yapmak için Foreach değişken Numaralandırıcı gelen kullanabilirsiniz.

Not

Bir Excel tablolarına çalışma kitabı adlandırılmış aralıkları ve ($ soneki olan) her iki çalışma sayfalarını içerir.Yalnızca çalışma sayfalarını veya adlandırılmış aralıkları yalnızca için listeye filtre varsa, bu amaç için ek kod eklemek zorunda kalabilirsiniz.

Bu kod görev örnek yapılandırmak için

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

  2. Açık Komut dosyası görev Düzenleyicisi, Script sekmesinde ReadOnlyVariables ve aşağıdaki yöntemlerden birini kullanarak özellik değeri girin:

    • Türü ExcelFile.

      - veya -

    • Üç nokta tıklatın () özellik alan ve de İleri düğmesini değişkenleri seçin iletişim kutusunda, ExcelFile değişkeni seçin.

  3. ' I ReadWriteVariables ve aşağıdaki yöntemlerden birini kullanarak özellik değeri girin:

    • Türü ExcelTables.

      - veya -

    • Üç nokta tıklatın () özellik alan ve de İleri düğmesini değişkenleri seçin iletişim kutusunda, ExcelTables seçindeğişkeni.

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

  5. Başvuru Ekle System.Xml ad alanında komut dosyası proje.

  6. Ekleme bir Imports for deyim System.Data.OleDb ad alanının üstündeki komut dosyası.

  7. Aşağıdaki kodu ekleyin.

Kod örneği 4

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 çözüm

Bir komut dosyası görevi bir diziye Excel tablolar listesini toplamak için kullanmak yerine, ForEach ado de kullanabilirsiniz.net şeması satır kümesi numaralayıcı için yinelemek tüm tablolarda (diğer bir deyişle, çalışma sayfaları ve adlandırılmış aralıkları) bir Excel çalışma kitabı dosyasının üzerine.Daha fazla bilgi için bkz: Nasıl yapılır: Döngü Excel dosyaları ve Foreach döngü kabı kullanarak tablolar.

Örnek sonuçlarını görüntüleme

Bu konuda aynı her örnekler yapılandırdıysanız, paket, tüm örnekler çıktısını görüntüler ek bir komut dosyası görev için komut dosyası görevleri bağlayabilirsiniz.

Bu konudaki örneklerde çıkışını görüntülemek için bir kod görev yapılandırmak için

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

  2. Böylece önceki görevi başarıyla tamamlandıktan sonra her görevin çalıştırdığı her dört örnek komut dosyası görevleri bir başkasına, bağlayın ve dördüncü örnek görev DisplayResults görev bağlanın.

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

  4. Üzerinde Script sekmesinde ReadOnlyVariables ve listelenen tüm yedi değişkenleri eklemek için aşağıdaki yöntemlerden birini kullanın Yapılandırma örnekleri test etmek için bir paket:

    • Noktalı virgüllerle ayrılan her değişkenin adını yazın.

      - veya -

    • Üç nokta tıklatın () özellik alan ve de İleri düğmesini değişkenleri seçin iletişim kutusu, değişkenleri seçme.

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

  6. Ekleme Imports for ifadeleri Microsoft.VisualBasic ve System.Windows.Forms ad alanları üst tarafındaki komut dosyası.

  7. Aşağıdaki kodu ekleyin.

  8. paket çalıştırın ve bir ileti kutusunda görüntülenen sonuçlar 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 simgesi (küçük)Integration Services ile güncel kalın

En son karşıdan yüklemeler, makaleler, örnekler ve seçilen topluluk çözümleri yanı sıra Microsoft videolar için ziyaret Integration Services sayfa msdn veya TechNet:

Bu güncelleştirmelerle ilgili otomatik bildirim almak için, sayfadaki RSS akışlarına abone olun.