Как для автоматизации Excel от MFC и Visual C++ 2005 или Visual C++.NET для заполнения или получить данные в диапазоне, используя массивы

Переводы статьи Переводы статьи
Код статьи: 308407 - Vizualiza?i produsele pentru care se aplic? acest articol.
Для Microsoft C#.NET версии данной статьи, см. 302096.
Для Microsoft Visual Основные.NET версии данной статьи, см. 302094.
Примечание Microsoft Visual C++ 2005, Microsoft Visual C++.NET 2003 и Microsoft Visual C++.NET 2002 поддерживает обе модели управляемый код, предоставленный корпорацией Майкрософт.NET Framework и неуправляемым собственной модели кода Microsoft Windows. Эта статья относится только к неуправляемым Visual C++ код.
Развернуть все | Свернуть все

В этой статье

Аннотация

В этой статье описывается способ автоматизации Microsoft Excel из Visual C++ 2005 или Visual C++.NET для заполнения и извлечения значений многоячеечного диапазона с Использование массивов.

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

Для заполнения многоячеечного диапазона без заполнения ячеек по одному время, можно установить Значение свойства элемента Диапазон объект двухмерный массив. Аналогичным образом можно получить двумерный массив значений для нескольких ячеек одновременно с помощью Значение свойство. Следующие шаги демонстрируют этот процесс для обоих Задание и извлечение данных с помощью двухмерных массивов.
  1. Следуйте указаниям «Создание клиента автоматизации» раздел создавать базовые следующей статьи базы знаний Майкрософт Клиент автоматизации:
    307473 Как использовать библиотеку типов для автоматизации Office из Visual C++.NET
    На шаге 3 добавьте вторую кнопку и флажок форма. Измените идентификатор кнопки на IDC_GETVALUES и заголовок Получение значений. ID поле, чтобы изменить IDC_CHECK и заголовок Заполнение строк.

    На шаге 4 статьи выберите «Microsoft Excel 10.0 библиотека» при автоматизации Excel 2002 с помощью Office XP. Расположение по умолчанию для Microsoft Excel 2002 является C:\Program Files\Microsoft Office\Office10\Excel.exe. Или выберите «Библиотека объектов 11.0 Microsoft Excel» при автоматизации Microsoft Office Excel 2003. Расположение по умолчанию для Excel 2003 является C:\Program Files\Microsoft Office\Office11\Excel.exe. Выберите следующие интерфейсы Microsoft Excel:
    • _Application
    • _Workbook
    • _Worksheet
    • Диапазон
    • Книги
    • Листы
    На шаге 6 добавьте следующие строки # include непосредственно после инструкции # pragma once директива в Autoprojectdlg.h:
    #include "CApplication.h"
    #include "CRange.h"
    #include "CWorkbook.h"
    #include "CWorkbooks.h"
    #include "CWorksheet.h"
    #include "CWorksheets.h"
    					
  2. Добавить следующие два общих переменных-членов в CAutoProjectDlg класс:
    CApplication oExcel;
    CWorkbook oBook;
    					
  3. В диалоговом окне щелкните правой кнопкой мыши IDC_CHECK и выберите Добавить переменную. Имя переменной m_bFillWithStrings и нажмите кнопку Окончание.
  4. В диалоговом окне дважды щелкните значок Запустить и замените также следующий код
    void CAutoProjectDlg::OnBnClickedRun()
    {
    	// TODO: Add your control notification handler code here
    }
    					
    с помощью:
    void CAutoProjectDlg::OnBnClickedRun()
    {
    	CWorkbooks oBooks;
    	CWorksheets oSheets;
    	CWorksheet oSheet;
    	CRange oRange;
    	COleVariant covOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);
    
    	// If you have not created Excel, create a new instance.
    	if (oExcel.m_lpDispatch == NULL) {
    		oExcel.CreateDispatch("Excel.Application");
    	}
    	// Show Excel to the user.
    	oExcel.put_Visible(TRUE);
    	oExcel.put_UserControl(TRUE);
    
    	// Add a new workbook and get the first worksheet in that book.
    	oBooks = oExcel.get_Workbooks();
    	oBook = oBooks.Add(covOptional);
    	oSheets = oBook.get_Worksheets();
    	oSheet = oSheets.get_Item(COleVariant((short)1));
    
    	// Get a range of data.
    	oRange = oSheet.get_Range(COleVariant("A1"),covOptional);
    	oRange = oRange.get_Resize(COleVariant((short)5),COleVariant((short)5));
    
    	COleSafeArray saRet;
    	DWORD numElements[2];
    	numElements[0] = 5;
    	numElements[1] = 5;
    
    	long index[2];
    	// Create a BSTR or double safe array.
    	if (m_bFillWithStrings.GetCheck())
    		saRet.Create(VT_BSTR,2,numElements);
    	else
    		saRet.Create(VT_R8,2,numElements);
    
    	// Fill the array with data.
    	for (int iRow = 1; iRow <= 5; iRow++) {
    		for (int iCol = 1; iCol <= 5; iCol++) {
    			index[0]=iRow-1;
    			index[1]=iCol-1;
    			if (m_bFillWithStrings.GetCheck()) {
    				CString szTemp;
    				szTemp.Format("%d|%d",iRow,iCol);
    				BSTR bstr = szTemp.AllocSysString();
    				saRet.PutElement(index,bstr);
    				SysFreeString(bstr);
    			} else {
    				double d = iRow * iCol;
    				saRet.PutElement(index,&d);
    			}
    		}
    	}
    	// Send the array to Excel.
    	oRange.put_Value(covOptional,COleVariant(saRet));
    }
    					
    Примечание В Visual C++ 2005 необходимо добавить общий язык среды выполнения поддержка компилятора параметр)/ CLR: oldSyntax) для успешной компиляции предыдущего примера кода. Чтобы добавить параметр компилятора поддержки среды, выполните следующие действия.
    1. Нажмите кнопку Проект, а затем нажмите кнопкуИмя проекта Свойства.

      Примечание Имя проекта — Это имя проекта.
    2. Разверните узел Свойства конфигурации, а затем нажмите кнопкуОбщие.
    3. В области справа щелкните, чтобы выбрать Поддержка среды CLR, старый синтаксис (/ CLR: oldSyntax) В диалоговом окнеПоддержка среды CLR параметры проекта.
    4. Нажмите кнопкуПрименение, а затем нажмите кнопку ОК.
    Для получения дополнительных сведений о общеязыковая среда выполнения поддерживает параметры компилятора, посетите следующий веб-узел Microsoft Developer Network (MSDN):
    http://msdn2.Microsoft.com/en-us/library/k8d11d4s.aspx
    Эти действия применимы ко всей статьи.
  5. Вернуться к диалоговому окну и дважды щелкните значок Получение значений. Замените следующий код
    void CAutoProjectDlg::OnBnClickedGetvalues()
    {
    	// TODO: Add your control notification handler code here
    }
    					
    с помощью:
    void CAutoProjectDlg::OnBnClickedGetvalues()
    {
    	CWorksheets oSheets;
    	CWorksheet oSheet;
    	CRange oRange;
    	COleVariant covOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);
    
    	// Make sure that Excel has been started.
    	if (oExcel.m_lpDispatch == NULL) {
    		AfxMessageBox("Excel has not been started.  Press button1 to start Excel.");
    		return;
    	}
    	// Get the first worksheet.
    	oSheets = oBook.get_Worksheets();
    	oSheet = oSheets.get_Item(COleVariant((short)1));
    	// Set the range of data to retrieve
       	oRange = oSheet.get_Range(COleVariant("A1"),COleVariant("E5"));
    
    	// Get the data.
    	COleSafeArray saRet(oRange.get_Value(covOptional));
    
            long iRows;
            long iCols;
            saRet.GetUBound(1, &iRows);
            saRet.GetUBound(2, &iCols);
    
    	CString valueString = "Array Data:\r\n";
    	long index[2];
    	// Loop through the data and report the contents.
    	for (int rowCounter = 1; rowCounter <= iRows; rowCounter++) {
    		for (int colCounter = 1; colCounter <= iCols; colCounter++) {
    			index[0]=rowCounter;
    			index[1]=colCounter;		   
    			COleVariant vData;
    			saRet.GetElement(index,vData);
    			CString szdata(vData);
                valueString += szdata;
    			valueString += "\t";		
    		}
    		valueString += "\r\n";
    	}
    	AfxMessageBox(valueString,MB_SETFOREGROUND,NULL);
    }
    					

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

  1. Нажмите клавишу F5 для построения и выполнения примера программы.
  2. Нажмите кнопку Запустить. Программа начинает новую книгу Excel и заполняет ячейки A1: E5 первого листа с числовыми данными из массива.
  3. Нажмите кнопку Получение значений. Программа извлекает данные в ячейки a1: E5 в новый массив и отображает результаты в окне сообщения.
  4. Выберите Заполнение строк и нажмите Запустить для заполнения ячеек a1: E5 строковых данных.
  5. Нажмите кнопку Получение значений Чтобы отобразить строковые значения в окне сообщения.

