Как автоматизировать приложение Excel с помощью Visual Basic .NET для заполнения или помещения данных в диапазон с использованием массивов

Аннотация

В статье описывается способ автоматизации приложения Microsoft Excel и способ заполнения многоячеечного диапазона с помощью массива значений. Кроме того, в статье показывается процесс извлечения многоячеечного диапазона в качестве массива при помощи автоматизации.

Дополнительная информация

Для заполнения многоячеечного диапазона без поочередного заполнения ячеек можно указать двухмерный массив в качестве значения для свойства Value объекта Range. Аналогично двухмерный массив значений может быть извлечен из нескольких ячеек одновременно с помощью свойства Value. В присведенных нижеь действиях описывается процесс как дляч установки, так и для извлечения данных с помощью двухмерных массивов.

Создание клиента автоматизации для Microsoft Excel

  1. Запустите Microsoft Visual Studio .NET.
  2. В меню Файл выберите команду Создать, а затем — Проект. Выберите из числа проектов Visual Basic тип Приложение Windows. По умолчанию будет создана форма Form1.
  3. Добавьте ссылку на объектную библиотеку Microsoft Excel Object Library. Для этого выполните следующие действия.
    1. В меню Проект выберите команду Добавить ссылку.
    2. На вкладке COM найдите библиотеку Microsoft Excel Object Library и нажмите кнопку Выбрать.

      Примечание. В состав Microsoft Office 2007 и Microsoft Office 2003 входят основные сборки взаимодействия (PIA). Microsoft Office XP не включает эти сборки, но их можно загрузить.


      Для получения дополнительных сведений об основных сборках взаимодействия для Office XP щелкните следующий номер статьи базы знаний Майкрософт:
      328912 Загрузка основных сборок взаимодействия (PIA) для Microsoft Office XP
    3. Для подтверждения сделанного выбора нажмите кнопку OK в диалоговом окне Add References. Если появится запрос на создание оберток для выбранных библиотек, нажмите кнопку Да.
  4. Для отображения панели инструментов выберите в меню Вид команду Область элементов. Добавьте в форму Form1 две кнопки и флажок.
  5. Установите для свойства Name окна значение FillWithStrings.
  6. Дважды щелкните кнопку Button1. Появится окно кода для формы.
  7. Добавьте следующий программный код в верхнюю часть файла Form1.vb:
    Imports Microsoft.Office.Interop
  8. В окне кода замените также следующий код:
        Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click

    End Sub
    этим кодом:
        ' Оставить объекты приложения и книги глобальными, чтобы можно было  
    'получить в методе Button2_Click данные, установленные в методе 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

    ' Создание нового экземпляра Excel и открытие новой книги.
    objApp = New Excel.Application()
    objBooks = objApp.Workbooks
    objBook = objBooks.Add
    objSheets = objBook.Worksheets
    objSheet = objSheets(1)

    'Получение диапазона, в котором лежит адрес начальной ячейки
    'm_sStartingCell, а его размерность равна m_iNumRows x m_iNumCols.
    range = objSheet.Range("A1", Reflection.Missing.Value)
    range = range.Resize(5, 5)

    If (Me.FillWithStrings.Checked = False) Then
    'Создание массива.
    Dim saRet(5, 5) As Double

    'Заполнение массива.
    Dim iRow As Long
    Dim iCol As Long
    For iRow = 0 To 5
    For iCol = 0 To 5

    'Запись счетчика в ячейку.
    saRet(iRow, iCol) = iRow * iCol
    Next iCol
    Next iRow

    'Установка значения range для массива.
    range.Value = saRet

    Else
    'Создание массива.
    Dim saRet(5, 5) As String

    'Заполнение массива.
    Dim EmpID As Long
    Dim EmpID As Long
    For iRow = 0 To 5
    For iCol = 0 To 5

    'Запись адреса строки и столбца в ячейку.
    saRet(iRow, iCol) = iRow.ToString() + "|" + iCol.ToString()
    Next iCol
    Next iRow

    'Установка значения range для массива.
    range.Value = saRet
    End If

    'Возврат управления над Excel пользователю.
    objApp.Visible = True
    objApp.UserControl = True

    'Мини-очистка.
    range = Nothing
    objSheet = Nothing
    objSheets = Nothing
    objBooks = Nothing
    End Sub
  9. Вернитесь в режим конструктора для файла Form1 и щелкните дважды элемент Button2.
  10. В коне кода замените также следующий код:
        Private Sub Button2_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button2.Click

    End Sub
    этим кодом:
        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

    'Получение ссылки на первый лист рабочей книги.
    On Error Goto ExcelNotRunning
    objSheets = objBook.Worksheets
    objSheet = objSheets(1)

    ExcelNotRunning:
    If (Not (Err.Number = 0)) Then
    MessageBox.Show("Невозможно найти книгу Excel. Попробуйте нажать кнопку Button1 для " + _
    "создания книги Excel с данными до нажатия кнопки Button2.", _
    "Книги нет?")

    'Автоматизировать Excelневозможно, если невозможно найти созданные данные,
    'так что выходим из подпрограммы.
    Exit Sub
    End If

    'Получение диапазона данных.
    range = objSheet.Range("A1", "E5")

    'Получение данных из диапазона.
    Dim saRet(,) As Object
    saRet = range.Value

    'Определение размерностей массива.
    Dim iRows As Long
    Dim iCols As Long
    iRows = saRet.GetUpperBound(0)
    iCols = saRet.GetUpperBound(1)

    'Построение строки, содержащей данные из массива.
    Dim valueString As String
    valueString = "Данные массива" + vbCrLf

    Dim rowCounter As Long
    Dim colCounter As Long
    For rowCounter = 1 To iRows
    For colCounter = 1 To iCols

    'Запись следующего значения в строку.
    valueString = String.Concat(valueString, _
    saRet(rowCounter, colCounter).ToString() + ", ")

    Next colCounter

    'Запись новой строки.
    valueString = String.Concat(valueString, vbCrLf)
    Next rowCounter

    'Выдача значения массива.
    MessageBox.Show(valueString, "Значения массива")

    'Мини-очистка.
    range = Nothing
    objSheet = Nothing
    objSheets = Nothing
    End Sub

Проверьте клиент автоматизации

  1. Для создания и запуска примера программы нажмите клавишу F5.
  2. Нажмите кнопку Button1. Microsoft Excel запускается, открывая новую книгу, и ячейки A1:E5 первой таблицы заполнены цифровыми данными из массива.
  3. Нажмите кнопку Button2. Программа извлекает данные из ячеек A1:E5 в новый массив и отображает результаты в диалоговом окне.
  4. Выберите FillWithStrings и нажмите кнопку Button1, чтобы заполнить ячейки A1:E5 строковыми данными.

Ссылки

Для получения дополнительных сведений об использовании массивов для установки и извлечения данных Excel с помощью ранних версий Visual Studio щелкните следующие номера статей базы знаний Майкрософт:
186120 Автоматизация Excel и заполнение диапазона ячеек книги с помощью библиотеки классов MFC (Эта ссылка может указывать на содержимое полностью или частично на английском языке)
(данная ссылка может указывать на материал полностью или частично на английском языке)
186122 Автоматизация Excel и извлечение данных из диапазона ячеек книги с помощью библиотеки классов MFC (Эта ссылка может указывать на содержимое полностью или частично на английском языке)
(данная ссылка может указывать на материал полностью или частично на английском языке)
247412 Способы передачи данных из Visual Basic в Excel
Свойства

Номер статьи: 302094 — последний просмотр: 29 дек. 2007 г. — редакция: 1

Отзывы и предложения