Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Аннотация
В этой статье показано, как автоматизировать Microsoft Excel и как заполнить диапазон из нескольких ячеек массивом значений. В этой статье также показано, как получить диапазон из нескольких ячеек в виде массива с помощью службы автоматизации.
Дополнительная информация
Чтобы заполнить диапазон с несколькими ячейками, не заполняя ячейки по одному, можно задать для свойства Value объекта Range двумерный массив. Аналогичным образом, двумерный массив значений можно получить для нескольких ячеек одновременно с помощью свойства Value. Следующие шаги демонстрируют этот процесс как для настройки, так и для извлечения данных с помощью двумерных массивов.
Создание клиента автоматизации для Microsoft Excel
Запустите Microsoft Visual Studio .NET.
В меню Файл выберите команду Создать, а затем выберите Проект. Выберите приложение Windows из типов проектов Visual Basic. По умолчанию создается Form1.
Добавьте ссылку на библиотеку объектов Microsoft Excel. Для этого выполните следующие действия:
- On the Project menu, click Add Reference.
- На вкладке COM найдите библиотеку объектов Microsoft Excel и нажмите кнопку "Выбрать".
Примечание Microsoft Office 2007 и Microsoft Office 2003 включают основные сборки взаимодействия (PIA). Microsoft Office XP не включает ЛИЧНЫЕ, но их можно скачать.
Нажмите кнопку "ОК" в диалоговом окне "Добавление ссылок", чтобы принять выбранные параметры. Если вам будет предложено создать оболочки для выбранных библиотек, нажмите кнопку "Да".
В меню "Вид" выберите панель элементов, чтобы отобразить панель элементов. Добавьте две кнопки и флажок в 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
на:
'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
Вернитесь в конструктор формы 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 '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
Тестирование клиента службы автоматизации
- Нажмите клавишу F5, чтобы выполнить сборку и запуск примера программы.
- Нажмите кнопку1. Microsoft Excel запускается с новой книги, а ячейки A1:E5 первого листа заполняются числовыми данными из массива.
- Нажмите кнопку "Кнопка2". Программа извлекает данные из ячеек A1:E5 в новый массив и отображает результаты в окне сообщения.
- Выберите FillWithStrings и нажмите кнопку Button1, чтобы заполнить ячейки A1:E5 строковыми данными.
Ссылки
Дополнительные сведения об использовании массивов для задания и извлечения данных Excel в более ранних версиях Visual Studio см. в приведенных ниже номерах статей, чтобы просмотреть статью в базе знаний Майкрософт:
247412 INFO: Методы передачи данных в Excel из Visual Basic