Automatizace Excelu pomocí jazyka Visual C# k vyplnění nebo získání dat v oblasti pomocí polí

Souhrn

Tento článek ukazuje, jak automatizovat aplikaci Microsoft Excel pomocí jazyka Microsoft Visual C# 2005 nebo Microsoft Visual C# .NET k vyplnění a načtení hodnot v oblasti s více buňkami pomocí polí.

Další informace

Pokud chcete vyplnit oblast s více buňkami bez naplnění buněk po jednom, můžete nastavit vlastnost Value objektu Range na dvojrozměrné pole. Podobně můžete načíst dvojrozměrné pole hodnot pro více buněk najednou pomocí Value vlastnost. Následující kroky ukazují tento proces nastavení i načítání dat pomocí dvojrozměrných polí.

Sestavení klienta automation pro Microsoft Excel

  1. Spusťte Microsoft Visual Studio 2005 nebo Microsoft Visual Studio .NET.

  2. V nabídce Soubor klikněte na Nový a potom klikněte na Project. V typech projektů Visual C# vyberte aplikaci pro Windows. Formulář1 je ve výchozím nastavení vytvořen.

  3. Přidejte odkaz na knihovnu objektů Aplikace Microsoft Excel 11.0 v sadě Visual Studio 2005 nebo Microsoft Excel Object Library v sadě Visual Studio .NET. Postupujte takto:

    1. V nabídce Projekt klikněte na Přidat odkaz.
    2. Na kartě COM vyhledejte Microsoft Excel Object Library a klepněte na tlačítko Vybrat.

    V sadě Visual Studio 2005 vyhledejte microsoft Excel 11.0 Object Library na kartě COM .

    Poznámka Microsoft Office 2003 obsahuje primární sestavení vzájemné spolupráce (PIA). Microsoft Office XP neobsahuje pia, ale mohou být staženy.

  4. Kliknutím na tlačítko OK v dialogovém okně Přidat odkazy potvrďte výběry. Pokud se zobrazí výzva k vygenerování obálek pro vybrané knihovny, klikněte na tlačítko Ano.

  5. V nabídce Zobrazit vyberte Sadu nástrojů a zobrazte sadu nástrojů. Přidejte dvě tlačítka a zaškrtávací políčko do formuláře Form1.

  6. Nastavte vlastnosti Name a Text pro zaškrtávací políčko na FillWithStrings.

  7. Poklikáte na Tlačítko1. Zobrazí se okno kódu formuláře.

  8. V okně kódu nahraďte následující kód:

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

    S:

       //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" );
          }
       }
    

    Poznámka Musíte změnit kód v sadě Visual Studio 2005. Visual C# ve výchozím nastavení přidá jeden formulář do projektu při vytváření projektu model Windows Forms. Formulář má název Form1. Dva soubory, které představují formulář, mají název Form1.cs a Form1.designer.cs. Kód napíšete v Souboru Form1.cs. Soubor Form1.designer.cs je místo, kde návrhář model Windows Forms zapíše kód, který implementuje všechny akce, které jste provedli přetažením ovládacích prvků z panelu nástrojů.

    Další informace o model Windows Forms Designer v jazyce Visual C# 2005 naleznete na následujícím webu Microsoft Developer Network (MSDN):

    Vytvoření projektu (Visual C#)

  9. Vraťte se do návrhového zobrazení formuláře Form1 a poklikejte na tlačítko Button2.

  10. V okně kódu nahraďte následující kód:

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

S:

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. Posuňte se do horní části okna kódu. Na konec seznamu direktiv using přidejte následující řádek:

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

Testování klienta služby Automation

  1. Stisknutím klávesy F5 sestavte a spusťte ukázkový program.
  2. Klikněte na Tlačítko1. Aplikace spustí aplikaci Microsoft Excel novým sešitem a naplní buňky A1:E5 prvního listu číselnými daty z pole.
  3. Klikněte na Tlačítko2. Program načte data v buňkách A1:E5 do nového pole a zobrazí výsledky v okně se zprávou.
  4. Vyberte FillWithStrings a potom kliknutím na Tlačítko1 vyplňte buňky A1:E5 řetězcovými daty.

Odkazy

Další informace naleznete na následujícím webu Microsoft Developer Network (MSDN):

Vývoj pro Microsoft Office pomocí sady Visual Studio