Automatisieren von Excel mithilfe von Visual C# zum Ausfüllen oder Abrufen von Daten in einem Bereich mithilfe von Arrays

Zusammenfassung

In diesem Artikel wird veranschaulicht, wie Sie Microsoft Excel mithilfe von Microsoft Visual C# 2005 oder Microsoft Visual C# .NET automatisieren, um Werte in einem Mehrzellenbereich mithilfe von Arrays auszufüllen und abzurufen.

Weitere Informationen

Wenn Sie einen Mehrzellenbereich ausfüllen möchten, ohne Zellen einzeln zu füllen, können Sie die Value-Eigenschaft eines Range-Objekts auf ein zweidimensionales Array festlegen. Ebenso können Sie mithilfe der Value-Eigenschaft ein zweidimensionales Array von Werten für mehrere Zellen gleichzeitig abrufen. Die folgenden Schritte veranschaulichen diesen Prozess für das Festlegen und Abrufen von Daten mithilfe von zweidimensionalen Arrays.

Erstellen des Automatisierungsclients für Microsoft Excel

  1. Starten Sie Microsoft Visual Studio 2005 oder Microsoft Visual Studio .NET.

  2. Klicken Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt. Wählen Sie "Windows-Anwendung" aus den Visual C#-Projekttypen aus. Form1 wird standardmäßig erstellt.

  3. Fügen Sie einen Verweis auf die Microsoft Excel 11.0-Objektbibliothek in Visual Studio 2005 oder die Microsoft Excel-Objektbibliothek in Visual Studio .NET hinzu. Gehen Sie dazu wie folgt vor:

    1. On the Project menu, click Add Reference.
    2. Suchen Sie auf der Registerkarte COM nach der Microsoft Excel-Objektbibliothek, und klicken Sie dann auf "Auswählen".

    Suchen Sie in Visual Studio 2005 auf der Registerkarte COM nach der Microsoft Excel 11.0-Objektbibliothek.

    Hinweis Microsoft Office 2003 enthält primäre Interopassemblys (PRIMARY Interop Assemblies, PIAs). Microsoft Office XP enthält keine PIAs, sie können jedoch heruntergeladen werden.

  4. Klicken Sie im Dialogfeld "Verweise hinzufügen" auf "OK", um Ihre Auswahl zu übernehmen. Wenn Sie aufgefordert werden, Wrapper für die ausgewählten Bibliotheken zu generieren, klicken Sie auf "Ja".

  5. Wählen Sie im Menü "Ansicht" die Option "Toolbox" aus, um die Toolbox anzuzeigen. Fügen Sie formular1 zwei Schaltflächen und ein Kontrollkästchen hinzu.

  6. Legen Sie die Eigenschaften "Name" und "Text" für das Kontrollkästchen auf "FillWithStrings" fest.

  7. Doppelklicken Sie auf Schaltfläche1. Das Codefenster für das Formular wird angezeigt.

  8. Ersetzen Sie im Codefenster den folgenden Code:

    private void button1_Click(object sender, System.EventArgs e)
    {
    }
    

    mit:

       //Declare these two variables globally so you can access them from both
       //Button1 and Button2.
       Excel.Application objApp;
       Excel._Workbook objBook;
    
    private void button1_Click(object sender, System.EventArgs e)
       {
          Excel.Workbooks objBooks;
          Excel.Sheets objSheets;
          Excel._Worksheet objSheet;
          Excel.Range range;
    
    try
          {
             // Instantiate Excel and start a new workbook.
             objApp = new Excel.Application();
             objBooks = objApp.Workbooks;
             objBook = objBooks.Add( Missing.Value );
             objSheets = objBook.Worksheets;
             objSheet = (Excel._Worksheet)objSheets.get_Item(1);
    
    //Get the range where the starting cell has the address
             //m_sStartingCell and its dimensions are m_iNumRows x m_iNumCols.
             range = objSheet.get_Range("A1", Missing.Value);
             range = range.get_Resize(5, 5);
    
    if (this.FillWithStrings.Checked == false)
             {
                //Create an array.
                double[,] saRet = new double[5, 5];
    
    //Fill the array.
                for (long iRow = 0; iRow < 5; iRow++)
                {
                   for (long iCol = 0; iCol < 5; iCol++)
                   {
                      //Put a counter in the cell.
                      saRet[iRow, iCol] = iRow * iCol;
                   }
                }
    
    //Set the range value to the array.
                range.set_Value(Missing.Value, saRet );
             }
    
    else
             {
                //Create an array.
                string[,] saRet = new string[5, 5];
    
    //Fill the array.
                for (long iRow = 0; iRow < 5; iRow++)
                {
                   for (long iCol = 0; iCol < 5; iCol++)
                   {
                      //Put the row and column address in the cell.
                      saRet[iRow, iCol] = iRow.ToString() + "|" + iCol.ToString();
                   }
                }
    
    //Set the range value to the array.
                range.set_Value(Missing.Value, saRet );
             }
    
    //Return control of Excel to the user.
             objApp.Visible = true;
             objApp.UserControl = true;
          }
          catch( Exception theException ) 
          {
             String errorMessage;
             errorMessage = "Error: ";
             errorMessage = String.Concat( errorMessage, theException.Message );
             errorMessage = String.Concat( errorMessage, " Line: " );
             errorMessage = String.Concat( errorMessage, theException.Source );
    
    MessageBox.Show( errorMessage, "Error" );
          }
       }
    

    Hinweis Sie müssen den Code in Visual Studio 2005 ändern. Visual C# fügt dem Projekt standardmäßig ein Formular hinzu, wenn Sie ein Windows Forms Projekt erstellen. Das Formular heißt "Form1". Die beiden Dateien, die das Formular darstellen, heißen "Form1.cs" und "Form1.designer.cs". Sie schreiben den Code in Form1.cs. In der Datei "Form1.designer.cs" schreibt der Windows Forms-Designer den Code, der alle Aktionen implementiert, die Sie durch Ziehen und Ablegen von Steuerelementen aus der Toolbox ausgeführt haben.

    Weitere Informationen zum Windows Forms-Designer in Visual C# 2005 finden Sie auf der folgenden Microsoft Developer Network (MSDN)-Website:

    Erstellen eines Projekts (Visual C#)

  9. Kehren Sie zur Entwurfsansicht für Form1 zurück, und doppelklicken Sie auf Button2.

  10. Ersetzen Sie im Codefenster den folgenden Code:

private void button2_Click(object sender, System.EventArgs e)
{
}

mit:

private void button2_Click(object sender, System.EventArgs e)
   {
      Excel.Sheets objSheets;
      Excel._Worksheet objSheet;
      Excel.Range range;

try
      {
         try
         {
            //Get a reference to the first sheet of the workbook.
            objSheets = objBook.Worksheets;
            objSheet = (Excel._Worksheet)objSheets.get_Item(1);
         }

catch( Exception theException ) 
         {
            String errorMessage;
            errorMessage = "Can't find the Excel workbook.  Try clicking Button1 " +
               "to create an Excel workbook with data before running Button2.";

MessageBox.Show( errorMessage, "Missing Workbook?");

//You can't automate Excel if you can't find the data you created, so 
            //leave the subroutine.
            return;
         }

//Get a range of data.
         range = objSheet.get_Range("A1", "E5");

//Retrieve the data from the range.
         Object[,] saRet;
         saRet = (System.Object[,])range.get_Value( Missing.Value );

//Determine the dimensions of the array.
         long iRows;
         long iCols;
         iRows = saRet.GetUpperBound(0);
         iCols = saRet.GetUpperBound(1);

//Build a string that contains the data of the array.
         String valueString;
         valueString = "Array Data\n";

for (long rowCounter = 1; rowCounter <= iRows; rowCounter++)
         {
            for (long colCounter = 1; colCounter <= iCols; colCounter++)
            {

//Write the next value into the string.
               valueString = String.Concat(valueString,
                  saRet[rowCounter, colCounter].ToString() + ", ");
            }

//Write in a new line.
            valueString = String.Concat(valueString, "\n");
         }

//Report the value of the array.
         MessageBox.Show(valueString, "Array Values");
      }

catch( Exception theException ) 
      {
         String errorMessage;
         errorMessage = "Error: ";
         errorMessage = String.Concat( errorMessage, theException.Message );
         errorMessage = String.Concat( errorMessage, " Line: " );
         errorMessage = String.Concat( errorMessage, theException.Source );

MessageBox.Show( errorMessage, "Error" );
      }
   }
  1. Scrollen Sie zum oberen Rand des Codefensters. Fügen Sie die folgende Zeile am Ende der Liste der verwendenden Direktiven hinzu:

    using System.Reflection; 
    using Excel =  Microsoft.Office.Interop.Excel;
    

Testen des Automatisierungsclients

  1. Drücken Sie F5, um das Beispielprogramm zu erstellen und auszuführen.
  2. Klicken Sie auf Schaltfläche1. Das Programm startet Microsoft Excel mit einer neuen Arbeitsmappe und füllt die Zellen A1:E5 des ersten Arbeitsblatts mit numerischen Daten aus einem Array auf.
  3. Klicken Sie auf Schaltfläche2. Das Programm ruft die Daten in den Zellen A1:E5 in ein neues Array ab und zeigt die Ergebnisse in einem Meldungsfeld an.
  4. Wählen Sie "FillWithStrings" aus, und klicken Sie dann auf "Button1", um die Zellen A1:E5 mit Zeichenfolgendaten zu füllen.

References

Weitere Informationen finden Sie auf der folgenden Microsoft Developer Network (MSDN)-Website:

Microsoft Office-Entwicklung mit Visual Studio