В статье описывается способ автоматизации приложения Microsoft Excel и способ заполнения многоячеечного диапазона с помощью массива значений. Кроме того, в статье показывается процесс извлечения многоячеечного диапазона в качестве массива при помощи автоматизации.
Для заполнения многоячеечного диапазона без поочередного заполнения ячеек можно указать двухмерный массив в качестве значения для свойства
Value объекта
Range. Аналогично двухмерный массив значений может быть извлечен из нескольких ячеек одновременно с помощью свойства
Value. В присведенных нижеь действиях описывается процесс как дляч установки, так и для извлечения данных с помощью двухмерных массивов.
Создание клиента автоматизации для Microsoft Excel
- Запустите Microsoft Visual Studio .NET.
- В меню Файл выберите команду Создать, а затем — Проект. Выберите из числа проектов Visual Basic тип Приложение Windows. По умолчанию будет создана форма Form1.
- Добавьте ссылку на объектную библиотеку Microsoft Excel Object Library. Для этого выполните следующие действия.
- В меню Проект выберите команду Добавить ссылку.
- На вкладке COM найдите библиотеку Microsoft Excel Object Library и нажмите кнопку Выбрать.
Примечание. В состав Microsoft Office 2007 и Microsoft Office 2003 входят основные сборки взаимодействия (PIA). Microsoft Office XP не включает эти сборки, но их можно загрузить.
Для получения дополнительных сведений об основных сборках взаимодействия для Office XP щелкните следующий номер статьи базы знаний Майкрософт: 328912
(http://support.microsoft.com/kb/328912/RU/
)
Загрузка основных сборок взаимодействия (PIA) для Microsoft Office XP
- Для подтверждения сделанного выбора нажмите кнопку OK в диалоговом окне Add References. Если появится запрос на создание оберток для выбранных библиотек, нажмите кнопку Да.
- Для отображения панели инструментов выберите в меню Вид команду Область элементов. Добавьте в форму Form1 две кнопки и флажок.
- Установите для свойства Name окна значение FillWithStrings.
- Дважды щелкните кнопку Button1. Появится окно кода для формы.
- Добавьте следующий программный код в верхнюю часть файла Form1.vb:
Imports Microsoft.Office.Interop
- В окне кода замените также следующий код:
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
- Вернитесь в режим конструктора для файла Form1 и щелкните дважды элемент Button2.
- В коне кода замените также следующий код:
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
Проверьте клиент автоматизации
- Для создания и запуска примера программы нажмите клавишу F5.
- Нажмите кнопку Button1. Microsoft Excel запускается, открывая новую книгу, и ячейки A1:E5 первой таблицы заполнены цифровыми данными из массива.
- Нажмите кнопку Button2. Программа извлекает данные из ячеек A1:E5 в новый массив и отображает результаты в диалоговом окне.
- Выберите FillWithStrings и нажмите кнопку Button1, чтобы заполнить ячейки A1:E5 строковыми данными.
Для получения дополнительных сведений об использовании массивов для установки и извлечения данных Excel с помощью ранних версий Visual Studio щелкните следующие номера статей базы знаний Майкрософт:
186120
(http://support.microsoft.com/kb/186120/RU/
)
Автоматизация Excel и заполнение диапазона ячеек книги с помощью библиотеки классов MFC (Эта ссылка может указывать на содержимое полностью или частично на английском языке)
(данная ссылка может указывать на материал полностью или частично на английском языке)
186122
(http://support.microsoft.com/kb/186122/RU/
)
Автоматизация Excel и извлечение данных из диапазона ячеек книги с помощью библиотеки классов MFC (Эта ссылка может указывать на содержимое полностью или частично на английском языке)
(данная ссылка может указывать на материал полностью или частично на английском языке)
247412
(http://support.microsoft.com/kb/247412/RU/
)
Способы передачи данных из Visual Basic в Excel
Код статьи: 302094 - Последнее изменение :: 29 декабря 2007 г. - Редакция: 6.0
Информация в данной статье относится к следующим продуктам.
- Microsoft Visual Basic .NET 2003 Standard Edition
- Microsoft Visual Basic .NET 2002 Standard Edition
- Microsoft Office Excel 2007
- Microsoft Office Excel 2003
- Microsoft Excel 2002 Standard Edition
| kbhowto kbautomation kbexpertisebeginner KB302094 |