Jak automatizovat Excel z jazyka Visual Basic .NET k vyplnění nebo získání dat v oblasti pomocí polí

Souhrn

Tento článek ukazuje, jak automatizovat aplikaci Microsoft Excel a jak vyplnit oblast s více buňkami polem hodnot. Tento článek také ukazuje, jak pomocí služby Automation načíst oblast s více buňkami jako pole.

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ě dvourozměrné pole hodnot lze načíst 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 .NET.

  2. V nabídce Soubor klikněte na Nový a potom klikněte na Project. V typech projektu jazyka Visual Basic vyberte aplikaci pro Windows. Ve výchozím nastavení je vytvořen Formulář1.

  3. Přidejte odkaz na knihovnu objektů aplikace Microsoft Excel. 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.

    Poznámka Microsoft Office 2007 a Microsoft Office 2003 zahrnují primární sestavení vzájemné spolupráce (PIA). Sada Microsoft Office XP neobsahuje osobní údaje, ale je možné je stáhnout.

  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 vlastnost Name pro zaškrtávací políčko na FillWithStrings.

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

  8. Do horní části souboru Form1.vb přidejte následující položky:

    Imports Microsoft.Office.Interop
    
    
  9. V okně kódu nahraďte následující kód.

     Private Sub Button1_Click(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles Button1.Click
    End Sub
    

    S:

     'Keep the application object and the workbook object global, so you can  
     'retrieve the data in Button2_Click that was set in Button1_Click.
     Dim objApp As Excel.Application
     Dim objBook As Excel._Workbook
    
    Private Sub Button1_Click(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles Button1.Click
         Dim objBooks As Excel.Workbooks
         Dim objSheets As Excel.Sheets
         Dim objSheet As Excel._Worksheet
         Dim range As Excel.Range
    
    ' Create a new instance of Excel and start a new workbook.
         objApp = New Excel.Application()
         objBooks = objApp.Workbooks
         objBook = objBooks.Add
         objSheets = objBook.Worksheets
         objSheet = objSheets(1)
    
    'Get the range where the starting cell has the address
         'm_sStartingCell and its dimensions are m_iNumRows x m_iNumCols.
         range = objSheet.Range("A1", Reflection.Missing.Value)
         range = range.Resize(5, 5)
    
    If (Me.FillWithStrings.Checked = False) Then
             'Create an array.
             Dim saRet(5, 5) As Double
    
    'Fill the array.
             Dim iRow As Long
             Dim iCol As Long
             For iRow = 0 To 5
                 For iCol = 0 To 5
    
    'Put a counter in the cell.
                     saRet(iRow, iCol) = iRow * iCol
                 Next iCol
             Next iRow
    
    'Set the range value to the array.
             range.Value = saRet
    
    Else
             'Create an array.
             Dim saRet(5, 5) As String
    
    'Fill the array.
             Dim iRow As Long
             Dim iCol As Long
             For iRow = 0 To 5
                 For iCol = 0 To 5
    
    'Put the row and column address in the cell.
                     saRet(iRow, iCol) = iRow.ToString() + "|" + iCol.ToString()
                 Next iCol
             Next iRow
    
    'Set the range value to the array.
             range.Value = saRet
         End If
    
    'Return control of Excel to the user.
         objApp.Visible = True
         objApp.UserControl = True
    
    'Clean up a little.
         range = Nothing
         objSheet = Nothing
         objSheets = Nothing
         objBooks = Nothing
     End Sub
    
    
  10. Vraťte se do návrhového zobrazení formuláře Form1 a poklikejte na Tlačítko2.

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

    Private Sub Button2_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles Button2.Click
    
    End Sub
    

    S:

    Private Sub Button2_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles Button2.Click
        Dim objSheets As Excel.Sheets
        Dim objSheet As Excel._Worksheet
        Dim range As Excel.Range
    
    'Get a reference to the first sheet of the workbook.
        On Error Goto ExcelNotRunning
        objSheets = objBook.Worksheets
        objSheet = objSheets(1)
    
    ExcelNotRunning:
        If (Not (Err.Number = 0)) Then
            MessageBox.Show("Cannot find the Excel workbook.  Try clicking Button1 to " + _
            "create an Excel workbook with data before running Button2.", _
            "Missing Workbook?")
    
    'We cannot automate Excel if we cannot find the data we created, 
            'so leave the subroutine.
            Exit Sub
        End If
    
    'Get a range of data.
        range = objSheet.Range("A1", "E5")
    
    'Retrieve the data from the range.
        Dim saRet(,) As Object
        saRet = range.Value
    
    'Determine the dimensions of the array.
        Dim iRows As Long
        Dim iCols As Long
        iRows = saRet.GetUpperBound(0)
        iCols = saRet.GetUpperBound(1)
    
    'Build a string that contains the data of the array.
        Dim valueString As String
        valueString = "Array Data" + vbCrLf
    
    Dim rowCounter As Long
        Dim colCounter As Long
        For rowCounter = 1 To iRows
            For colCounter = 1 To iCols
    
    'Write the next value into the string.
                valueString = String.Concat(valueString, _
                    saRet(rowCounter, colCounter).ToString() + ", ")
    
    Next colCounter
    
    'Write in a new line.
            valueString = String.Concat(valueString, vbCrLf)
        Next rowCounter
    
    'Report the value of the array.
        MessageBox.Show(valueString, "Array Values")
    
    'Clean up a little.
        range = Nothing
        objSheet = Nothing
        objSheets = Nothing
    End Sub
    
    

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 Microsoft Excel je spuštěna s novým sešitem a buňky A1:E5 prvního listu jsou naplněny čí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 o použití polí k nastavení a načtení excelových dat v dřívějších verzích sady Visual Studio získáte v následujícím článku znalostní báze Microsoft Knowledge Base:

247412 INFORMACE: Metody pro přenos dat do Excelu z jazyka Visual Basic