Устранение неполадок

Если добавить интерфейсные классы для библиотеки объектов Excel с помощью очередь Файл параметр Добавить класс из TypeLib мастера, может появиться сообщение об ошибке при переходе к библиотеке объектов. Чтобы избежать этой проблемы Введите полный путь и имя файла для библиотеки объектов вместо перехода файл. Для получения дополнительных сведений нажмите кнопку ниже номер статьи базы знаний Майкрософт:
311408 Ошибка: Предупреждение только для чтения при Добавление класса MFC из библиотеки
Если появляется следующее сообщение об ошибке сообщения при вас Построение образца приложения, измените «Варианта следующейтаблице» CRange.h к «Варианта _DialogBox»:
Предупреждение C4003: недостаточно фактического параметры для макроса «dialogboxa»
Для получения дополнительных сведений о причинах этой ошибки обратитесь к следующей статье базы знаний:
311407 Ошибка: Мастер MFC недопустимости присвоения имен вступает в противоречие с API-Интерфейса макросов

Ссылки

Дополнительные сведения содержатся в следующих разработчиков корпорации Майкрософт Веб-узел сети MSDN:
Разработка приложений Microsoft Office с помощью Visual Studio
http://msdn2.Microsoft.com/en-us/library/aa188489 (office.10) .aspx
Для получения дополнительных сведений об использовании массивов для установки и извлечения Excel данные с более ранними версиями Visual Studio содержатся следующие знаний статьи:
186120 Использование MFC для автоматизации Excel и заполнение диапазона ячеек с массивом
186122 Использование MFC для автоматизации Excel и извлечение данных из диапазона
247412 ИНФОРМАЦИЯ: Методы для передачи данных в Microsoft Excel из Visual Basic

Свойства

Код статьи: 308407 - Последний отзыв: 6 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Excel 2002 Standard Edition
Ключевые слова: 
kbautomation kbhowtomaster kbmt KB308407 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:308407

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com